Если Kubernetes разрешил изменение управляемого ресурса, оно попадёт в кластер. Argo CD при сравнении обычно обнаружит расхождение и покажет OutOfSync. Автоматическое восстановление зависит от auto-sync, selfHeal и других настроек; сам факт установки Argo CD его не гарантирует. Ручная правка не обновляет Git и может быть перезаписана последующей синхронизацией.
Что происходит, если разработчик после перехода на Argo CD вручную изменяет ConfigMap или другой ресурс?
Когда Argo CD обнаружит ручное изменение, при каких настройках восстановит желаемое состояние и почему ConfigMap не всегда сразу меняет поведение приложения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сначала запрос обрабатывает Kubernetes: нужны права и допустимое изменение ресурса. Argo CD сам по себе не запрещает разработчику редактировать ConfigMap через Kubernetes. Ограничение ручных прав — отдельная настройка доступа.
Если изменён ресурс, которым управляет приложение Argo CD, при очередном сравнении с желаемым состоянием обычно возникает расхождение OutOfSync. Далее важна политика синхронизации:
- При ручном режиме отличие может сохраняться до запуска sync.
- Включённый auto-sync без
selfHealне означает, что любое изменение только в кластере немедленно запустит исправление. - При включённых auto-sync и
selfHealконтроллер пытается вернуть управляемое состояние к желаемому. Это не мгновенная гарантия: влияют доступность контроллера, права, ограничения синхронизации и ошибки применения.
Даже без self-heal правка может исчезнуть при последующей синхронизации новой версии; для multi-source приложений изменения другого источника также могут запустить sync. Поэтому отключение self-heal не является надёжным способом сохранить ручной патч. Automated Sync Policy.
Есть исключения: ресурс может не принадлежать данному приложению, а отдельные поля могут быть исключены из сравнения через ignoreDifferences. Игнорирование diff само по себе не следует считать запретом изменять поле во время sync. Настройка сравнения, поведение при синхронизации.
У ConfigMap отдельно проверяют эффект для приложения. Переменные окружения уже работающего контейнера не обновляются автоматически. Обычный volume обновляется с задержкой, но приложение должно перечитать файл; при subPath обновление не распространяется. Документация Kubernetes.
Для штатного изменения исправляют декларативный источник и проходят ревью. Для аварийного — следуют согласованной процедуре временного изменения, фиксируют причину и затем согласуют Git с нужным состоянием. Нельзя оставлять противоречащие настройки в расчёте, что последний ручной патч всегда победит.