From 9cf0d09a3e994e463fb14af51b82985efcddf422 Mon Sep 17 00:00:00 2001 From: dannc Date: Mon, 5 Dec 2022 10:21:05 +0700 Subject: [PATCH] homework 13.1: complete task 2 --- src/homework/12-kubernetes/12.4/readme.md | 1 + .../13.1/config/production/backend.yml | 42 +++++++++ .../13.1/config/production/database.yml | 87 +++++++++++++++++++ .../13.1/config/production/frontend.yml | 42 +++++++++ .../13-kubernates-config/13.1/readme.md | 28 ++++-- 5 files changed, 195 insertions(+), 5 deletions(-) create mode 100644 src/homework/13-kubernates-config/13.1/config/production/backend.yml create mode 100644 src/homework/13-kubernates-config/13.1/config/production/database.yml create mode 100644 src/homework/13-kubernates-config/13.1/config/production/frontend.yml diff --git a/src/homework/12-kubernetes/12.4/readme.md b/src/homework/12-kubernetes/12.4/readme.md index 5a6b924..29e1751 100644 --- a/src/homework/12-kubernetes/12.4/readme.md +++ b/src/homework/12-kubernetes/12.4/readme.md @@ -83,6 +83,7 @@ ansible-playbook -u ubuntu -i inventory/mycluster/inventory.ini cluster.yml -b - ```shell ssh ubuntu@62.84.124.154 +mkdir ~/.kube sudo cp /etc/kubernetes/admin.conf ~/.kube/config sudo chown ubuntu:ubuntu ~/.kube/config ``` diff --git a/src/homework/13-kubernates-config/13.1/config/production/backend.yml b/src/homework/13-kubernates-config/13.1/config/production/backend.yml new file mode 100644 index 0000000..08132ff --- /dev/null +++ b/src/homework/13-kubernates-config/13.1/config/production/backend.yml @@ -0,0 +1,42 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: prod-app + service: backend + name: prod-app-backend + namespace: default +spec: + replicas: 1 + selector: + matchLabels: + app: prod-app + service: backend + template: + metadata: + labels: + app: prod-app + service: backend + spec: + containers: + - image: dannecron/netology-devops-k8s-app:backend-latest + imagePullPolicy: Always + name: netology-backend + env: + - name: DATABASE_URL + value: "postgres://pg_user:pg_passwd@postgres:5432/news" + terminationGracePeriodSeconds: 30 +--- +apiVersion: v1 +kind: Service +metadata: + name: prod-backend + namespace: default +spec: + ports: + - name: web + port: 9000 + selector: + app: prod-app + service: backend diff --git a/src/homework/13-kubernates-config/13.1/config/production/database.yml b/src/homework/13-kubernates-config/13.1/config/production/database.yml new file mode 100644 index 0000000..5acd561 --- /dev/null +++ b/src/homework/13-kubernates-config/13.1/config/production/database.yml @@ -0,0 +1,87 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgres-config + labels: + app: postgres +data: + POSTGRES_DB: news + POSTGRES_USER: db_user + POSTGRES_PASSWORD: db_passwd + PGDATA: /var/lib/postgresql/data +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: postgres-pv-volume # Sets PV's name + labels: + type: local # Sets PV's type to local + app: postgres +spec: + storageClassName: manual + capacity: + storage: 1Gi # Sets PV Volume + accessModes: + - ReadWriteMany + hostPath: + path: "/mnt/pgsql_data" +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: postgres-pv-claim # Sets name of PVC + labels: + app: postgres +spec: + storageClassName: manual + accessModes: + - ReadWriteMany # Sets read and write access + resources: + requests: + storage: 1Gi # Sets volume size +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + app: prod-app + service: database + db-kind: postgresql + name: testing-db + namespace: default +spec: + selector: + matchLabels: + app: prod-app + service: database + db-kind: postgresql + serviceName: postgres + replicas: 1 + podManagementPolicy: "Parallel" + updateStrategy: + type: "RollingUpdate" + template: + metadata: + labels: + app: prod-app + service: database + db-kind: postgresql + spec: + terminationGracePeriodSeconds: 60 + containers: + - name: postgres + image: postgres:13-alpine # Sets Image + imagePullPolicy: "IfNotPresent" + ports: + - containerPort: 5432 # Exposes container port + envFrom: + - configMapRef: + name: postgres-config + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: postgredb + volumes: + - name: postgredb + persistentVolumeClaim: + claimName: postgres-pv-claim diff --git a/src/homework/13-kubernates-config/13.1/config/production/frontend.yml b/src/homework/13-kubernates-config/13.1/config/production/frontend.yml new file mode 100644 index 0000000..17a3f56 --- /dev/null +++ b/src/homework/13-kubernates-config/13.1/config/production/frontend.yml @@ -0,0 +1,42 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: prod-app + service: frontend + name: prod-app-frontend + namespace: default +spec: + replicas: 1 + selector: + matchLabels: + app: prod-app + service: frontend + template: + metadata: + labels: + app: prod-app + service: frontend + spec: + containers: + - image: dannecron/netology-devops-k8s-app:frontend-latest + imagePullPolicy: Always + name: netology-frontend + env: + - name: BASE_URL + value: "http://prod-backend:9000" + terminationGracePeriodSeconds: 30 +--- +apiVersion: v1 +kind: Service +metadata: + name: prod-frontend + namespace: default +spec: + ports: + - name: web + port: 80 + selector: + app: prod-app + service: frontend diff --git a/src/homework/13-kubernates-config/13.1/readme.md b/src/homework/13-kubernates-config/13.1/readme.md index 9aedc98..505c2b8 100644 --- a/src/homework/13-kubernates-config/13.1/readme.md +++ b/src/homework/13-kubernates-config/13.1/readme.md @@ -58,11 +58,29 @@ testing-db-0 1/1 Running 5 (6m20s ago) 7m53s > * в окружении фронта прописан адрес сервиса бекенда; > * в окружении бекенда прописан адрес сервиса базы данных. -// todo +Разделение на отдельные деплойменты будет выглядеть следующим образом: +* БД ([production/database.yml](./config/production/database.yml)) остаётся почти без изменений: + всё так же будут создаваться `ConfigMap`, `PersistentVolume`, `PersistentVolumeClaim` и сам `StatefulSet` +* Для frontend ([production/frontend.yml](./config/production/frontend.yml)) и backend ([production/backend.yml](./config/production/backend.yml)) + созданы собственные `deployment` и `service`. -### Задание 3 +Как и в прошлом задании нужно применить данные конфигурации: -> Приложению потребовалось внешнее api, и для его использования лучше добавить endpoint в кластер, направленный на это api. Требования: -> * добавлен endpoint до внешнего api (например, геокодер). +```shell +kubectl apply -f production/database.yml +kubectl apply -f production/backend.yml +kubectl apply -f production/frontend.yml +``` -// todo +Затем нужно проверить, что все поды успешно запустились: + +```shell +kubectl get pods +``` + +```text +NAME READY STATUS RESTARTS AGE +prod-app-backend-784f995b5f-vvcr7 1/1 Running 0 84s +prod-app-frontend-947f64949-6vtn7 1/1 Running 0 30s +testing-db-0 1/1 Running 0 4m15s +```