ArgoCD показывает Synced, но новая версия не выкатывается
CI на каждый merge в main собирает образ и пушит его как registry.internal/api:latest. В репозитории манифестов, за которым следит ArgoCD с включённой автосинхронизацией, зафиксировано:
spec:
containers:
- name: api
image: registry.internal/api:latest
imagePullPolicy: IfNotPresent
Разработчики жалуются: изменения не приезжают в стенд. ArgoCD показывает статус Synced и Healthy, поды работают уже неделю без рестартов, в реестре при этом лежит свежий образ.
Почему GitOps-процесс не выкатывает новую версию?
- Достаточно включить самовосстановление: без него ArgoCD не сверяет образ в реестре с запущенным и не замечает, что в registry появилась новая сборка
- Манифест в Git не изменился, поэтому расхождения нет и перевыкатки не происходит: в манифест из пайплайна нужно проставлять уникальный тег или digest образа
- Проблема только в политике загрузки образа: со значением `Always` kubelet будет ходить в реестр и подтянет свежую версию образа без всяких изменений в манифесте
- Нужно включить удаление лишних ресурсов при синхронизации: без него старые поды не заменяются новыми, и ArgoCD оставляет предыдущую версию работать
