Flux2: различия между версиями
Kaf (обсуждение | вклад) (committed sync manifests to "main"→Загрузка flux-манифестов в git-репозиторий и разворачиние flux-манифестов в kubernetes-кластере) |
Kaf (обсуждение | вклад) |
||
Строка 121: | Строка 121: | ||
cloning branch "main" from Git repository "ssh://gitea@gitea.basealt.ru/alt/fluxtest" | cloning branch "main" from Git repository "ssh://gitea@gitea.basealt.ru/alt/fluxtest" | ||
</pre> | </pre> | ||
* | * Созаеттся подкаталог <code>clusters/my-cluster</code> и в нем сгенерируются манифесты компонентов в файле <code>/clusters/my-cluster/flux-system/gotk-components.yaml</code>: | ||
<pre> | <pre> | ||
generating component manifests | generating component manifests | ||
Строка 162: | Строка 162: | ||
</pre> | </pre> | ||
* | * Произвоится got-commit созданного манифеста. | ||
<pre> | <pre> | ||
committed component manifests to "main" | committed component manifests to "main" | ||
</pre> | </pre> | ||
* | * В namespace <code>namespace</code> kubernetes запускаются перечисленные выше POD'ы. | ||
<pre> | <pre> | ||
installing components in "flux-system" namespace | installing components in "flux-system" namespace | ||
</pre> | </pre> | ||
* | * Генерируется <code>secret</code> и применяется к POD'ам flux: | ||
< | |||
</ | |||
<pre> | <pre> | ||
► generating source secret | |||
► applying source secret "flux-system/flux-system" | ► applying source secret "flux-system/flux-system" | ||
✔ reconciled source secret | ✔ reconciled source secret | ||
</pre> | </pre> | ||
* | * Создается манифест описания параметров синхронизации в файле <code>/clusters/my-cluster/flux-system/gotk-sync.yaml</code>. | ||
<pre> | <pre> | ||
generating sync manifests | generating sync manifests | ||
</pre> | </pre> | ||
Вид файла: | |||
<pre> | <pre> | ||
# This manifest was generated by flux. DO NOT EDIT. | |||
--- | |||
apiVersion: source.toolkit.fluxcd.io/v1 | |||
kind: GitRepository | |||
metadata: | |||
name: flux-system | |||
namespace: flux-system | |||
spec: | |||
interval: 1m0s | |||
ref: | |||
branch: main | |||
secretRef: | |||
name: flux-system | |||
url: ssh://gitea@gitea.basealt.ru/alt/fluxtest | |||
--- | |||
apiVersion: kustomize.toolkit.fluxcd.io/v1 | |||
kind: Kustomization | |||
metadata: | |||
name: flux-system | |||
namespace: flux-system | |||
spec: | |||
interval: 10m0s | |||
path: ./clusters/my-cluster | |||
prune: true | |||
sourceRef: | |||
kind: GitRepository | |||
name: flux-system | |||
</pre> | </pre> | ||
* | * Commit созаддного файла и размещение его в репозитории: | ||
<pre> | <pre> | ||
► committed sync manifests to "main" | |||
► pushing manifests to "ssh://gitea@gitea.basealt.ru/alt/fluxtest" | |||
</pre> | </pre> | ||
* | * Ожидп=ание синхронизации git-манифестов с kubernetes: | ||
<pre> | <pre> | ||
reconciled sync configuration | reconciled sync configuration | ||
waiting for Kustomization "flux-system/flux-system" to be reconciled | waiting for Kustomization "flux-system/flux-system" to be reconciled | ||
</pre> | </pre> | ||
* | * Ожидание запуска flux-POD'ов в кластере kubernetes: | ||
<pre> | <pre> | ||
► confirming components are healthy | ► confirming components are healthy | ||
Строка 211: | Строка 228: | ||
✔ source-controller: deployment ready | ✔ source-controller: deployment ready | ||
</pre> | </pre> | ||
В результате: | |||
* в git-репозитории https://gitea.basealt.ru/alt/fluxtest создастся дерево манифестов: | |||
<pre> | |||
. | |||
└── clusters | |||
└── my-cluster | |||
└── flux-system | |||
├── gotk-components.yaml | |||
├── gotk-sync.yaml | |||
└── kustomization.yaml | |||
</code> | |||
* В kubernetes-кластере в namespace flux-system создадутся сдедующие ресурся flux: | |||
<code> | |||
$ kubectl -n flux-system get all | |||
NAME READY STATUS RESTARTS AGE | |||
pod/helm-controller-59c864cdb7-bs9cz 1/1 Running 0 96m | |||
pod/kustomize-controller-55dcb6d8f9-pxwch 1/1 Running 0 96m | |||
pod/notification-controller-657dcf986f-jpbpx 1/1 Running 0 96m | |||
pod/source-controller-6b78cc859f-rffg4 1/1 Running 0 96m | |||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE | |||
service/notification-controller ClusterIP 10.99.183.176 <none> 80/TCP 96m | |||
service/source-controller ClusterIP 10.99.180.252 <none> 80/TCP 96m | |||
service/webhook-receiver ClusterIP 10.105.3.17 <none> 80/TCP 96m | |||
NAME READY UP-TO-DATE AVAILABLE AGE | |||
deployment.apps/helm-controller 1/1 1 1 96m | |||
deployment.apps/kustomize-controller 1/1 1 1 96m | |||
deployment.apps/notification-controller 1/1 1 1 96m | |||
deployment.apps/source-controller 1/1 1 1 96m | |||
NAME DESIRED CURRENT READY AGE | |||
replicaset.apps/helm-controller-59c864cdb7 1 1 1 96m | |||
replicaset.apps/kustomize-controller-55dcb6d8f9 1 1 1 96m | |||
replicaset.apps/notification-controller-657dcf986f 1 1 1 96m | |||
replicaset.apps/source-controller-6b78cc859f 1 1 1 96m | |||
</code> | |||
=== Разворачивание podinfo deployment === | === Разворачивание podinfo deployment === |
Версия от 10:59, 31 июля 2024
Установка и настройка 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-ключей.
Создание git-репозитория
В данном примере создадим git-репозиторий alt/fluxtest в git-репозитории gitea.basealt.ru
Загрузка 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
и в нем сгенерируются манифесты компонентов в файле/clusters/my-cluster/flux-system/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 ...
- Произвоится got-commit созданного манифеста.
committed component manifests to "main"
- В namespace
namespace
kubernetes запускаются перечисленные выше POD'ы.
installing components in "flux-system" namespace
- Генерируется
secret
и применяется к POD'ам flux:
► generating source secret ► applying source secret "flux-system/flux-system" ✔ reconciled source secret
- Создается манифест описания параметров синхронизации в файле
/clusters/my-cluster/flux-system/gotk-sync.yaml
.
generating sync manifests
Вид файла:
# This manifest was generated by flux. DO NOT EDIT. --- apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: flux-system namespace: flux-system spec: interval: 1m0s ref: branch: main secretRef: name: flux-system url: ssh://gitea@gitea.basealt.ru/alt/fluxtest --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: flux-system namespace: flux-system spec: interval: 10m0s path: ./clusters/my-cluster prune: true sourceRef: kind: GitRepository name: flux-system
- Commit созаддного файла и размещение его в репозитории:
► committed sync manifests to "main" ► pushing manifests to "ssh://gitea@gitea.basealt.ru/alt/fluxtest"
- Ожидп=ание синхронизации git-манифестов с kubernetes:
reconciled sync configuration waiting for Kustomization "flux-system/flux-system" to be reconciled
- Ожидание запуска flux-POD'ов в кластере kubernetes:
► confirming components are healthy ✔ helm-controller: deployment ready ✔ kustomize-controller: deployment ready ✔ notification-controller: deployment ready ✔ source-controller: deployment ready
В результате:
- в git-репозитории https://gitea.basealt.ru/alt/fluxtest создастся дерево манифестов:
. └── clusters └── my-cluster └── flux-system ├── gotk-components.yaml ├── gotk-sync.yaml └── kustomization.yaml * В kubernetes-кластере в namespace flux-system создадутся сдедующие ресурся flux:$ kubectl -n flux-system get all NAME READY STATUS RESTARTS AGE pod/helm-controller-59c864cdb7-bs9cz 1/1 Running 0 96m pod/kustomize-controller-55dcb6d8f9-pxwch 1/1 Running 0 96m pod/notification-controller-657dcf986f-jpbpx 1/1 Running 0 96m pod/source-controller-6b78cc859f-rffg4 1/1 Running 0 96m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/notification-controller ClusterIP 10.99.183.176 <none> 80/TCP 96m service/source-controller ClusterIP 10.99.180.252 <none> 80/TCP 96m service/webhook-receiver ClusterIP 10.105.3.17 <none> 80/TCP 96m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/helm-controller 1/1 1 1 96m deployment.apps/kustomize-controller 1/1 1 1 96m deployment.apps/notification-controller 1/1 1 1 96m deployment.apps/source-controller 1/1 1 1 96m NAME DESIRED CURRENT READY AGE replicaset.apps/helm-controller-59c864cdb7 1 1 1 96m replicaset.apps/kustomize-controller-55dcb6d8f9 1 1 1 96m replicaset.apps/notification-controller-657dcf986f 1 1 1 96m replicaset.apps/source-controller-6b78cc859f 1 1 1 96m
Разворачивание podinfo deployment
Рассмотрим разворачивание решения podinfo, используемый в CNCF-проектах для доступа к информации POD'ов и тестирования. В общем случае любой git-репозиторий поддерживаемый flux должен содержать каталог с файломkustomization.yaml
, который и обеспечивает генерацию манифестов для конкретного deployments.Разворачивание nginx deployment