mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-26 07:42:36 +03:00
fix typo for homeworks 13 directory
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
86
src/homework/13-kubernetes-config/13.1/readme.md
Normal file
86
src/homework/13-kubernetes-config/13.1/readme.md
Normal 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
|
||||
```
|
||||
Reference in New Issue
Block a user