Розглянемо налаштування розгортання чотирьох кластерів: staging
, production
, dev
, qa
, із метою оптимізації управління через Flux та Kustomize.
Мета – забезпечити ефективне управління без непотрібного повторення налаштувань між кластерами, використовуючи ці інструменти для автоматизації та синхронізації конфігурацій.
Ми налаштуємо Flux для автоматичного керування демонстраційним додатком, використовуючи HelmRepository та HelmRelease. Це забезпечить встановлення, тестування та оновлення додатка. Flux слідкуватиме за репозиторієм Helm, автоматично оновлюючи випуски Helm до новіших версій, відповідно до заданих діапазонів семантичного версіювання (semver).
На кожному з кластерів буде встановлено відповідний артефакт застосунку, відкритий інтерфейс для Flux, для візуалізації та моніторингу робочих навантажень, керованих Flux. Цей приклад демонструє застосування принципів GitOps в керуванні бажаним станом кластерів та застосунків в них.
Перед початком роботи, переконайтеся, що у вас є:
- Кластер Kubernetes версії 1.21 або новішої. Для локального тестування можна використовувати k3d.
- Обліковий запис GitHub і персональний токен доступу із відповідними дозволами.
-
Встановлення Flux CLI
-
MacOS або Linux через Homebrew:
brew install fluxcd/tap/flux
-
Завантаження скомпільованих бінарників через Bash-скрипт:
curl -s https://fluxcd.io/install.sh | sudo bash
-
-
Встановлення k3d:
-
Встановлення останньої версії k3d:
curl -sfL https://get.k3s.io | sh -
-
Перевірка встановлення:
k3d --version
-
Структура репозиторію виглядає наступним чином:
./clusters/
├── production/
│ ├── apps.yaml
│ └── infrastructure.yaml
├── staging/
│ ├── apps.yaml
│ └── infrastructure.yaml
├── dev/
│ ├── apps.yaml
│ └── infrastructure.yaml
└── qa/
├── apps.yaml
└── infrastructure.yaml
Кожен кластер має свої конфігурації Flux Kustomization
. Наприклад, у clusters/staging/
ми маємо таку конфігурацію:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: apps
namespace: flux-system
spec:
interval: 10m0s
dependsOn:
- name: infra-configs
sourceRef:
kind: GitRepository
name: flux-system
path: ./apps/staging
prune: true
wait: true
Виконайте наступні кроки для кожного кластера (staging
, production
, dev
, qa
):
-
Створення кластера через k3d:
Виконайте наступну команду для створення кластера:
k3d cluster create <назва кластера>
-
Встановлення контексту kubectl:
Експортуйте вміст файлу
kubeconfig
у змінну середовищаKUBECONFIG
:export KUBECONFIG=$(k3d kubeconfig write <назва кластера>)
-
Ініціалізація Flux:
-
Форкніть репозиторій до вашого облікового запису GitHub.
-
Експортуйте токен доступу до GitHub, ім'я користувача та ім'я репозиторію:
export GITHUB_TOKEN=<ваш токен> export GITHUB_USER=<ваше імʼя користувача> export GITHUB_REPO=<назва репозиторію>
-
Перевірте необхідні умови:
flux check --pre
-
Ініціалізуйте Flux:
flux bootstrap github \ --context=k3d-<назва кластера> \ --owner=${GITHUB_USER} \ --repository=${GITHUB_REPO} \ --branch=main \ --path=clusters/<назва кластера>
-
-
Перевірка роботи:
-
Використовуйте
port-forward
для доступу до додатків через локальний порт:kubectl -n ingress-nginx port-forward svc/ingress-nginx-controller 8080:80 &
-
Тестування через cURL:
curl -H "Host: podinfo.<назва кластера>" http://localhost:8080
-
-
Перевірка випусків Helm:
flux get helmreleases --all-namespaces
Повторіть ці кроки для кожного кластера, змінюючи відповідні параметри (<назва кластера>
, <назва репозиторію>
тощо). Це забезпечить автоматичне управління додатками та інфраструктурою через Flux, Kustomize та Helm, оптимізуючи процес управління конфігураціями.
З результатом можете ознайомитися тут – https://github.com/k3ilona/multicluster