Flux2

Материал из ALT Linux Wiki

Установка и настройка flux2

Flux2 — это инструмент для синхронизации кластеров Kubernetes с источниками конфигурации (такими как репозитории Git и артефакты OCI), а также для автоматизации обновлений конфигурации при необходимости развертывания нового кода.

Flux2 для бранча sisyphus включает в себя следующие компоненты (с версиями на 30.07.2024):

  • команда flux пакета flux2 (версия 2.3.0);
  • образ registry.altlinux.org/sisyphus/flux2/source-controller:v1.3.0;
  • образ registry.altlinux.org/sisyphus/flux2/notification-controller:v1.3.0;
  • образ registry.altlinux.org/sisyphus/flux2/kustomize-controller:v1.3.0;
  • образ registry.altlinux.org/sisyphus/flux2/helm-controller:v1.0.1;
  • образ registry.altlinux.org/sisyphus/flux2/image-automation-controller:v0.38.0;
  • образ registry.altlinux.org/sisyphus/flux2/image-reflector-controller:v0.32.0.

(Выделенные жирным шрифтом являются обязательными).

Разворачивание flux с хранением манифестов в git-репозиториях

В данном разделе описан способ универсальный способ хранения манифестов в любом git-репозитории, поддерживающий доступ по SSH Private Key. В этом случае необходимо наличие (возможно пустого) репозитория. Для git-репозиториев различных типов существуют специализированные способы работы с git-репозиториями (см. Flux bootstrap). В этих случаях flux сам создает необходимый указанный git-репозиторий.

Команда

flux bootstrap git ... 

развертывает Flux-контроллеры в кластере Kubernetes и настраивает контроллеры для синхронизации состояния кластера из git-репозитория . Помимо установки контроллеров, команда flux bootstrap отправляет flux-манифесты в git-репозиторий и настраивает flux для обновления из git-репозитория.

После запуска команды

flux bootstrap git ... 

в дальнейшем любую операцию в кластере (включая обновления flux) можно выполнить с помощью

git push

без необходимости подключения к кластеру Kubernetes.

Создание (если еще не создан) ssh-ключа

Если ssh-ключ типа ed25519 еще не сформирован вызовите клманду:

ssh-keygen -t ed25519

Скопируйте открытый ключ из файла ~/.ssh/id_ed25519.pub и добавьте его на странице добавления SSH-ключей. Добавление открытого ключа в gitea-репозиторий

Создание git-репозитория

В данном примере создадим git-репозиторий alt/fluxtest в git-репозитории gitea.basealt.ru GitrepoCreate.png

Загрузка flux-манифестов в git-репозиторий и разворачиние flux-манифестов в kubernetes-кластере

Для загрузки flux-манифестов в git-репозиторий и разворачиние flux-манифестов в kubernetes-кластере создайте скрипт bootstrapRepo.sh:

flux bootstrap git \
  --url=ssh://gitea@gitea.basealt.ru/alt/alt_fluxtest \
  --branch=main \
  --private-key-file=$HOME/.ssh/id_ed25519 \
  --password=<password> \
  --path=clusters/my-cluster

и запустите его:

flux bootstrap git \
  --url=ssh://gitea@gitea.basealt.ru/alt/fluxtest \
  --branch=main \
  --private-key-file=$HOME/.ssh/id_ed25519 \
  --password=<passwd> \
  --path=clusters/my-cluster

Параметр

--path=clusters/my-cluster

указывает подкаталог в репозитории куда будет помещаться все манифесты, изменения которых будет мониторить flux. Ответьте 'y' на вопрос о доступе к открытому ключу Вашего репозитория:

► cloning branch "main" from Git repository "ssh://gitea@gitea.basealt.ru/alt/fluxtest"
✔ cloned repository
► generating component manifests
✔ generated component manifests
✔ committed component manifests to "main" ("a5b764515ef2dc06931e215ba56a3ec10487af96")
► pushing component manifests to "ssh://gitea@gitea.basealt.ru/alt/fluxtest"
► installing components in "flux-system" namespace
✔ installed components
✔ reconciled components
► determining if source secret "flux-system/flux-system" exists
► generating source secret
✔ public key: ssh-ed25519 AAAAC3NzaC1l...
Please give the key access to your repository: y
► applying source secret "flux-system/flux-system"
✔ reconciled source secret
► generating sync manifests
✔ generated sync manifests
✔ committed sync manifests to "main" ("42da02d6087f1ec3f16c2664a22781907514aaab")
► pushing sync manifests to "ssh://gitea@gitea.basealt.ru/alt/fluxtest"
► applying sync manifests
✔ reconciled sync configuration
◎ waiting for GitRepository "flux-system/flux-system" to be reconciled
✔ GitRepository reconciled successfully
◎ waiting for Kustomization "flux-system/flux-system" to be reconciled
✔ Kustomization reconciled successfully
► confirming components are healthy
✔ helm-controller: deployment ready
✔ kustomize-controller: deployment ready
✔ notification-controller: deployment ready
✔ source-controller: deployment ready
✔ all components are healthy

Выполняться следующие шаги:

  • Клонируется локально git-реозиторий gitea:
cloning branch "main" from Git repository "ssh://gitea@gitea.basealt.ru/alt/fluxtest"
  • Созадстся подкаталог clusters/my-cluster и в нем сгенерируются манифесты компонентов в файле gotk-components.yaml:
generating component manifests

В этом манифесте разворачиваются все необходимые для flux контейнеры:

...
---
kind: Deployment
...
spec:
  template:
    spec:
        image: registry.altlinux.org/flux2/source-controller:v1.3.0
...
---
kind: Deployment
...
spec:
  template:
    spec:
        image: registry.altlinux.org/flux2/kustomize-controller:v1.3.0
...
---
kind: Deployment
...
spec:
  template:
    spec:
        image: registry.altlinux.org/flux2/helm-controller:v1.0.1
...
---
kind: Deployment
...
spec:
  template:
    spec:
        image: registry.altlinux.org/flux2/notification-controller:v1.3.0
...
committed component manifests to "main"
installing components in "flux-system" namespace
reconciled components
generating source secret
► applying source secret "flux-system/flux-system"
✔ reconciled source secret
generating sync manifests
committed sync manifests to "main"
 pushing manifests to "ssh://gitea@gitea.basealt.ru/alt/fluxtest"
reconciled sync configuration
waiting for Kustomization "flux-system/flux-system" to be reconciled
► confirming components are healthy
✔ helm-controller: deployment ready
✔ kustomize-controller: deployment ready
✔ notification-controller: deployment ready
✔ source-controller: deployment ready

Разворачивание podinfo deployment

Рассмотрим разворачивание решения podinfo, используемый в CNCF-проектах для доступа к информации POD'ов и тестирования.

В общем случае любой git-репозиторий поддерживаемый flux должен содержать каталог с файлом kustomization.yaml, который и обеспечивает генерацию манифестов для конкретного deployments.

Разворачивание nginx deployment