From 16533318f194e231a30b034d6c1ed68162c2f885 Mon Sep 17 00:00:00 2001 From: dilya Date: Thu, 8 Aug 2024 11:17:20 +0500 Subject: [PATCH 01/11] feat: add dockerfile --- Dockerfile | 15 +++++++++ Makefile | 6 ++++ api-deployment.yaml | 74 ++++++++++++++++++++++++++++++++++++++++++ configmap.yaml | 25 +++++++++++++++ docker-compose.yml | 35 ++++++++++++++++++++ postgres-service.yaml | 75 +++++++++++++++++++++++++++++++++++++++++++ redis-service.yaml | 64 ++++++++++++++++++++++++++++++++++++ service.yaml | 12 +++++++ 8 files changed, 306 insertions(+) create mode 100644 Dockerfile create mode 100644 api-deployment.yaml create mode 100644 configmap.yaml create mode 100644 docker-compose.yml create mode 100644 postgres-service.yaml create mode 100644 redis-service.yaml create mode 100644 service.yaml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..87449a9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM golang:1.22 + +RUN curl -L https://github.com/golang-migrate/migrate/releases/download/v4.15.0/migrate.linux-amd64.tar.gz | tar xvz -C /usr/local/bin + +WORKDIR /usr/src/app + +COPY go.mod go.sum ./ + +RUN go mod download && go mod verify + +COPY . . + +RUN go build -v -o /usr/local/bin/app ./cmd/... + +CMD ["app"] diff --git a/Makefile b/Makefile index 43ad9ef..34c534e 100644 --- a/Makefile +++ b/Makefile @@ -16,3 +16,9 @@ migrate-up: migrate-down: migrate -database $(DB_URL) -path internal/database/postgres/migration down + +migrate-docker-down: + docker-compose run app migrate -path ./internal/database/postgres/migration -database "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5435/${POSTGRES_DB}?sslmode=disable" down + +migrate-docker-up: + docker-compose run app migrate -path ./internal/database/postgres/migration -database "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable" up diff --git a/api-deployment.yaml b/api-deployment.yaml new file mode 100644 index 0000000..2868a77 --- /dev/null +++ b/api-deployment.yaml @@ -0,0 +1,74 @@ +apiVersion: v1 +kind: Secret +metadata: + name: api-secret +type: Opaque +data: + jwt_token_secret: +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: api-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: api + template: + metadata: + labels: + app: api + spec: + containers: + - name: api + image: your-dockerhub-username/your-app-image:latest + ports: + - containerPort: 8080 + env: + - name: JWT_TOKEN_SECRET + valueFrom: + secretKeyRef: + name: api-secret + key: jwt_token_secret + - name: POSTGRES_HOST + value: "postgres" + - name: POSTGRES_PORT + value: "5432" + - name: POSTGRES_USER + valueFrom: + secretKeyRef: + name: db-secret + key: postgres_user + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: db-secret + key: postgres_password + - name: POSTGRES_DB + valueFrom: + secretKeyRef: + name: db-secret + key: postgres_db + - name: REDIS_HOST + value: "redis" + - name: REDIS_PORT + value: "6379" + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + name: redis-secret + key: redis_password +--- +apiVersion: v1 +kind: Service +metadata: + name: api-service +spec: + selector: + app: api + ports: + - protocol: TCP + port: 8080 + targetPort: 8080 + type: NodePort diff --git a/configmap.yaml b/configmap.yaml new file mode 100644 index 0000000..51a0c9c --- /dev/null +++ b/configmap.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: app-config +data: + ENVIRONMENT: "local" + JWT_TOKEN_SECRET: "my_secret_key" + REST_PORT: "8080" + ACCESS_TOKEN_EXPIRE: "877" + ADDRESS: "0.0.0.0" + HEADER_TIMEOUT: "5s" + POSTGRES_HOST: "postgres" + POSTGRES_PORT: "5432" + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "12345" + POSTGRES_DB: "postgres" + POSTGRES_TIMEOUT: "30" + POSTGRES_MAX_CONNECTIONS: "20" + REDIS_HOST: "redis" + REDIS_PORT: "6379" + REDIS_PASSWORD: "12345" + REDIS_TIMEOUT: "10" + REDIS_TTL: "5" + REDIS_DATABASE: "0" + REDIS_POOL_SIZE: "10" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..895ba00 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +version: '3.8' + +services: + app: + build: . + ports: + - "8080:8080" + env_file: + - ./local.env + depends_on: + - postgres + - redis + + postgres: + image: postgres:latest + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + ports: + - "5435:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + + redis: + image: redis:latest + command: redis-server --requirepass "${REDIS_PASSWORD}" + ports: + - "6379:6379" + volumes: + - redis_data:/data + +volumes: + postgres_data: + redis_data: \ No newline at end of file diff --git a/postgres-service.yaml b/postgres-service.yaml new file mode 100644 index 0000000..7bb2f9f --- /dev/null +++ b/postgres-service.yaml @@ -0,0 +1,75 @@ +apiVersion: v1 +kind: Secret +metadata: + name: db-secret +type: Opaque +data: + postgres_user: + postgres_password: + postgres_db: +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: postgres-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: postgres + template: + metadata: + labels: + app: postgres + spec: + containers: + - name: postgres + image: postgres:latest + ports: + - containerPort: 5432 + env: + - name: POSTGRES_USER + valueFrom: + secretKeyRef: + name: db-secret + key: postgres_user + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: db-secret + key: postgres_password + - name: POSTGRES_DB + valueFrom: + secretKeyRef: + name: db-secret + key: postgres_db + volumeMounts: + - name: postgres-storage + mountPath: /var/lib/postgresql/data + volumes: + - name: postgres-storage + persistentVolumeClaim: + claimName: postgres-pvc +--- +apiVersion: v1 +kind: Service +metadata: + name: postgres +spec: + selector: + app: postgres + ports: + - protocol: TCP + port: 5432 + targetPort: 5432 diff --git a/redis-service.yaml b/redis-service.yaml new file mode 100644 index 0000000..7cbccd4 --- /dev/null +++ b/redis-service.yaml @@ -0,0 +1,64 @@ +apiVersion: v1 +kind: Secret +metadata: + name: redis-secret +type: Opaque +data: + redis_password: +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: redis-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: redis + template: + metadata: + labels: + app: redis + spec: + containers: + - name: redis + image: redis:latest + ports: + - containerPort: 6379 + command: ["redis-server", "--requirepass", "$(REDIS_PASSWORD)"] + env: + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + name: redis-secret + key: redis_password + volumeMounts: + - name: redis-storage + mountPath: /data + volumes: + - name: redis-storage + persistentVolumeClaim: + claimName: redis-pvc +--- +apiVersion: v1 +kind: Service +metadata: + name: redis +spec: + selector: + app: redis + ports: + - protocol: TCP + port: 6379 + targetPort: 6379 diff --git a/service.yaml b/service.yaml new file mode 100644 index 0000000..e523765 --- /dev/null +++ b/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: flights-booking-api +spec: + selector: + app: flights-booking-api + ports: + - protocol: TCP + port: 80 + targetPort: 8080 + type: NodePort From 85f6f0d9e5c48ba1a9bf723b7f15ec1fbfc252ea Mon Sep 17 00:00:00 2001 From: dilya Date: Mon, 12 Aug 2024 13:29:47 +0600 Subject: [PATCH 02/11] feat: add kuber manifest to run project --- api-deployment.yaml | 74 --------- configmap.yaml | 25 --- kubermanifests.yaml | 358 ++++++++++++++++++++++++++++++++++++++++++ postgres-service.yaml | 75 --------- redis-service.yaml | 64 -------- service.yaml | 12 -- 6 files changed, 358 insertions(+), 250 deletions(-) delete mode 100644 api-deployment.yaml delete mode 100644 configmap.yaml create mode 100644 kubermanifests.yaml delete mode 100644 postgres-service.yaml delete mode 100644 redis-service.yaml delete mode 100644 service.yaml diff --git a/api-deployment.yaml b/api-deployment.yaml deleted file mode 100644 index 2868a77..0000000 --- a/api-deployment.yaml +++ /dev/null @@ -1,74 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: api-secret -type: Opaque -data: - jwt_token_secret: ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: api-deployment -spec: - replicas: 1 - selector: - matchLabels: - app: api - template: - metadata: - labels: - app: api - spec: - containers: - - name: api - image: your-dockerhub-username/your-app-image:latest - ports: - - containerPort: 8080 - env: - - name: JWT_TOKEN_SECRET - valueFrom: - secretKeyRef: - name: api-secret - key: jwt_token_secret - - name: POSTGRES_HOST - value: "postgres" - - name: POSTGRES_PORT - value: "5432" - - name: POSTGRES_USER - valueFrom: - secretKeyRef: - name: db-secret - key: postgres_user - - name: POSTGRES_PASSWORD - valueFrom: - secretKeyRef: - name: db-secret - key: postgres_password - - name: POSTGRES_DB - valueFrom: - secretKeyRef: - name: db-secret - key: postgres_db - - name: REDIS_HOST - value: "redis" - - name: REDIS_PORT - value: "6379" - - name: REDIS_PASSWORD - valueFrom: - secretKeyRef: - name: redis-secret - key: redis_password ---- -apiVersion: v1 -kind: Service -metadata: - name: api-service -spec: - selector: - app: api - ports: - - protocol: TCP - port: 8080 - targetPort: 8080 - type: NodePort diff --git a/configmap.yaml b/configmap.yaml deleted file mode 100644 index 51a0c9c..0000000 --- a/configmap.yaml +++ /dev/null @@ -1,25 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: app-config -data: - ENVIRONMENT: "local" - JWT_TOKEN_SECRET: "my_secret_key" - REST_PORT: "8080" - ACCESS_TOKEN_EXPIRE: "877" - ADDRESS: "0.0.0.0" - HEADER_TIMEOUT: "5s" - POSTGRES_HOST: "postgres" - POSTGRES_PORT: "5432" - POSTGRES_USER: "postgres" - POSTGRES_PASSWORD: "12345" - POSTGRES_DB: "postgres" - POSTGRES_TIMEOUT: "30" - POSTGRES_MAX_CONNECTIONS: "20" - REDIS_HOST: "redis" - REDIS_PORT: "6379" - REDIS_PASSWORD: "12345" - REDIS_TIMEOUT: "10" - REDIS_TTL: "5" - REDIS_DATABASE: "0" - REDIS_POOL_SIZE: "10" diff --git a/kubermanifests.yaml b/kubermanifests.yaml new file mode 100644 index 0000000..995cf45 --- /dev/null +++ b/kubermanifests.yaml @@ -0,0 +1,358 @@ +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: app + name: app +spec: + type: NodePort + ports: + - name: "8080" + port: 8080 + targetPort: 8080 + selector: + io.kompose.service: app + +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: postgres + name: postgres +spec: + ports: + - name: "5432" + port: 5432 + targetPort: 5432 + selector: + io.kompose.service: postgres + +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: redis + name: redis +spec: + ports: + - name: "6379" + port: 6379 + targetPort: 6379 + selector: + io.kompose.service: redis + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: app + name: app +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: app + template: + metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: app + spec: + containers: + - name: app + image: dilyara4949/flight-booking-image + - env: + - name: ACCESS_TOKEN_EXPIRE + valueFrom: + configMapKeyRef: + key: ACCESS_TOKEN_EXPIRE + name: local-env + - name: ADDRESS + valueFrom: + configMapKeyRef: + key: ADDRESS + name: local-env + - name: ENVIRONMENT + valueFrom: + configMapKeyRef: + key: ENVIRONMENT + name: local-env + - name: HEADER_TIMEOUT + valueFrom: + configMapKeyRef: + key: HEADER_TIMEOUT + name: local-env + - name: JWT_TOKEN_SECRET + valueFrom: + configMapKeyRef: + key: JWT_TOKEN_SECRET + name: local-env + - name: POSTGRES_DB + valueFrom: + configMapKeyRef: + key: POSTGRES_DB + name: local-env + - name: POSTGRES_HOST + valueFrom: + configMapKeyRef: + key: POSTGRES_HOST + name: local-env + - name: POSTGRES_MAX_CONNECTIONS + valueFrom: + configMapKeyRef: + key: POSTGRES_MAX_CONNECTIONS + name: local-env + - name: POSTGRES_PASSWORD + valueFrom: + configMapKeyRef: + key: POSTGRES_PASSWORD + name: local-env + - name: POSTGRES_PORT + valueFrom: + configMapKeyRef: + key: POSTGRES_PORT + name: local-env + - name: POSTGRES_TIMEOUT + valueFrom: + configMapKeyRef: + key: POSTGRES_TIMEOUT + name: local-env + - name: POSTGRES_USER + valueFrom: + configMapKeyRef: + key: POSTGRES_USER + name: local-env + - name: REDIS_DATABASE + valueFrom: + configMapKeyRef: + key: REDIS_DATABASE + name: local-env + - name: REDIS_HOST + valueFrom: + configMapKeyRef: + key: REDIS_HOST + name: local-env + - name: REDIS_PASSWORD + valueFrom: + configMapKeyRef: + key: REDIS_PASSWORD + name: local-env + - name: REDIS_POOL_SIZE + valueFrom: + configMapKeyRef: + key: REDIS_POOL_SIZE + name: local-env + - name: REDIS_PORT + valueFrom: + configMapKeyRef: + key: REDIS_PORT + name: local-env + - name: REDIS_TIMEOUT + valueFrom: + configMapKeyRef: + key: REDIS_TIMEOUT + name: local-env + - name: REDIS_TTL + valueFrom: + configMapKeyRef: + key: REDIS_TTL + name: local-env + - name: REST_PORT + valueFrom: + configMapKeyRef: + key: REST_PORT + name: local-env + image: app + name: app + ports: + - containerPort: 8080 + protocol: TCP + restartPolicy: Always + +--- +apiVersion: v1 +data: + ACCESS_TOKEN_EXPIRE: "877" + ADDRESS: 0.0.0.0 + ENVIRONMENT: local + HEADER_TIMEOUT: 5s + JWT_TOKEN_SECRET: my_secret_key + POSTGRES_DB: postgres + POSTGRES_HOST: postgres + POSTGRES_MAX_CONNECTIONS: "20" + POSTGRES_PASSWORD: "12345" + POSTGRES_PORT: "5432" + POSTGRES_TIMEOUT: "30" + POSTGRES_USER: postgres + REDIS_DATABASE: "0" + REDIS_HOST: redis + REDIS_PASSWORD: "12345" + REDIS_POOL_SIZE: "10" + REDIS_PORT: "6379" + REDIS_TIMEOUT: "10" + REDIS_TTL: "5" + REST_PORT: "8080" +kind: ConfigMap +metadata: + labels: + io.kompose.service: app-local-env + name: local-env + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: postgres + name: postgres +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: postgres + strategy: + type: Recreate + template: + metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: postgres + spec: + containers: + - env: + - name: POSTGRES_DB + value: postgres + - name: POSTGRES_PASSWORD + value: "12345" + - name: POSTGRES_USER + value: postgres + image: postgres:latest + name: postgres + ports: + - containerPort: 5432 + protocol: TCP + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgres-data + restartPolicy: Always + volumes: + - name: postgres-data + persistentVolumeClaim: + claimName: postgres-data + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + io.kompose.service: postgres-data + name: postgres-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: redis + name: redis +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: redis + strategy: + type: Recreate + template: + metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: redis + spec: + containers: + - args: + - redis-server + - --requirepass + - "" + image: redis:latest + name: redis + ports: + - containerPort: 6379 + protocol: TCP + volumeMounts: + - mountPath: /data + name: redis-data + restartPolicy: Always + volumes: + - name: redis-data + persistentVolumeClaim: + claimName: redis-data + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + io.kompose.service: redis-data + name: redis-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi + +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: migrate-job +spec: + template: + spec: + containers: + - name: migrate + image: dilyara4949/flight-booking-image:latest + command: ["sh", "-c", "migrate -path ./internal/database/postgres/migration -database postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@postgres:5432/$(POSTGRES_DB)?sslmode=disable up"] + env: + - name: POSTGRES_USER + value: "postgres" + - name: POSTGRES_PASSWORD + value: "12345" + - name: POSTGRES_DB + value: "postgres" + restartPolicy: Never + backoffLimit: 4 diff --git a/postgres-service.yaml b/postgres-service.yaml deleted file mode 100644 index 7bb2f9f..0000000 --- a/postgres-service.yaml +++ /dev/null @@ -1,75 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: db-secret -type: Opaque -data: - postgres_user: - postgres_password: - postgres_db: ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: postgres-pvc -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 1Gi ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: postgres-deployment -spec: - replicas: 1 - selector: - matchLabels: - app: postgres - template: - metadata: - labels: - app: postgres - spec: - containers: - - name: postgres - image: postgres:latest - ports: - - containerPort: 5432 - env: - - name: POSTGRES_USER - valueFrom: - secretKeyRef: - name: db-secret - key: postgres_user - - name: POSTGRES_PASSWORD - valueFrom: - secretKeyRef: - name: db-secret - key: postgres_password - - name: POSTGRES_DB - valueFrom: - secretKeyRef: - name: db-secret - key: postgres_db - volumeMounts: - - name: postgres-storage - mountPath: /var/lib/postgresql/data - volumes: - - name: postgres-storage - persistentVolumeClaim: - claimName: postgres-pvc ---- -apiVersion: v1 -kind: Service -metadata: - name: postgres -spec: - selector: - app: postgres - ports: - - protocol: TCP - port: 5432 - targetPort: 5432 diff --git a/redis-service.yaml b/redis-service.yaml deleted file mode 100644 index 7cbccd4..0000000 --- a/redis-service.yaml +++ /dev/null @@ -1,64 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: redis-secret -type: Opaque -data: - redis_password: ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: redis-pvc -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 1Gi ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: redis-deployment -spec: - replicas: 1 - selector: - matchLabels: - app: redis - template: - metadata: - labels: - app: redis - spec: - containers: - - name: redis - image: redis:latest - ports: - - containerPort: 6379 - command: ["redis-server", "--requirepass", "$(REDIS_PASSWORD)"] - env: - - name: REDIS_PASSWORD - valueFrom: - secretKeyRef: - name: redis-secret - key: redis_password - volumeMounts: - - name: redis-storage - mountPath: /data - volumes: - - name: redis-storage - persistentVolumeClaim: - claimName: redis-pvc ---- -apiVersion: v1 -kind: Service -metadata: - name: redis -spec: - selector: - app: redis - ports: - - protocol: TCP - port: 6379 - targetPort: 6379 diff --git a/service.yaml b/service.yaml deleted file mode 100644 index e523765..0000000 --- a/service.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: flights-booking-api -spec: - selector: - app: flights-booking-api - ports: - - protocol: TCP - port: 80 - targetPort: 8080 - type: NodePort From 58e1260806c65444af1fbc8f4fcd9f06b1c475f1 Mon Sep 17 00:00:00 2001 From: dilya Date: Mon, 12 Aug 2024 13:39:14 +0600 Subject: [PATCH 03/11] fix: add readme and makefile --- Makefile | 3 +++ README.md | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/Makefile b/Makefile index 34c534e..e396741 100644 --- a/Makefile +++ b/Makefile @@ -22,3 +22,6 @@ migrate-docker-down: migrate-docker-up: docker-compose run app migrate -path ./internal/database/postgres/migration -database "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable" up + +apply-kube: + kubectl apply -f kubermanifests.yaml \ No newline at end of file diff --git a/README.md b/README.md index cb91945..67ffb9b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,12 @@ # flight-booking-api api for booking flight tickets + +### Kubernetes + +[Install minikube if you dont have it yet](https://minikube.sigs.k8s.io/docs/start/) + +The you just need too, apply kubernetes configuration to run the project: + +``` +make apply-kube +``` \ No newline at end of file From 1ec0f55676f87dcd3f76b6f230f85ba32b71afcb Mon Sep 17 00:00:00 2001 From: dilyara4949 Date: Tue, 13 Aug 2024 12:39:46 +0500 Subject: [PATCH 04/11] fix: modify readme, add port-forward for makefile --- Makefile | 5 ++++- README.md | 7 +++++++ kubermanifests.yaml | 8 +++----- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index e396741..9ca9d42 100644 --- a/Makefile +++ b/Makefile @@ -24,4 +24,7 @@ migrate-docker-up: docker-compose run app migrate -path ./internal/database/postgres/migration -database "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable" up apply-kube: - kubectl apply -f kubermanifests.yaml \ No newline at end of file + kubectl apply -f kubermanifests.yaml + +kube-forward-port: + kubectl port-forward services/app 8080:8080 diff --git a/README.md b/README.md index 67ffb9b..aef77cd 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,11 @@ The you just need too, apply kubernetes configuration to run the project: ``` make apply-kube +``` + +Warning: job 'migrate-job' may crash before 'app' pod is running, that is why you may recreate 'migrate-job' to run migration on postgres schema after 'app' pod is ready. + +To forward a local port 8080 to a port on a Kubernetes service: +``` +make kube-forward-port ``` \ No newline at end of file diff --git a/kubermanifests.yaml b/kubermanifests.yaml index 995cf45..21f79f2 100644 --- a/kubermanifests.yaml +++ b/kubermanifests.yaml @@ -78,8 +78,8 @@ spec: spec: containers: - name: app - image: dilyara4949/flight-booking-image - - env: + image: dilyara4949/flight-book:latest + env: - name: ACCESS_TOKEN_EXPIRE valueFrom: configMapKeyRef: @@ -180,8 +180,6 @@ spec: configMapKeyRef: key: REST_PORT name: local-env - image: app - name: app ports: - containerPort: 8080 protocol: TCP @@ -345,7 +343,7 @@ spec: spec: containers: - name: migrate - image: dilyara4949/flight-booking-image:latest + image: dilyara4949/flight-book:latest command: ["sh", "-c", "migrate -path ./internal/database/postgres/migration -database postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@postgres:5432/$(POSTGRES_DB)?sslmode=disable up"] env: - name: POSTGRES_USER From 2a701a5357b95d3562ffc2fd8afb1a224383e770 Mon Sep 17 00:00:00 2001 From: dilyara4949 Date: Tue, 13 Aug 2024 13:02:09 +0500 Subject: [PATCH 05/11] fix: postgres port --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9ca9d42..5e80fda 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ migrate-down: migrate -database $(DB_URL) -path internal/database/postgres/migration down migrate-docker-down: - docker-compose run app migrate -path ./internal/database/postgres/migration -database "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5435/${POSTGRES_DB}?sslmode=disable" down + docker-compose run app migrate -path ./internal/database/postgres/migration -database "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable" down migrate-docker-up: docker-compose run app migrate -path ./internal/database/postgres/migration -database "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable" up From 68208bfd8d877323cf4fdaab3ca2c242a10d0dcb Mon Sep 17 00:00:00 2001 From: dilyara4949 Date: Tue, 13 Aug 2024 13:05:31 +0500 Subject: [PATCH 06/11] fix: readme config for containers --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index aef77cd..ea77967 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,19 @@ # flight-booking-api api for booking flight tickets +### Configuration + +Use, if running on local machine: +``` +POSTGRES_HOST=localhost +REDIS_HOST=localhost +``` +if running on docker or kubernetes: +``` +POSTGRES_HOST=postgres +REDIS_HOST=redis +``` + ### Kubernetes [Install minikube if you dont have it yet](https://minikube.sigs.k8s.io/docs/start/) From 1dad04320506f9d822bde7a40eb3a6d2b9d57b2a Mon Sep 17 00:00:00 2001 From: dilyara4949 Date: Wed, 14 Aug 2024 13:01:07 +0500 Subject: [PATCH 07/11] fix: separate kubermanifests to files --- Makefile | 3 - README.md | 2 +- app_deployment.yaml | 130 ++++++++++++++ app_service.yaml | 17 ++ configmap_env.yaml | 27 +++ kubermanifests.yaml | 356 --------------------------------------- migrate_job.yaml | 20 +++ postgres_deployment.yaml | 45 +++++ postgres_pvc.yaml | 12 ++ postgres_service.yaml | 16 ++ redis_deployment.yaml | 42 +++++ redis_pvc.yaml | 12 ++ redis_service.yaml | 16 ++ 13 files changed, 338 insertions(+), 360 deletions(-) create mode 100644 app_deployment.yaml create mode 100644 app_service.yaml create mode 100644 configmap_env.yaml delete mode 100644 kubermanifests.yaml create mode 100644 migrate_job.yaml create mode 100644 postgres_deployment.yaml create mode 100644 postgres_pvc.yaml create mode 100644 postgres_service.yaml create mode 100644 redis_deployment.yaml create mode 100644 redis_pvc.yaml create mode 100644 redis_service.yaml diff --git a/Makefile b/Makefile index a15a18a..4e397c9 100644 --- a/Makefile +++ b/Makefile @@ -38,9 +38,6 @@ migrate-docker-down: migrate-docker-up: docker-compose run app migrate -path ./internal/database/postgres/migration -database "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable" up -apply-kube: - kubectl apply -f kubermanifests.yaml - kube-forward-port: kubectl port-forward services/app 8080:8080 diff --git a/README.md b/README.md index 848960d..fe170a6 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ source set_env.sh The you just need too, apply kubernetes configuration to run the project: ``` -make apply-kube +kubectl apply -f 'filename' ``` Warning: job 'migrate-job' may crash before 'app' pod is running, that is why you may recreate 'migrate-job' to run migration on postgres schema after 'app' pod is ready. diff --git a/app_deployment.yaml b/app_deployment.yaml new file mode 100644 index 0000000..30913c1 --- /dev/null +++ b/app_deployment.yaml @@ -0,0 +1,130 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: app + name: app +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: app + template: + metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: app + spec: + containers: + - name: app + image: dilyara4949/flight-book:latest + env: + - name: ACCESS_TOKEN_EXPIRE + valueFrom: + configMapKeyRef: + key: ACCESS_TOKEN_EXPIRE + name: local-env + - name: ADDRESS + valueFrom: + configMapKeyRef: + key: ADDRESS + name: local-env + - name: ENVIRONMENT + valueFrom: + configMapKeyRef: + key: ENVIRONMENT + name: local-env + - name: HEADER_TIMEOUT + valueFrom: + configMapKeyRef: + key: HEADER_TIMEOUT + name: local-env + - name: JWT_TOKEN_SECRET + valueFrom: + configMapKeyRef: + key: JWT_TOKEN_SECRET + name: local-env + - name: POSTGRES_DB + valueFrom: + configMapKeyRef: + key: POSTGRES_DB + name: local-env + - name: POSTGRES_HOST + valueFrom: + configMapKeyRef: + key: POSTGRES_HOST + name: local-env + - name: POSTGRES_MAX_CONNECTIONS + valueFrom: + configMapKeyRef: + key: POSTGRES_MAX_CONNECTIONS + name: local-env + - name: POSTGRES_PASSWORD + valueFrom: + configMapKeyRef: + key: POSTGRES_PASSWORD + name: local-env + - name: POSTGRES_PORT + valueFrom: + configMapKeyRef: + key: POSTGRES_PORT + name: local-env + - name: POSTGRES_TIMEOUT + valueFrom: + configMapKeyRef: + key: POSTGRES_TIMEOUT + name: local-env + - name: POSTGRES_USER + valueFrom: + configMapKeyRef: + key: POSTGRES_USER + name: local-env + - name: REDIS_DATABASE + valueFrom: + configMapKeyRef: + key: REDIS_DATABASE + name: local-env + - name: REDIS_HOST + valueFrom: + configMapKeyRef: + key: REDIS_HOST + name: local-env + - name: REDIS_PASSWORD + valueFrom: + configMapKeyRef: + key: REDIS_PASSWORD + name: local-env + - name: REDIS_POOL_SIZE + valueFrom: + configMapKeyRef: + key: REDIS_POOL_SIZE + name: local-env + - name: REDIS_PORT + valueFrom: + configMapKeyRef: + key: REDIS_PORT + name: local-env + - name: REDIS_TIMEOUT + valueFrom: + configMapKeyRef: + key: REDIS_TIMEOUT + name: local-env + - name: REDIS_TTL + valueFrom: + configMapKeyRef: + key: REDIS_TTL + name: local-env + - name: REST_PORT + valueFrom: + configMapKeyRef: + key: REST_PORT + name: local-env + ports: + - containerPort: 8080 + protocol: TCP + restartPolicy: Always diff --git a/app_service.yaml b/app_service.yaml new file mode 100644 index 0000000..eb84f09 --- /dev/null +++ b/app_service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: app + name: app +spec: + type: NodePort + ports: + - name: "8080" + port: 8080 + targetPort: 8080 + selector: + io.kompose.service: app diff --git a/configmap_env.yaml b/configmap_env.yaml new file mode 100644 index 0000000..65557b3 --- /dev/null +++ b/configmap_env.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +data: + ACCESS_TOKEN_EXPIRE: "877" + ADDRESS: 0.0.0.0 + ENVIRONMENT: local + HEADER_TIMEOUT: 5s + JWT_TOKEN_SECRET: my_secret_key + POSTGRES_DB: postgres + POSTGRES_HOST: postgres + POSTGRES_MAX_CONNECTIONS: "20" + POSTGRES_PASSWORD: "12345" + POSTGRES_PORT: "5432" + POSTGRES_TIMEOUT: "30" + POSTGRES_USER: postgres + REDIS_DATABASE: "0" + REDIS_HOST: redis + REDIS_PASSWORD: "12345" + REDIS_POOL_SIZE: "10" + REDIS_PORT: "6379" + REDIS_TIMEOUT: "10" + REDIS_TTL: "5" + REST_PORT: "8080" +kind: ConfigMap +metadata: + labels: + io.kompose.service: app-local-env + name: local-env diff --git a/kubermanifests.yaml b/kubermanifests.yaml deleted file mode 100644 index 21f79f2..0000000 --- a/kubermanifests.yaml +++ /dev/null @@ -1,356 +0,0 @@ ---- -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: app - name: app -spec: - type: NodePort - ports: - - name: "8080" - port: 8080 - targetPort: 8080 - selector: - io.kompose.service: app - ---- -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: postgres - name: postgres -spec: - ports: - - name: "5432" - port: 5432 - targetPort: 5432 - selector: - io.kompose.service: postgres - ---- -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: redis - name: redis -spec: - ports: - - name: "6379" - port: 6379 - targetPort: 6379 - selector: - io.kompose.service: redis - ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: app - name: app -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: app - template: - metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: app - spec: - containers: - - name: app - image: dilyara4949/flight-book:latest - env: - - name: ACCESS_TOKEN_EXPIRE - valueFrom: - configMapKeyRef: - key: ACCESS_TOKEN_EXPIRE - name: local-env - - name: ADDRESS - valueFrom: - configMapKeyRef: - key: ADDRESS - name: local-env - - name: ENVIRONMENT - valueFrom: - configMapKeyRef: - key: ENVIRONMENT - name: local-env - - name: HEADER_TIMEOUT - valueFrom: - configMapKeyRef: - key: HEADER_TIMEOUT - name: local-env - - name: JWT_TOKEN_SECRET - valueFrom: - configMapKeyRef: - key: JWT_TOKEN_SECRET - name: local-env - - name: POSTGRES_DB - valueFrom: - configMapKeyRef: - key: POSTGRES_DB - name: local-env - - name: POSTGRES_HOST - valueFrom: - configMapKeyRef: - key: POSTGRES_HOST - name: local-env - - name: POSTGRES_MAX_CONNECTIONS - valueFrom: - configMapKeyRef: - key: POSTGRES_MAX_CONNECTIONS - name: local-env - - name: POSTGRES_PASSWORD - valueFrom: - configMapKeyRef: - key: POSTGRES_PASSWORD - name: local-env - - name: POSTGRES_PORT - valueFrom: - configMapKeyRef: - key: POSTGRES_PORT - name: local-env - - name: POSTGRES_TIMEOUT - valueFrom: - configMapKeyRef: - key: POSTGRES_TIMEOUT - name: local-env - - name: POSTGRES_USER - valueFrom: - configMapKeyRef: - key: POSTGRES_USER - name: local-env - - name: REDIS_DATABASE - valueFrom: - configMapKeyRef: - key: REDIS_DATABASE - name: local-env - - name: REDIS_HOST - valueFrom: - configMapKeyRef: - key: REDIS_HOST - name: local-env - - name: REDIS_PASSWORD - valueFrom: - configMapKeyRef: - key: REDIS_PASSWORD - name: local-env - - name: REDIS_POOL_SIZE - valueFrom: - configMapKeyRef: - key: REDIS_POOL_SIZE - name: local-env - - name: REDIS_PORT - valueFrom: - configMapKeyRef: - key: REDIS_PORT - name: local-env - - name: REDIS_TIMEOUT - valueFrom: - configMapKeyRef: - key: REDIS_TIMEOUT - name: local-env - - name: REDIS_TTL - valueFrom: - configMapKeyRef: - key: REDIS_TTL - name: local-env - - name: REST_PORT - valueFrom: - configMapKeyRef: - key: REST_PORT - name: local-env - ports: - - containerPort: 8080 - protocol: TCP - restartPolicy: Always - ---- -apiVersion: v1 -data: - ACCESS_TOKEN_EXPIRE: "877" - ADDRESS: 0.0.0.0 - ENVIRONMENT: local - HEADER_TIMEOUT: 5s - JWT_TOKEN_SECRET: my_secret_key - POSTGRES_DB: postgres - POSTGRES_HOST: postgres - POSTGRES_MAX_CONNECTIONS: "20" - POSTGRES_PASSWORD: "12345" - POSTGRES_PORT: "5432" - POSTGRES_TIMEOUT: "30" - POSTGRES_USER: postgres - REDIS_DATABASE: "0" - REDIS_HOST: redis - REDIS_PASSWORD: "12345" - REDIS_POOL_SIZE: "10" - REDIS_PORT: "6379" - REDIS_TIMEOUT: "10" - REDIS_TTL: "5" - REST_PORT: "8080" -kind: ConfigMap -metadata: - labels: - io.kompose.service: app-local-env - name: local-env - ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: postgres - name: postgres -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: postgres - strategy: - type: Recreate - template: - metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: postgres - spec: - containers: - - env: - - name: POSTGRES_DB - value: postgres - - name: POSTGRES_PASSWORD - value: "12345" - - name: POSTGRES_USER - value: postgres - image: postgres:latest - name: postgres - ports: - - containerPort: 5432 - protocol: TCP - volumeMounts: - - mountPath: /var/lib/postgresql/data - name: postgres-data - restartPolicy: Always - volumes: - - name: postgres-data - persistentVolumeClaim: - claimName: postgres-data - ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - labels: - io.kompose.service: postgres-data - name: postgres-data -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 100Mi - ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: redis - name: redis -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: redis - strategy: - type: Recreate - template: - metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: redis - spec: - containers: - - args: - - redis-server - - --requirepass - - "" - image: redis:latest - name: redis - ports: - - containerPort: 6379 - protocol: TCP - volumeMounts: - - mountPath: /data - name: redis-data - restartPolicy: Always - volumes: - - name: redis-data - persistentVolumeClaim: - claimName: redis-data - ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - labels: - io.kompose.service: redis-data - name: redis-data -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 100Mi - ---- -apiVersion: batch/v1 -kind: Job -metadata: - name: migrate-job -spec: - template: - spec: - containers: - - name: migrate - image: dilyara4949/flight-book:latest - command: ["sh", "-c", "migrate -path ./internal/database/postgres/migration -database postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@postgres:5432/$(POSTGRES_DB)?sslmode=disable up"] - env: - - name: POSTGRES_USER - value: "postgres" - - name: POSTGRES_PASSWORD - value: "12345" - - name: POSTGRES_DB - value: "postgres" - restartPolicy: Never - backoffLimit: 4 diff --git a/migrate_job.yaml b/migrate_job.yaml new file mode 100644 index 0000000..f29ac11 --- /dev/null +++ b/migrate_job.yaml @@ -0,0 +1,20 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: migrate-job +spec: + template: + spec: + containers: + - name: migrate + image: dilyara4949/flight-book:latest + command: ["sh", "-c", "migrate -path ./internal/database/postgres/migration -database postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@postgres:5432/$(POSTGRES_DB)?sslmode=disable up"] + env: + - name: POSTGRES_USER + value: "postgres" + - name: POSTGRES_PASSWORD + value: "12345" + - name: POSTGRES_DB + value: "postgres" + restartPolicy: Never + backoffLimit: 4 diff --git a/postgres_deployment.yaml b/postgres_deployment.yaml new file mode 100644 index 0000000..60588e2 --- /dev/null +++ b/postgres_deployment.yaml @@ -0,0 +1,45 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: postgres + name: postgres +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: postgres + strategy: + type: Recreate + template: + metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: postgres + spec: + containers: + - env: + - name: POSTGRES_DB + value: postgres + - name: POSTGRES_PASSWORD + value: "12345" + - name: POSTGRES_USER + value: postgres + image: postgres:latest + name: postgres + ports: + - containerPort: 5432 + protocol: TCP + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgres-data + restartPolicy: Always + volumes: + - name: postgres-data + persistentVolumeClaim: + claimName: postgres-data diff --git a/postgres_pvc.yaml b/postgres_pvc.yaml new file mode 100644 index 0000000..27c2094 --- /dev/null +++ b/postgres_pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + io.kompose.service: postgres-data + name: postgres-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi diff --git a/postgres_service.yaml b/postgres_service.yaml new file mode 100644 index 0000000..e43fdb5 --- /dev/null +++ b/postgres_service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: postgres + name: postgres +spec: + ports: + - name: "5432" + port: 5432 + targetPort: 5432 + selector: + io.kompose.service: postgres diff --git a/redis_deployment.yaml b/redis_deployment.yaml new file mode 100644 index 0000000..53c6e4e --- /dev/null +++ b/redis_deployment.yaml @@ -0,0 +1,42 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: redis + name: redis +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: redis + strategy: + type: Recreate + template: + metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: redis + spec: + containers: + - args: + - redis-server + - --requirepass + - "" + image: redis:latest + name: redis + ports: + - containerPort: 6379 + protocol: TCP + volumeMounts: + - mountPath: /data + name: redis-data + restartPolicy: Always + volumes: + - name: redis-data + persistentVolumeClaim: + claimName: redis-data diff --git a/redis_pvc.yaml b/redis_pvc.yaml new file mode 100644 index 0000000..84464c6 --- /dev/null +++ b/redis_pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + io.kompose.service: redis-data + name: redis-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi diff --git a/redis_service.yaml b/redis_service.yaml new file mode 100644 index 0000000..df888b0 --- /dev/null +++ b/redis_service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) + labels: + io.kompose.service: redis + name: redis +spec: + ports: + - name: "6379" + port: 6379 + targetPort: 6379 + selector: + io.kompose.service: redis From 8d8599850610403ea0d477c1c0425352db19caf3 Mon Sep 17 00:00:00 2001 From: dilyara4949 Date: Wed, 14 Aug 2024 14:20:02 +0500 Subject: [PATCH 08/11] fix: add secret for postgres and redis password --- postgres_deployment.yaml | 5 ++++- postgres_secret.yaml | 7 +++++++ redis_deployment.yaml | 8 +++++++- redis_secret.yaml | 7 +++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 postgres_secret.yaml create mode 100644 redis_secret.yaml diff --git a/postgres_deployment.yaml b/postgres_deployment.yaml index 60588e2..61e212b 100644 --- a/postgres_deployment.yaml +++ b/postgres_deployment.yaml @@ -27,7 +27,10 @@ spec: - name: POSTGRES_DB value: postgres - name: POSTGRES_PASSWORD - value: "12345" + valueFrom: + secretKeyRef: + name: postgres-secret + key: POSTGRES_PASSWORD - name: POSTGRES_USER value: postgres image: postgres:latest diff --git a/postgres_secret.yaml b/postgres_secret.yaml new file mode 100644 index 0000000..02f8063 --- /dev/null +++ b/postgres_secret.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Secret +metadata: + name: postgres-secret +type: Opaque +data: + REDIS_PASSWORD: MTIzNDU= diff --git a/redis_deployment.yaml b/redis_deployment.yaml index 53c6e4e..6634c5a 100644 --- a/redis_deployment.yaml +++ b/redis_deployment.yaml @@ -26,12 +26,18 @@ spec: - args: - redis-server - --requirepass - - "" + - "$(REDIS_PASSWORD)" image: redis:latest name: redis ports: - containerPort: 6379 protocol: TCP + env: + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + name: redis-secret + key: REDIS_PASSWORD volumeMounts: - mountPath: /data name: redis-data diff --git a/redis_secret.yaml b/redis_secret.yaml new file mode 100644 index 0000000..eaf89b0 --- /dev/null +++ b/redis_secret.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Secret +metadata: + name: redis-secret +type: Opaque +data: + REDIS_PASSWORD: MTIzNDU= From f45c27a173e3f7e826130b15ce2bc084196a92b8 Mon Sep 17 00:00:00 2001 From: dilyara4949 Date: Wed, 14 Aug 2024 14:21:38 +0500 Subject: [PATCH 09/11] fix: remove password from configmap --- configmap_env.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/configmap_env.yaml b/configmap_env.yaml index 65557b3..1e66eb1 100644 --- a/configmap_env.yaml +++ b/configmap_env.yaml @@ -8,13 +8,11 @@ data: POSTGRES_DB: postgres POSTGRES_HOST: postgres POSTGRES_MAX_CONNECTIONS: "20" - POSTGRES_PASSWORD: "12345" POSTGRES_PORT: "5432" POSTGRES_TIMEOUT: "30" POSTGRES_USER: postgres REDIS_DATABASE: "0" REDIS_HOST: redis - REDIS_PASSWORD: "12345" REDIS_POOL_SIZE: "10" REDIS_PORT: "6379" REDIS_TIMEOUT: "10" From ef25dfff2987fe05d3d5b2b74b56e6a4db57d997 Mon Sep 17 00:00:00 2001 From: dilyara4949 Date: Wed, 21 Aug 2024 15:53:09 +0500 Subject: [PATCH 10/11] feat: add heml chart for kube-manifests --- Makefile | 2 +- README.md | 7 +- app_deployment.yaml | 130 --------------- app_service.yaml | 17 -- booking-chart/.helmignore | 23 +++ booking-chart/Chart.yaml | 24 +++ booking-chart/templates/app_deployment.yaml | 28 ++++ booking-chart/templates/app_service.yaml | 13 ++ booking-chart/templates/configmap_env.yaml | 25 +++ booking-chart/templates/migrate_job.yaml | 26 +++ .../templates/postgres_deployment.yaml | 34 ++-- .../templates/postgres_pvc.yaml | 6 +- booking-chart/templates/postgres_secret.yaml | 7 + .../templates/postgres_service.yaml | 12 +- .../templates/redis_deployment.yaml | 25 ++- booking-chart/templates/redis_pvc.yaml | 12 ++ booking-chart/templates/redis_secret.yaml | 9 ++ booking-chart/templates/redis_service.yaml | 16 ++ booking-chart/values.yaml | 152 ++++++++++++++++++ configmap_env.yaml | 25 --- migrate_job.yaml | 20 --- postgres_pvc.yaml | 12 -- postgres_secret.yaml | 7 - redis_secret.yaml | 7 - redis_service.yaml | 16 -- 25 files changed, 378 insertions(+), 277 deletions(-) delete mode 100644 app_deployment.yaml delete mode 100644 app_service.yaml create mode 100644 booking-chart/.helmignore create mode 100644 booking-chart/Chart.yaml create mode 100644 booking-chart/templates/app_deployment.yaml create mode 100644 booking-chart/templates/app_service.yaml create mode 100644 booking-chart/templates/configmap_env.yaml create mode 100644 booking-chart/templates/migrate_job.yaml rename postgres_deployment.yaml => booking-chart/templates/postgres_deployment.yaml (59%) rename redis_pvc.yaml => booking-chart/templates/postgres_pvc.yaml (58%) create mode 100644 booking-chart/templates/postgres_secret.yaml rename postgres_service.yaml => booking-chart/templates/postgres_service.yaml (52%) rename redis_deployment.yaml => booking-chart/templates/redis_deployment.yaml (66%) create mode 100644 booking-chart/templates/redis_pvc.yaml create mode 100644 booking-chart/templates/redis_secret.yaml create mode 100644 booking-chart/templates/redis_service.yaml create mode 100644 booking-chart/values.yaml delete mode 100644 configmap_env.yaml delete mode 100644 migrate_job.yaml delete mode 100644 postgres_pvc.yaml delete mode 100644 postgres_secret.yaml delete mode 100644 redis_secret.yaml delete mode 100644 redis_service.yaml diff --git a/Makefile b/Makefile index 4e397c9..9d66310 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ migrate-docker-up: docker-compose run app migrate -path ./internal/database/postgres/migration -database "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable" up kube-forward-port: - kubectl port-forward services/app 8080:8080 + kubectl port-forward services/booking-app-app 8080:8080 migrate-up-test: migrate -database $(DB_URL_TEST) -path internal/database/postgres/migration up diff --git a/README.md b/README.md index fe170a6..7191bfc 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,12 @@ source set_env.sh The you just need too, apply kubernetes configuration to run the project: ``` -kubectl apply -f 'filename' +helm install booking-app ./booking-chart +``` + +or to update: +``` +helm upgrade booking-app ./booking-chart ``` Warning: job 'migrate-job' may crash before 'app' pod is running, that is why you may recreate 'migrate-job' to run migration on postgres schema after 'app' pod is ready. diff --git a/app_deployment.yaml b/app_deployment.yaml deleted file mode 100644 index 30913c1..0000000 --- a/app_deployment.yaml +++ /dev/null @@ -1,130 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: app - name: app -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: app - template: - metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: app - spec: - containers: - - name: app - image: dilyara4949/flight-book:latest - env: - - name: ACCESS_TOKEN_EXPIRE - valueFrom: - configMapKeyRef: - key: ACCESS_TOKEN_EXPIRE - name: local-env - - name: ADDRESS - valueFrom: - configMapKeyRef: - key: ADDRESS - name: local-env - - name: ENVIRONMENT - valueFrom: - configMapKeyRef: - key: ENVIRONMENT - name: local-env - - name: HEADER_TIMEOUT - valueFrom: - configMapKeyRef: - key: HEADER_TIMEOUT - name: local-env - - name: JWT_TOKEN_SECRET - valueFrom: - configMapKeyRef: - key: JWT_TOKEN_SECRET - name: local-env - - name: POSTGRES_DB - valueFrom: - configMapKeyRef: - key: POSTGRES_DB - name: local-env - - name: POSTGRES_HOST - valueFrom: - configMapKeyRef: - key: POSTGRES_HOST - name: local-env - - name: POSTGRES_MAX_CONNECTIONS - valueFrom: - configMapKeyRef: - key: POSTGRES_MAX_CONNECTIONS - name: local-env - - name: POSTGRES_PASSWORD - valueFrom: - configMapKeyRef: - key: POSTGRES_PASSWORD - name: local-env - - name: POSTGRES_PORT - valueFrom: - configMapKeyRef: - key: POSTGRES_PORT - name: local-env - - name: POSTGRES_TIMEOUT - valueFrom: - configMapKeyRef: - key: POSTGRES_TIMEOUT - name: local-env - - name: POSTGRES_USER - valueFrom: - configMapKeyRef: - key: POSTGRES_USER - name: local-env - - name: REDIS_DATABASE - valueFrom: - configMapKeyRef: - key: REDIS_DATABASE - name: local-env - - name: REDIS_HOST - valueFrom: - configMapKeyRef: - key: REDIS_HOST - name: local-env - - name: REDIS_PASSWORD - valueFrom: - configMapKeyRef: - key: REDIS_PASSWORD - name: local-env - - name: REDIS_POOL_SIZE - valueFrom: - configMapKeyRef: - key: REDIS_POOL_SIZE - name: local-env - - name: REDIS_PORT - valueFrom: - configMapKeyRef: - key: REDIS_PORT - name: local-env - - name: REDIS_TIMEOUT - valueFrom: - configMapKeyRef: - key: REDIS_TIMEOUT - name: local-env - - name: REDIS_TTL - valueFrom: - configMapKeyRef: - key: REDIS_TTL - name: local-env - - name: REST_PORT - valueFrom: - configMapKeyRef: - key: REST_PORT - name: local-env - ports: - - containerPort: 8080 - protocol: TCP - restartPolicy: Always diff --git a/app_service.yaml b/app_service.yaml deleted file mode 100644 index eb84f09..0000000 --- a/app_service.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: app - name: app -spec: - type: NodePort - ports: - - name: "8080" - port: 8080 - targetPort: 8080 - selector: - io.kompose.service: app diff --git a/booking-chart/.helmignore b/booking-chart/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/booking-chart/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/booking-chart/Chart.yaml b/booking-chart/Chart.yaml new file mode 100644 index 0000000..fe10b94 --- /dev/null +++ b/booking-chart/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: booking-chart +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/booking-chart/templates/app_deployment.yaml b/booking-chart/templates/app_deployment.yaml new file mode 100644 index 0000000..c96c37b --- /dev/null +++ b/booking-chart/templates/app_deployment.yaml @@ -0,0 +1,28 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Release.Name }}-app + labels: + app: {{ .Release.Name }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ .Release.Name }} + spec: + containers: + - name: {{ .Release.Name }}-app + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + ports: + - containerPort: {{ .Values.service.port }} + env: + {{- range $key, $value := .Values.env }} + - name: {{ $key }} + value: "{{ $value }}" + {{- end }} + resources: {} + restartPolicy: Always diff --git a/booking-chart/templates/app_service.yaml b/booking-chart/templates/app_service.yaml new file mode 100644 index 0000000..b1a2840 --- /dev/null +++ b/booking-chart/templates/app_service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }}-app + labels: + app: {{ .Release.Name }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: {{ .Values.service.port }} + selector: + app: {{ .Release.Name }} diff --git a/booking-chart/templates/configmap_env.yaml b/booking-chart/templates/configmap_env.yaml new file mode 100644 index 0000000..eb867ba --- /dev/null +++ b/booking-chart/templates/configmap_env.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-local-env + labels: + io.kompose.service: app-local-env +data: + ACCESS_TOKEN_EXPIRE: "{{ .Values.env.ACCESS_TOKEN_EXPIRE }}" + ADDRESS: "{{ .Values.env.ADDRESS }}" + ENVIRONMENT: "{{ .Values.env.ENVIRONMENT }}" + HEADER_TIMEOUT: "{{ .Values.env.HEADER_TIMEOUT }}" + JWT_TOKEN_SECRET: "{{ .Values.env.JWT_TOKEN_SECRET }}" + POSTGRES_DB: "{{ .Values.env.POSTGRES_DB }}" + POSTGRES_HOST: "{{ .Values.env.POSTGRES_HOST }}" + POSTGRES_MAX_CONNECTIONS: "{{ .Values.env.POSTGRES_MAX_CONNECTIONS }}" + POSTGRES_PORT: "{{ .Values.env.POSTGRES_PORT }}" + POSTGRES_TIMEOUT: "{{ .Values.env.POSTGRES_TIMEOUT }}" + POSTGRES_USER: "{{ .Values.env.POSTGRES_USER }}" + REDIS_DATABASE: "{{ .Values.env.REDIS_DATABASE }}" + REDIS_HOST: "{{ .Values.env.REDIS_HOST }}" + REDIS_POOL_SIZE: "{{ .Values.env.REDIS_POOL_SIZE }}" + REDIS_PORT: "{{ .Values.env.REDIS_PORT }}" + REDIS_TIMEOUT: "{{ .Values.env.REDIS_TIMEOUT }}" + REDIS_TTL: "{{ .Values.env.REDIS_TTL }}" + REST_PORT: "{{ .Values.env.REST_PORT }}" diff --git a/booking-chart/templates/migrate_job.yaml b/booking-chart/templates/migrate_job.yaml new file mode 100644 index 0000000..8620003 --- /dev/null +++ b/booking-chart/templates/migrate_job.yaml @@ -0,0 +1,26 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ .Release.Name }}-migrate-job +spec: + template: + spec: + containers: + - name: migrate + image: {{ .Values.migrate.image }}:{{ .Values.migrate.tag }} + command: + - sh + - -c + - migrate -path ./internal/database/postgres/migration -database postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@{{ .Values.env.POSTGRES_HOST}}:{{ .Values.env.POSTGRES_PORT }}/$(POSTGRES_DB)?sslmode=disable up + env: + - name: POSTGRES_USER + value: {{ .Values.env.POSTGRES_USER }} + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-postgres-secret + key: POSTGRES_PASSWORD + - name: POSTGRES_DB + value: {{ .Values.env.POSTGRES_DB }} + restartPolicy: Never + backoffLimit: {{ .Values.migrate.backoffLimit }} diff --git a/postgres_deployment.yaml b/booking-chart/templates/postgres_deployment.yaml similarity index 59% rename from postgres_deployment.yaml rename to booking-chart/templates/postgres_deployment.yaml index 61e212b..abbd7fb 100644 --- a/postgres_deployment.yaml +++ b/booking-chart/templates/postgres_deployment.yaml @@ -1,43 +1,43 @@ apiVersion: apps/v1 kind: Deployment metadata: + name: {{ .Release.Name }}-postgres + labels: + app: {{ .Release.Name }}-postgres annotations: kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: postgres - name: postgres spec: - replicas: 1 + replicas: {{ .Values.postgres.replicaCount }} selector: matchLabels: - io.kompose.service: postgres + app: {{ .Release.Name }}-postgres strategy: type: Recreate template: metadata: + labels: + app: {{ .Release.Name }}-postgres annotations: kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: postgres spec: containers: - - env: + - name: {{ .Release.Name }}-postgres + image: "{{ .Values.postgres.image.repository }}:{{ .Values.postgres.image.tag }}" + ports: + - containerPort: {{ .Values.env.POSTGRES_PORT }} + protocol: TCP + env: - name: POSTGRES_DB - value: postgres + value: "{{ .Values.env.POSTGRES_DB }}" - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: - name: postgres-secret + name: {{ .Release.Name }}-postgres-secret key: POSTGRES_PASSWORD - name: POSTGRES_USER - value: postgres - image: postgres:latest - name: postgres - ports: - - containerPort: 5432 - protocol: TCP + value: "{{ .Values.env.POSTGRES_USER }}" volumeMounts: - mountPath: /var/lib/postgresql/data name: postgres-data @@ -45,4 +45,4 @@ spec: volumes: - name: postgres-data persistentVolumeClaim: - claimName: postgres-data + claimName: {{ .Release.Name }}-postgres-data diff --git a/redis_pvc.yaml b/booking-chart/templates/postgres_pvc.yaml similarity index 58% rename from redis_pvc.yaml rename to booking-chart/templates/postgres_pvc.yaml index 84464c6..9433dd7 100644 --- a/redis_pvc.yaml +++ b/booking-chart/templates/postgres_pvc.yaml @@ -1,12 +1,10 @@ apiVersion: v1 kind: PersistentVolumeClaim metadata: - labels: - io.kompose.service: redis-data - name: redis-data + name: {{ .Release.Name }}-postgres-data spec: accessModes: - ReadWriteOnce resources: requests: - storage: 100Mi + storage: 1Gi diff --git a/booking-chart/templates/postgres_secret.yaml b/booking-chart/templates/postgres_secret.yaml new file mode 100644 index 0000000..1eba5ec --- /dev/null +++ b/booking-chart/templates/postgres_secret.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-postgres-secret +type: Opaque +data: + POSTGRES_PASSWORD: {{ .Values.env.POSTGRES_PASSWORD | b64enc }} diff --git a/postgres_service.yaml b/booking-chart/templates/postgres_service.yaml similarity index 52% rename from postgres_service.yaml rename to booking-chart/templates/postgres_service.yaml index e43fdb5..1891afe 100644 --- a/postgres_service.yaml +++ b/booking-chart/templates/postgres_service.yaml @@ -1,16 +1,16 @@ apiVersion: v1 kind: Service metadata: + name: {{ .Release.Name }}-postgres + labels: + app: {{ .Release.Name }}-postgres annotations: kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: postgres - name: postgres spec: ports: - name: "5432" - port: 5432 - targetPort: 5432 + port: {{ .Values.env.POSTGRES_PORT }} + targetPort: {{ .Values.env.POSTGRES_PORT }} selector: - io.kompose.service: postgres + app: {{ .Release.Name }}-postgres diff --git a/redis_deployment.yaml b/booking-chart/templates/redis_deployment.yaml similarity index 66% rename from redis_deployment.yaml rename to booking-chart/templates/redis_deployment.yaml index 6634c5a..181a7ce 100644 --- a/redis_deployment.yaml +++ b/booking-chart/templates/redis_deployment.yaml @@ -1,34 +1,31 @@ apiVersion: apps/v1 kind: Deployment metadata: + name: {{ .Release.Name }}-redis + labels: + app: {{ .Release.Name }}-redis annotations: kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: redis - name: redis spec: - replicas: 1 + replicas: {{ .Values.redis.replicaCount }} selector: matchLabels: - io.kompose.service: redis + app: {{ .Release.Name }}-redis strategy: type: Recreate template: metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) labels: - io.kompose.service: redis + app: {{ .Release.Name }}-redis spec: containers: - - args: + - name: redis + image: {{ .Values.redis.image.repository }}:{{ .Values.redis.image.tag }} + args: - redis-server - --requirepass - "$(REDIS_PASSWORD)" - image: redis:latest - name: redis ports: - containerPort: 6379 protocol: TCP @@ -36,7 +33,7 @@ spec: - name: REDIS_PASSWORD valueFrom: secretKeyRef: - name: redis-secret + name: {{ .Release.Name }}-redis-secret key: REDIS_PASSWORD volumeMounts: - mountPath: /data @@ -45,4 +42,4 @@ spec: volumes: - name: redis-data persistentVolumeClaim: - claimName: redis-data + claimName: {{ .Release.Name }}-redis-data diff --git a/booking-chart/templates/redis_pvc.yaml b/booking-chart/templates/redis_pvc.yaml new file mode 100644 index 0000000..8e335b7 --- /dev/null +++ b/booking-chart/templates/redis_pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ .Release.Name }}-redis-data + labels: + app: {{ .Release.Name }}-redis-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.redis.persistentVolume.storage }} diff --git a/booking-chart/templates/redis_secret.yaml b/booking-chart/templates/redis_secret.yaml new file mode 100644 index 0000000..225d513 --- /dev/null +++ b/booking-chart/templates/redis_secret.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-redis-secret + labels: + app: {{ .Release.Name }}-redis-secret +type: Opaque +data: + REDIS_PASSWORD: {{ .Values.env.REDIS_PASSWORD | b64enc }} diff --git a/booking-chart/templates/redis_service.yaml b/booking-chart/templates/redis_service.yaml new file mode 100644 index 0000000..ed1a70e --- /dev/null +++ b/booking-chart/templates/redis_service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }}-redis + labels: + app: {{ .Release.Name }}-redis + annotations: + kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml + kompose.version: 1.34.0 (cbf2835db) +spec: + ports: + - name: redis + port: {{ .Values.env.REDIS_PORT }} + targetPort: {{ .Values.env.REDIS_PORT }} + selector: + app: {{ .Release.Name }}-redis diff --git a/booking-chart/values.yaml b/booking-chart/values.yaml new file mode 100644 index 0000000..f7a44bf --- /dev/null +++ b/booking-chart/values.yaml @@ -0,0 +1,152 @@ +# Default values for booking-chart. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: dilyara4949/flight-book + tag: latest + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 8080 + +env: + ACCESS_TOKEN_EXPIRE: "877" + ADDRESS: "0.0.0.0" + ENVIRONMENT: "local" + HEADER_TIMEOUT: "5s" + JWT_TOKEN_SECRET: "my_secret_key" + REST_PORT: "8080" + POSTGRES_DB: "postgres" + POSTGRES_USER: "postgres" + db: "postgres" + POSTGRES_HOST: "postgres" + POSTGRES_MAX_CONNECTIONS: "20" + POSTGRES_PORT: "5432" + POSTGRES_TIMEOUT: "30" + POSTGRES_PASSWORD: "12345" + REDIS_PASSWORD: "12345" + REDIS_HOST: "localhost" + REDIS_PORT: "6379" + REDIS_TIMEOUT: "10" + REDIS_TTL: "5" + REDIS_DATABASE: "0" + REDIS_POOL_SIZE: "10" + + +migrate: + image: dilyara4949/flight-book + tag: latest + backoffLimit: 4 + +postgres: + replicaCount: 1 + image: + repository: postgres + tag: latest + +redis: + replicaCount: 1 + image: + repository: redis + tag: latest + persistentVolume: + storage: 100Mi + + +imagePullSecrets: [ ] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Automatically mount a ServiceAccount's API credentials? + automount: true + # Annotations to add to the service account + annotations: { } + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: { } +podLabels: { } + +podSecurityContext: { } +# fsGroup: 2000 + +securityContext: { } + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true +# runAsUser: 1000 + + + +ingress: + enabled: false + className: "" + annotations: { } + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [ ] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: { } + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m +# memory: 128Mi + +livenessProbe: + httpGet: + path: / + port: http +readinessProbe: + httpGet: + path: / + port: http + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +# Additional volumes on the output Deployment definition. +volumes: [ ] +# - name: foo +# secret: +# secretName: mysecret +# optional: false + +# Additional volumeMounts on the output Deployment definition. +volumeMounts: [ ] +# - name: foo +# mountPath: "/etc/foo" +# readOnly: true + +nodeSelector: { } + +tolerations: [ ] + +affinity: { } diff --git a/configmap_env.yaml b/configmap_env.yaml deleted file mode 100644 index 1e66eb1..0000000 --- a/configmap_env.yaml +++ /dev/null @@ -1,25 +0,0 @@ -apiVersion: v1 -data: - ACCESS_TOKEN_EXPIRE: "877" - ADDRESS: 0.0.0.0 - ENVIRONMENT: local - HEADER_TIMEOUT: 5s - JWT_TOKEN_SECRET: my_secret_key - POSTGRES_DB: postgres - POSTGRES_HOST: postgres - POSTGRES_MAX_CONNECTIONS: "20" - POSTGRES_PORT: "5432" - POSTGRES_TIMEOUT: "30" - POSTGRES_USER: postgres - REDIS_DATABASE: "0" - REDIS_HOST: redis - REDIS_POOL_SIZE: "10" - REDIS_PORT: "6379" - REDIS_TIMEOUT: "10" - REDIS_TTL: "5" - REST_PORT: "8080" -kind: ConfigMap -metadata: - labels: - io.kompose.service: app-local-env - name: local-env diff --git a/migrate_job.yaml b/migrate_job.yaml deleted file mode 100644 index f29ac11..0000000 --- a/migrate_job.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: migrate-job -spec: - template: - spec: - containers: - - name: migrate - image: dilyara4949/flight-book:latest - command: ["sh", "-c", "migrate -path ./internal/database/postgres/migration -database postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@postgres:5432/$(POSTGRES_DB)?sslmode=disable up"] - env: - - name: POSTGRES_USER - value: "postgres" - - name: POSTGRES_PASSWORD - value: "12345" - - name: POSTGRES_DB - value: "postgres" - restartPolicy: Never - backoffLimit: 4 diff --git a/postgres_pvc.yaml b/postgres_pvc.yaml deleted file mode 100644 index 27c2094..0000000 --- a/postgres_pvc.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - labels: - io.kompose.service: postgres-data - name: postgres-data -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 100Mi diff --git a/postgres_secret.yaml b/postgres_secret.yaml deleted file mode 100644 index 02f8063..0000000 --- a/postgres_secret.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: postgres-secret -type: Opaque -data: - REDIS_PASSWORD: MTIzNDU= diff --git a/redis_secret.yaml b/redis_secret.yaml deleted file mode 100644 index eaf89b0..0000000 --- a/redis_secret.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: redis-secret -type: Opaque -data: - REDIS_PASSWORD: MTIzNDU= diff --git a/redis_service.yaml b/redis_service.yaml deleted file mode 100644 index df888b0..0000000 --- a/redis_service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml -o kubermanifests.yaml - kompose.version: 1.34.0 (cbf2835db) - labels: - io.kompose.service: redis - name: redis -spec: - ports: - - name: "6379" - port: 6379 - targetPort: 6379 - selector: - io.kompose.service: redis From ab5dc0948c8bcae62bdddf711539a2661091ee3f Mon Sep 17 00:00:00 2001 From: dilyara4949 Date: Wed, 21 Aug 2024 15:54:24 +0500 Subject: [PATCH 11/11] fix: readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7191bfc..5046228 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ source set_env.sh [Install minikube if you dont have it yet](https://minikube.sigs.k8s.io/docs/start/) -The you just need too, apply kubernetes configuration to run the project: +Then you just need too, apply kubernetes configuration to run the project: ``` helm install booking-app ./booking-chart