Что такое Flux?
Flux — это GitOps оператор для Kubernetes, который автоматически синхронизирует состояние кластера с конфигурациями, хранящимися в Git репозиториях. Это инструмент непрерывной доставки, следующий принципам GitOps.
Основные компоненты Flux v2
- Source Controller — управление Git репозиториями и Helm чартами
- Kustomize Controller — применение Kustomize конфигураций
- Helm Controller — управление Helm releases
- Notification Controller — отправка уведомлений
- Image Reflector/Automation — автоматическое обновление образов
Установка Flux
1# Установка Flux CLI
2curl -s https://fluxcd.io/install.sh | sudo bash
3
4# Проверка совместимости кластера
5flux check --pre
6
7# Bootstrap Flux в кластер
8export GITHUB_TOKEN=your-token
9flux bootstrap github \
10 --owner=your-username \
11 --repository=fleet-infra \
12 --branch=main \
13 --path=./clusters/my-cluster \
14 --personal
15
16# Проверка установки
17flux check
Создание GitRepository
Kustomization для развертывания
1# kustomization.yaml
2apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
3kind: Kustomization
4metadata:
5 name: myapp
6 namespace: flux-system
7spec:
8 interval: 5m
9 path: "./deploy"
10 prune: true
11 sourceRef:
12 kind: GitRepository
13 name: myapp-source
14 healthChecks:
15 - apiVersion: apps/v1
16 kind: Deployment
17 name: myapp
18 namespace: default
19 dependsOn:
20 - name: common-config
Helm Release управление
1# helmrepository.yaml
2apiVersion: source.toolkit.fluxcd.io/v1beta2
3kind: HelmRepository
4metadata:
5 name: bitnami
6 namespace: flux-system
7spec:
8 interval: 24h
9 url: https://charts.bitnami.com/bitnami
10
11---
12# helmrelease.yaml
13apiVersion: helm.toolkit.fluxcd.io/v2beta1
14kind: HelmRelease
15metadata:
16 name: postgresql
17 namespace: default
18spec:
19 interval: 5m
20 chart:
21 spec:
22 chart: postgresql
23 version: "12.x.x"
24 sourceRef:
25 kind: HelmRepository
26 name: bitnami
27 namespace: flux-system
28 values:
29 auth:
30 postgresPassword: "supersecret"
31 primary:
32 persistence:
33 enabled: true
34 size: 8Gi
Автоматическое обновление образов
1# imagerepository.yaml
2apiVersion: image.toolkit.fluxcd.io/v1beta2
3kind: ImageRepository
4metadata:
5 name: myapp
6 namespace: flux-system
7spec:
8 image: myregistry/myapp
9 interval: 1m
10
11---
12# imagepolicy.yaml
13apiVersion: image.toolkit.fluxcd.io/v1beta2
14kind: ImagePolicy
15metadata:
16 name: myapp
17 namespace: flux-system
18spec:
19 imageRepositoryRef:
20 name: myapp
21 policy:
22 semver:
23 range: ">=1.0.0"
24
25---
26# imageupdateautomation.yaml
27apiVersion: image.toolkit.fluxcd.io/v1beta1
28kind: ImageUpdateAutomation
29metadata:
30 name: myapp
31 namespace: flux-system
32spec:
33 interval: 30m
34 sourceRef:
35 kind: GitRepository
36 name: myapp-source
37 git:
38 checkout:
39 ref:
40 branch: main
41 commit:
42 author:
43 email: fluxcdbot@users.noreply.github.com
44 name: fluxcdbot
45 messageTemplate: |
46 Automated image update
47
48 Automation name: {{ .AutomationObject }}
49
50 Files:
51 {{ range $filename, $_ := .Updated.Files -}}
52 - {{ $filename }}
53 {{ end -}}
54
55 Objects:
56 {{ range $resource, $_ := .Updated.Objects -}}
57 - {{ $resource.Kind }} {{ $resource.Name }}
58 {{ end -}}
59 push:
60 branch: main
61 update:
62 path: "./deploy"
63 strategy: Setters
Мониторинг и уведомления
1# provider.yaml
2apiVersion: notification.toolkit.fluxcd.io/v1beta2
3kind: Provider
4metadata:
5 name: slack
6 namespace: flux-system
7spec:
8 type: slack
9 channel: general
10 secretRef:
11 name: slack-webhook
12
13---
14# alert.yaml
15apiVersion: notification.toolkit.fluxcd.io/v1beta2
16kind: Alert
17metadata:
18 name: myapp
19 namespace: flux-system
20spec:
21 providerRef:
22 name: slack
23 eventSeverity: info
24 eventSources:
25 - kind: GitRepository
26 name: '*'
27 - kind: Kustomization
28 name: '*'
29 summary: "Cluster {{.InvolvedObject.name}} sync status"
Multi-tenancy с Flux
Когда использовать Flux
- Нужен GitOps подход к развертыванию
- Работаешь с Kubernetes и Helm
- Важна автоматизация обновлений образов
- Требуется multi-tenancy поддержка
- Команда предпочитает декларативный подход
- Нужна интеграция с мониторингом и алертами
Преимущества Flux
- GitOps native — изначально разработан для GitOps
- Kubernetes native — полная интеграция с K8s
- Modular architecture — модульная архитектура
- Multi-tenancy — поддержка множественных команд
- Progressive delivery — поддержка canary deployments
- CNCF project — проект Cloud Native Computing Foundation
Альтернативы Flux
- ArgoCD — другой популярный GitOps инструмент
- Jenkins X — GitOps для Jenkins
- Rancher Fleet — GitOps от Rancher
- Weaveworks Weave GitOps — коммерческая версия
Best Practices
- Разделяй application code и deployment configurations
- Используй отдельные репозитории для разных окружений
- Настрой proper RBAC для multi-tenancy
- Мониторь состояние синхронизации
- Используй health checks для критичных ресурсов
- Настрой уведомления для команды
FAQ
Подходит ли Flux для продакшена?
Да, Flux v2 широко используется в production средах и является зрелым проектом CNCF с активной поддержкой сообщества.
Какие требования к инфраструктуре?
Flux требует Kubernetes кластер версии 1.20+. Минимальные ресурсы: ~100MB RAM для всех контроллеров.
В чем разница между Flux и ArgoCD?
Flux более модульный и CLI-ориентированный, ArgoCD имеет богатый веб-интерфейс. Оба отлично подходят для GitOps, выбор зависит от предпочтений команды.