mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 23:32:37 +03:00
homework 13.1: complete task 2
This commit is contained in:
@@ -83,6 +83,7 @@ ansible-playbook -u ubuntu -i inventory/mycluster/inventory.ini cluster.yml -b -
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
ssh ubuntu@62.84.124.154
|
ssh ubuntu@62.84.124.154
|
||||||
|
mkdir ~/.kube
|
||||||
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
|
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
|
||||||
sudo chown ubuntu:ubuntu ~/.kube/config
|
sudo chown ubuntu:ubuntu ~/.kube/config
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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. Требования:
|
```shell
|
||||||
> * добавлен endpoint до внешнего api (например, геокодер).
|
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
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user