• Русский
  • Устранение неполадок

    Содержание

    Я удалил/повредил репозиторий и не могу удалить приложение?Почему мое приложение сразу после успешной синхронизации остается в состоянии OutOfSync?Почему мое приложение застряло в состоянии Progressing?Как отключить пользователя admin?Argo CD не может развернуть приложения на основе Helm Chart без доступа в интернет, как это исправить?После создания Helm приложения с помощью Argo CD я не вижу его в helm ls и других командах Helm?Я настроил секрет кластера, но он не отображается в CLI/UI, как это исправить?Почему мое приложение Out Of Sync даже после синхронизации?Как часто Argo CD проверяет изменения в моем Git или Helm репозитории?Как исправить ошибку invalid cookie, longer than max length 4093?Почему при использовании CLI я получаю ошибку rpc error: code = Unavailable desc = transport is closing?Почему ресурсы типа SealedSecret застревают в состоянии Progressing?Как выполнить ротацию ключей Redis?Как исправить ошибку Manifest generation error (cached)?

    Я удалил/повредил репозиторий и не могу удалить приложение?

    Argo CD не может удалить приложение, если не может сгенерировать манифесты. Вам нужно либо:

    1. Восстановить/исправить репозиторий.
    2. Удалить приложение с помощью --cascade=false, а затем вручную удалить ресурсы.

    Почему мое приложение сразу после успешной синхронизации остается в состоянии OutOfSync?

    Смотрите Diffing Documentation для причин, по которым ресурсы могут быть OutOfSync, и способов настройки Argo CD для игнорирования полей, когда ожидаются различия.

    Почему мое приложение застряло в состоянии Progressing?

    Argo CD предоставляет статус здоровья для нескольких стандартных типов Kubernetes. Типы Ingress, StatefulSet и SealedSecret имеют известные проблемы, которые могут привести к тому, что проверка здоровья возвращает состояние Progressing вместо Healthy.

    • Ingress считается здоровым, если список status.loadBalancer.ingress не пуст и содержит хотя бы одно значение для hostname или IP. Некоторые ingress контроллеры (contour, traefik) не обновляют поле status.loadBalancer.ingress, что приводит к тому, что Ingress навсегда остается в состоянии Progressing.

    • StatefulSet считается здоровым, если значение поля status.updatedReplicas совпадает с полем spec.replicas. Из-за бага Kubernetes kubernetes#68573 поле status.updatedReplicas может не заполняться. Поэтому, если вы используете версию Kubernetes без исправления kubernetes#67570, StatefulSet может оставаться в состоянии Progressing.

    • Ваш StatefulSet или DaemonSet использует стратегию OnDelete вместо RollingUpdate.

    • Для SealedSecret смотрите Почему ресурсы типа SealedSecret застревают в состоянии Progressing?

    В качестве обходного решения Argo CD позволяет настроить проверку здоровья, которая переопределяет поведение по умолчанию.

    Если вы используете Traefik для вашего Ingress, вы можете обновить конфигурацию Traefik, чтобы публиковать IP loadBalancer с помощью publishedservice, что решит эту проблему.

    providers:
      kubernetesIngress:
        publishedService:
          enabled: true

    Как отключить пользователя admin?

    Добавьте admin.enabled: "false" в ConfigMap argocd-cm.

    Argo CD не может развернуть приложения на основе Helm Chart без доступа в интернет, как это исправить?

    Argo CD может не сгенерировать манифесты Helm chart, если у чарта есть зависимости из внешних репозиториев. Чтобы решить проблему, убедитесь, что requirements.yaml использует только внутренние Helm репозитории. Даже если чарт использует зависимости только из внутренних репозиториев, Helm может попытаться обновить репозиторий stable. В качестве обходного решения переопределите URL репозитория stable в ConfigMap argocd-cm:

    data:
      repositories: |
        - type: helm
          url: http://<internal-helm-repo-host>:8080
          name: stable

    После создания Helm приложения с помощью Argo CD я не вижу его в helm ls и других командах Helm?

    При развертывании Helm приложения Argo CD использует Helm только как механизм шаблонизации. Он выполняет helm template, а затем развертывает полученные манифесты в кластере вместо helm install. Это означает, что вы не можете использовать команды Helm для просмотра или проверки приложения. Управление полностью осуществляется Argo CD. Обратите внимание, что Argo CD нативно поддерживает некоторые возможности, которых может не хватать в Helm (например, команды истории и отката).

    Такое решение принято, чтобы Argo CD был нейтрален к генераторам манифестов.

    Я настроил секрет кластера, но он не отображается в CLI/UI, как это исправить?

    Проверьте, есть ли у секрета кластера метка argocd.argoproj.io/secret-type: cluster. Если метка есть, но кластер не виден, возможно, проблема с правами доступа. Попробуйте вывести список кластеров, используя пользователя admin (например: argocd login --username admin && argocd cluster list).

    Почему мое приложение Out Of Sync даже после синхронизации?

    В некоторых случаях инструмент, который вы используете, может конфликтовать с Argo CD, добавляя метку app.kubernetes.io/instance. Например, при использовании функции общих меток Kustomize.

    Argo CD автоматически устанавливает метку app.kubernetes.io/instance и использует её для определения ресурсов приложения. Если инструмент делает то же самое, это вызывает путаницу. Вы можете изменить эту метку, установив значение application.instanceLabelKey в argocd-cm. Рекомендуется использовать argocd.argoproj.io/instance.

    INFO

    После этого изменения ваши приложения станут Out Of Sync и потребуют повторной синхронизации.

    Как часто Argo CD проверяет изменения в моем Git или Helm репозитории?

    Интервал опроса по умолчанию — 3 минуты (180 секунд) с настраиваемым джиттером. Вы можете изменить настройки, обновив значения timeout.reconciliation и timeout.reconciliation.jitter в ConfigMap argocd-cm. Если есть изменения в Git, Argo CD обновит только приложения с включенной опцией auto-sync. Если установить значение в 0, Argo CD прекратит автоматический опрос Git репозиториев, и вы сможете использовать только альтернативные методы, такие как webhooks и/или manual syncs для создания приложений.

    Argo CD использует JWT в качестве токена аутентификации. Вероятно, вы состоите во многих группах, и размер cookie превысил лимит в 4 КБ. Вы можете получить список групп, открыв "developer tools -> network":

    1. Нажмите вход в панель Argo CD How to Obtain Argo CD Access Information
    2. Найдите вызов <argocd_instance>/auth/callback?code=<random_string>

    Декодируйте токен на jwt.io. Это покажет список команд, из которых вы можете исключить себя.

    Почему при использовании CLI я получаю ошибку rpc error: code = Unavailable desc = transport is closing?

    Возможно, вы находитесь за прокси, который не поддерживает HTTP 2? Попробуйте использовать флаг --grpc-web:

    argocd ... --grpc-web

    Почему ресурсы типа SealedSecret застревают в состоянии Progressing?

    Контроллер ресурса SealedSecret может выставлять статусное условие на ресурс, который он создал. Начиная с версии v2.0.0 Argo CD использует это статусное условие для определения статуса здоровья SealedSecret.

    Версии контроллера SealedSecret до v0.15.0 имеют проблему с обновлением этих статусных условий, поэтому эта функция по умолчанию отключена в этих версиях. Обновление статусных условий можно включить, запустив контроллер SealedSecret с параметром командной строки --update-status или установив переменную окружения SEALED_SECRETS_UPDATE_STATUS.

    Чтобы отключить проверку статусного условия Argo CD для ресурсов SealedSecret, добавьте следующую настройку кастомизации ресурсов в ConfigMap argocd-cm через ключ resource.customizations.health.<group_kind>.

    resource.customizations.health.bitnami.com_SealedSecret: |
      hs = {}
      hs.status = "Healthy"
      hs.message = "Controller doesn't report resource status"
      return hs

    Как выполнить ротацию ключей Redis?

    • Удалите секрет argocd-redis в namespace, где установлен Argo CD.

      kubectl delete secret argocd-redis -n <argocd namesapce>
    • Если вы используете Redis в режиме HA, перезапустите Redis в HA.

      kubectl rollout restart deployment argocd-redis-ha-haproxy
      kubectl rollout restart statefulset argocd-redis-ha-server
    • Если вы используете Redis в режиме без HA, перезапустите Redis.

      kubectl rollout restart deployment argocd-redis
    • Перезапустите остальные компоненты.

      kubectl rollout restart deployment argocd-server argocd-repo-server
      kubectl rollout restart statefulset argocd-application-controller

    Как исправить ошибку Manifest generation error (cached)?

    Manifest generation error (cached) означает, что при генерации манифестов произошла ошибка, и сообщение об ошибке было закэшировано, чтобы избежать бесконечных повторных попыток.

    Жесткое обновление (игнорирование кэшированной ошибки) может помочь при временных проблемах. Но если причина ошибки генерации манифестов сохраняется, жесткое обновление не поможет.

    Вместо этого попробуйте поискать в логах repo-server по имени приложения, чтобы определить ошибку, вызывающую сбой генерации манифестов.