Kubernetes, серия 2 из 3
Ночью кто-то сделал
kubectl edit, чтобы потушить пожар. Утром в Git одно, в кластере другое: следующий деплой молча перетрёт правку, или она проживёт полгода, и никто не вспомнит, откуда она взялась. Это называется дрифт.В GitOps источник правды — Git. Argo CD сравнивает его с кластером и приводит кластер к Git.
🟢 Helm-чарт описывает приложение, values для прода лежат в репозитории.
🟢 Application говорит Argo CD, что и куда разворачивать:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: shop
namespace: argocd
spec:
project: default
source:
repoURL: https://git.example.com/team/shop.git
targetRevision: main
path: charts/shop
destination:
server: https://kubernetes.default.svc
namespace: shop
syncPolicy:
automated:
selfHeal: true
prune: true
🟢 selfHeal возвращает ресурс к состоянию из Git, если его поменяли руками. prune удаляет из кластера то, что убрали из Git.
Проверить можно за минуту:
kubectl -n shop scale deploy shop --replicas=5
argocd app get shop # OutOfSync, через несколько секунд снова Synced
kubectl -n shop get deploy shop # реплик снова столько, сколько в Git
Новый коммит Argo CD по умолчанию подтягивает из Git в течение трёх минут, а ручную правку selfHeal откатывает почти сразу.
Оговорка: во время инцидента selfHeal откатит и ваш хотфикс. Хотфикс делайте коммитом в Git или на время отключайте автосинк у приложения.
Application, политики синхронизации, App of Apps, ApplicationSets и секреты в GitOps разбираем в курсе Argo CD, чарты — в курсе Helm. Первые задания обоих курсов открыты бесплатно.
В следующей серии: production-контур целиком, от
git push до алерта.