Что происходит, если разработчик после перехода на Argo CD вручную изменяет ConfigMap или другой ресурс?

Когда Argo CD обнаружит ручное изменение, при каких настройках восстановит желаемое состояние и почему ConfigMap не всегда сразу меняет поведение приложения.

Короткий ответ

Что ответить на собеседовании

Если Kubernetes разрешил изменение управляемого ресурса, оно попадёт в кластер. Argo CD при сравнении обычно обнаружит расхождение и покажет OutOfSync. Автоматическое восстановление зависит от auto-sync, selfHeal и других настроек; сам факт установки Argo CD его не гарантирует. Ручная правка не обновляет Git и может быть перезаписана последующей синхронизацией.

Подробный разбор

Ответ с пояснениями

Сначала запрос обрабатывает 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 с нужным состоянием. Нельзя оставлять противоречащие настройки в расчёте, что последний ручной патч всегда победит.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку