GitOps-контроллер Argo CD откатывает ручной хотфикс — диагностируйте
Прод деградировал. Инженер выполнил kubectl edit deploy/api, подняв replicas с 2 до 6 как экстренный фикс. Через минуты Argo CD показывает приложение OutOfSync, а число реплик снова 2. Он правит опять — откатывается опять. Включён auto-sync с self-heal, а в Git по-прежнему объявлено replicas: 2.
$ argocd app get api
Name: api
Sync Status: OutOfSync
Health: Progressing
GROUP KIND NAME STATUS MESSAGE
Deployment api OutOfSync replicas: live 6, desired 2
Sync Policy: Automated (selfHeal: true, prune: true)
14:02:11 замечена живая правка → 14:02:12 авто-синк обратно к desired
Объясните, что происходит, и дайте правильный фикс.
Это Argo CD работает как задумано, а не баг. В Git стоит replicas: 2, поэтому ручной kubectl edit — это дрейф, и self-heal откатывает его к состоянию из Git; правка кластера не закрепится под auto-sync. Чините в Git: закоммитьте replicas: 6 и дайте Argo CD синхронизироваться.
- ✗Считать откат дрейфа через self-heal багом Argo CD
- ✗Чинить желаемое состояние правкой кластера, а не Git
- ✗Отключать self-heal как фикс вместо коммита изменения в Git
- →Когда временно отключить self-heal оправдано и в чём риск этого?
- →Как сделать экстренный скейл-ап устойчивым через сам GitOps-процесс?
Решение
Что происходит
Ничего не сломано — это GitOps работает правильно. Argo CD непрерывно сверяет живой кластер с желаемым состоянием из Git. В Git объявлено replicas: 2, поэтому kubectl edit на 6 реплик для контроллера — это дрейф. С selfHeal: true он откатывает дрейф на каждой сверке (в логе видно: правка в 14:02:11 → авто-синк в 14:02:12). Правка кластера в принципе не закрепится, пока Git говорит иное.
Правильный фикс — менять Git, а не кластер
# deploy/api.yaml — в Git
spec:
replicas: 6 # было 2; коммитим, ревьюим PR, мержим
После мержа Argo CD увидит новое желаемое состояние и сам приведёт кластер к 6 репликам — фикс закрепится и останется в аудите Git. Если реально нужно «прямо сейчас» до мержа, временно снимите selfHeal (осознавая, что тогда дрейф не лечится), но правильный путь — быстрый PR.