fix typo for homeworks 13 directory

This commit is contained in:
2022-12-23 09:46:05 +07:00
parent b5268a1370
commit 2e7a604149
67 changed files with 9 additions and 9 deletions

View File

@@ -0,0 +1,45 @@
---
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: "postgresql://db_user:db_passwd@postgres:5432/news"
ports:
- name: web
containerPort: 9000
terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
name: prod-backend
namespace: default
spec:
ports:
- name: web
port: 9000
selector:
app: prod-app
service: backend

View File

@@ -0,0 +1,105 @@
---
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: prod-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:
- name: postgresql
containerPort: 5432
protocol: TCP
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pv-claim
---
apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
type: ClusterIP
clusterIP: None
ports:
- name: postgresql
port: 5432
targetPort: postgresql
protocol: TCP
selector:
service: database
db-kind: postgresql

View File

@@ -0,0 +1,45 @@
---
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"
ports:
- name: web
containerPort: 80
terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
name: prod-frontend
namespace: default
spec:
ports:
- name: web
port: 80
selector:
app: prod-app
service: frontend

View File

@@ -0,0 +1,111 @@
---
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: testing-app
db-kind: postgresql
name: testing-db
namespace: default
spec:
selector:
matchLabels:
db-kind: postgresql
serviceName: postgres
replicas: 1
podManagementPolicy: "Parallel"
updateStrategy:
type: "RollingUpdate"
template:
metadata:
labels:
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
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: testing-app
name: testing-app
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: testing-app
template:
metadata:
labels:
app: testing-app
spec:
containers:
- image: dannecron/netology-devops-k8s-app:frontend-latest
imagePullPolicy: Always
name: netology-frontend
- image: dannecron/netology-devops-k8s-app:backend-latest
imagePullPolicy: Always
name: netology-backend
env:
- name: DATABASE_URL
value: "postgres://db_user:db_passwd@postgres:5432/news"
terminationGracePeriodSeconds: 30

View File

@@ -0,0 +1,86 @@
Выполнение [домашнего задания](https://github.com/netology-code/devkub-homeworks/blob/main/13-kubernetes-config-01-objects.md)
по теме "13.1. контейнеры, поды, deployment, statefulset, services, endpoints"
## Q/A
> Настроив кластер, подготовьте приложение к запуску в нём. Приложение стандартное: бекенд, фронтенд, база данных.
### Задание 1
> Подготовить тестовый конфиг для запуска приложения.
>
> Для начала следует подготовить запуск приложения в stage окружении с простыми настройками. Требования:
> * pod содержит в себе 2 контейнера — фронтенд, бекенд;
> * регулируется с помощью deployment фронтенд и бекенд;
> * база данных — через statefulset.
Директория с проектом приложения: [project](/src/homework/13-kubernetes-config/project).
В первую очередь необходимо собрать образы приложения и опубликовать их в `registry`,
который будет доступен из кластера. Например, [hub.docker.com](https://hub.docker.com/).
Для этой цели создан репозиторий [dannecron/netology-devops-k8s-app](https://hub.docker.com/repository/docker/dannecron/netology-devops-k8s-app)
и собраны два тега: `frontend-latest` и `backend-latest`.
Итоговая конфигурация для деплоя приложения в кластер k8s будет выглядеть следующим образом: [testing/deployment.yml](./config/testing/deployment.yml).
Здесь будет создано несколько сущностей, а именно:
* `ConfigMap` для хранения конфигурации `postgresql`
* `PersistentVolume` - персистентное дисковое хранилище для базы данных
* `PersistentVolumeClaim` - конфигурация для использования хранилища подами
* `StatefulSet` - разворачивание базы данных `postgresql`
* `Deployment` - разворачивание непосредственно приложения
Применение конфигурации:
```shell
kubectl apply -f testing/deployment.yml
```
После применения:
```shell
kubectl get pods
```
```text
kubectl get pods
NAME READY STATUS RESTARTS AGE
testing-app-57d756f489-r6gw8 2/2 Running 0 4m13s
testing-db-0 1/1 Running 5 (6m20s ago) 7m53s
```
### Задание 2
> Подготовить конфиг для production окружения.
>
> Следующим шагом будет запуск приложения в production окружении. Требования сложнее:
> * каждый компонент (база, бекенд, фронтенд) запускаются в своем поде, регулируются отдельными deploymentами;
> * для связи используются service (у каждого компонента свой);
> * в окружении фронта прописан адрес сервиса бекенда;
> * в окружении бекенда прописан адрес сервиса базы данных.
Разделение на отдельные деплойменты будет выглядеть следующим образом:
* БД ([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`.
Как и в прошлом задании нужно применить данные конфигурации:
```shell
kubectl apply -f production/database.yml
kubectl apply -f production/backend.yml
kubectl apply -f production/frontend.yml
```
Затем нужно проверить, что все поды успешно запустились:
```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
```