Files
netology-devops/src/homework/13-kubernetes-config/13.4

Выполнение домашнего задания по теме "13.4. инструменты для упрощения написания конфигурационных файлов. Helm и Jsonnet"

Q/A

В работе часто приходится применять системы автоматической генерации конфигураций. Для изучения нюансов использования разных инструментов нужно попробовать упаковать приложение каждым из них.

Задание 1

Подготовить helm чарт для приложения.

Необходимо упаковать приложение в чарт для деплоя в разные окружения. Требования:

  • каждый компонент приложения деплоится отдельным deploymentом/statefulsetом;
  • в переменных чарта измените образ приложения для изменения версии.

Helm-чарт находится в директории project. Каждый компонент приложения выделен в отдельный шаблон.

Различные переменные вынесены в файл values.yaml.

Задание 2

Запустить 2 версии в разных неймспейсах.

Подготовив чарт, необходимо его проверить. Попробуйте запустить несколько копий приложения:

  • одну версию в namespace=app1;
  • вторую версию в том же неймспейсе;
  • третью версию в namespace=app2.

Перед выполнением команд helm, необходимо создать новый неймспейс app1 в кластере. Для этого нужно выполнить следующую команду:

kubectl create namespace app1

И убедиться, что новый неймспейс есть в списке:

kubectl get ns
NAME              STATUS   AGE
app1              Active   66s
default           Active   35m
kube-node-lease   Active   35m
kube-public       Active   35m
kube-system       Active   35m

Для деплоя chart необходимо выполнить команду:

helm install --namespace=app1 netology-project project
NAME: netology-project
LAST DEPLOYED: Tue Dec 20 10:46:14 2022
NAMESPACE: app1
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
---------------------------------------------------------

Content of NOTES.txt appears after deploy.
Deployed version 1.0.0.

---------------------------------------------------------

Следующим шагом нужно проверить, что chart появился в списке:

helm list --namespace=app1
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS CHART            APP VERSION
netology-project        app1            1               2022-12-20 10:46:14.3054387 +0700 +07   deployeproject-1.0.0    1.0.0

И что все поды запустились:

kubectl get po --namespace app1
NAME                                           READY   STATUS    RESTARTS   AGE
project-production-backend-768887dd4b-8zb7h    1/1     Running   0          102s
project-production-database-0                  1/1     Running   0          102s
project-production-frontend-74d8bb648d-9tc6g   1/1     Running   0          102s

Предполагается, что в том же неймспейсе необходимо развернуть данное приложение, но с другим environment и с количеством реплик backend равным 2. Для этого нужно выполнить следующую команду:

helm install --namespace=app1 --set "environment=testing" --set "backend.replicasCount=2" netology-project-test project
NAME: netology-project-test
LAST DEPLOYED: Tue Dec 20 10:48:34 2022
NAMESPACE: app1
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
---------------------------------------------------------

Content of NOTES.txt appears after deploy.
Deployed version 1.0.0.

---------------------------------------------------------

Следующим шагом проверим состояние подов:

kubectl get po --namespace app1
NAME                                           READY   STATUS    RESTARTS   AGE
project-production-backend-768887dd4b-8zb7h    1/1     Running   0          2m38s
project-production-database-0                  1/1     Running   0          2m38s
project-production-frontend-74d8bb648d-9tc6g   1/1     Running   0          2m38s
project-testing-backend-688cb58bdc-5fqfd       1/1     Running   0          19s
project-testing-backend-688cb58bdc-hz9jp       1/1     Running   0          19s
project-testing-database-0                     1/1     Running   0          18s
project-testing-frontend-7648dfbcb6-t7mv9      1/1     Running   0          19s

Затем необходимо сделать деплой в новый неймспейс. Для этого необходимо выполнить команду:

helm install --namespace=app2 --create-namespace netology-project-app2 project
NAME: netology-project
LAST DEPLOYED: Tue Dec 20 10:53:35 2022
NAMESPACE: app2
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
---------------------------------------------------------

Content of NOTES.txt appears after deploy.
Deployed version 1.0.0.

---------------------------------------------------------

Далее нужно проверить, что деплой прошёл и поды запустились:

helm --namespace=app2 list
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS CHART            APP VERSION
netology-project        app2            1               2022-12-20 10:53:35.7784271 +0700 +07   deployeproject-1.0.0    1.0.0
kubectl get po --namespace=app2
NAME                                           READY   STATUS    RESTARTS   AGE
project-production-backend-768887dd4b-m8sb7    1/1     Running   0          101s
project-production-database-0                  1/1     Running   0          101s
project-production-frontend-74d8bb648d-wrm49   1/1     Running   0          101s

Note: Была проблема с созданием PV. По всей видимости вольюм создаётся глобально, вне неймспейсов. Таким образом, пришлось сделать название объекта PV зависимым от неймспейса, в котором запускается деплой helm.