Как упоминалось ранее, для управления кластером используется методология IaC посредством Flux и GitLab. Это накладывает некоторые правила, которые нужно соблюдать при работе с кластером. Далее приведена инструкция по по развертыванию приложения в Kubernetes.
Прежде чем развертывать приложение в Kubernetes, необходимо убедиться что приложение соответствует определенным требованиям, а именно:
После того как вы подготовили контейнеры, необходимо создать набора манифестов, позволяющих развернуть ваше приложение в Kubernetes. Есть два основных способа это сделать: написать готовые манифесты, которые могут быть изменены с помощью Kustomize[1] или создать helm-чарт. Первый способ рекомендуется в случае если приложение может быть развернуто с минимальным количеством изменений, второй напротив рекомендуется при наличии большого количества изменяемых параметров
README.md
latest
и подобных тегов не допускаетсяПосле того как манифесты готово, можно развернуть приложение с помощью Flux. В зависимости от того, используется ли Kustomize или Helm, процедуры будут немного отличаться, однако кратко процедура выглядит следующим образом: нужно создать манифест Flux, обозначающий применение Kustomize или Helm-чарта, создать ветку или форк в репозитории с манифестами flux, создать папку с необходимыми манифестами (см. ниже) в директории prod/
, отправить Merge Request и дождаться пока его примут и развернут ваше приложение.
Для того чтобы развернуть приложение с Kustomize необходимо создать следующие файлы:
kustomization.yml
- стандартный файл Kustomize (см. тут)kustomization.yml
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: ingress-nginx
namespace: flux-apps
spec:
interval: 10m
sourceRef:
kind: GitRepository
name: flux-apps
namespace: flux-apps
path: prod/<app-name> # укажите здесь путь до вашего сервиса в репозитории
prune: true
В виде диаграммы это можно представить следующим образом:
Flux читает манифест типа Kustomization, берет kustomize-файл из репозитория, а также все необходимые манифесты и патчи, и применяет их.
Для развертывания манифестов из чарта необходимо создать манифест Flux HelmRelease:
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: my-app
namespace: flux-apps
spec:
chart:
spec:
chart: traefik # имя чарта в репозитории
sourceRef:
kind: HelmRepository
name: helm-charts
targetNamespace: my-app
interval: 10m0s
values:
# разместите значение переменных чарта здесь