Поделиться через


Устранение ошибок при развертывании расширений кластера AKS

В этой статье описывается устранение ошибок, возникающих при развертывании расширений кластера для Microsoft Служба Azure Kubernetes (AKS).

Ошибки при создании расширения

Ошибка: не удается получить ответ от агента вовремя

Эта ошибка возникает, если службы Azure не получают ответ от агента расширения кластера. Эта ситуация может произойти, так как кластер AKS не может установить подключение к Azure.

Причина 1. Агент расширения кластера и модули pod диспетчера не инициализированы

Агент расширения кластера и менеджер являются важными системными компонентами, ответственными за управление жизненным циклом приложений Kubernetes. Инициализация агента расширения кластера и модулей pod диспетчера может завершиться ошибкой из-за следующих проблем:

  • Ограничения ресурсов
  • Ограничения политики
  • Запятнания узлов, например NoSchedule
Решение 1. Убедитесь, что агент расширения кластера и модули pod диспетчера работают правильно.

Чтобы устранить эту проблему, убедитесь, что агент расширения кластера и модули pod диспетчера правильно запланированы и могут запускаться. Если модули pod застряли в непрочитанном состоянии, проверьте описание pod, выполнив следующую kubectl describe pod команду, чтобы получить дополнительные сведения о базовых проблемах (например, фрагменты, которые препятствуют планированию, недостаточному объему памяти или ограничениям политики):

kubectl describe pod -n kube-system extension-operator-{id}

Ниже приведен пример выходных данных команды:

kube-system         extension-agent-55d4f4795f-sqx7q             2/2     Running   0          2d19h
kube-system         extension-operator-56c8d5f96c-nvt7x          2/2     Running   0          2d19h

Для кластеров, подключенных к ARC, выполните следующую команду, чтобы проверить описание pod:

kubectl describe pod -n azure-arc extension-manager-{id}

Ниже приведен пример выходных данных команды:

NAMESPACE         NAME                                          READY   STATUS             RESTARTS        AGE
azure-arc         cluster-metadata-operator-744f8bfbd4-7pssr    0/2     ImagePullBackOff   0               6d19h
azure-arc         clusterconnect-agent-7557d99d5c-rtgqh         0/3     ImagePullBackOff   0               6d19h
azure-arc         clusteridentityoperator-9b8b88f97-nr8hf       0/2     ImagePullBackOff   0               6d19h
azure-arc         config-agent-6d5fd59b8b-khw2d                 0/2     ImagePullBackOff   0               6d19h
azure-arc         controller-manager-5bc97f7db6-rt2zs           0/2     ImagePullBackOff   0               6d19h
azure-arc         extension-events-collector-7596688867-sqzv2   0/2     ImagePullBackOff   0               6d19h
azure-arc         extension-manager-86bbb949-6s59q              0/3     ImagePullBackOff   0               6d19h
azure-arc         flux-logs-agent-5f55888db9-wnr4c              0/1     ImagePullBackOff   0               6d19h
azure-arc         kube-aad-proxy-646c475dcc-92b86               0/2     ImagePullBackOff   0               6d19h
azure-arc         logcollector-5cbc659bfb-9v96d                 0/1     ImagePullBackOff   0               6d19h
azure-arc         metrics-agent-5794866b46-j9949                0/2     ImagePullBackOff   0               6d19h
azure-arc         resource-sync-agent-6cf4cf7486-flgwc          0/2     ImagePullBackOff   0               6d19h

Когда агент расширения кластера и модули pod диспетчера работают и работоспособны, они устанавливают связь со службами Azure для установки приложений Kubernetes и управления ими.

Причина 2. Проблема влияет на блок исходящего трафика или брандмауэр

Если агент расширения кластера и модули pod диспетчера работоспособны, и вы по-прежнему столкнулись с ошибкой "Не удается получить ответ от агента вовремя", вероятно, существует проблема с исходящим трафиком или брандмауэром. Эта проблема может заблокировать взаимодействие агента расширения кластера и модулей pod диспетчера с Azure.

Решение 2. Убедитесь, что выполнены предварительные требования к сети

Чтобы устранить эту проблему, убедитесь, что вы следуйте предварительным требованиям сети, описанным в правилах исходящей сети и полное доменное имя для кластеров Служба Azure Kubernetes (AKS).

Причина 3. Трафик не авторизован

Агент расширения безуспешно пытается вызвать <region>.dp.kubernetesconfiguration.azure.com конечные точки службы плоскости данных. Этот сбой создает запись "Код ошибки: 403, сообщение об этом трафике не авторизовано" в журналах pod агента расширения.

kubectl logs -n kube-system extension-agent-<pod-guid>
{  "Message": "2024/02/07 06:04:43 \"Errorcode: 403, Message This traffic is not authorized., Target /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/provider/managedclusters/clusters/<cluster-name>/configurations/getPendingConfigs\"",  "LogType": "ConfigAgentTrace",  "LogLevel": "Information",  "Environment": "prod",  "Role": "ClusterConfigAgent",  "Location": "<region>,  "ArmId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ContainerService/managedclusters/<cluster-name>",  "CorrelationId": "",  "AgentName": "ConfigAgent",  "AgentVersion": "1.14.5",  "AgentTimestamp": "2024/02/07 06:04:43.672"  }
{  "Message": "2024/02/07 06:04:43 Failed to GET configurations with err : {\u003cnil\u003e}",  "LogType": "ConfigAgentTrace",  "LogLevel": "Information",  "Environment": "prod",  "Role": "ClusterConfigAgent",  "Location": "<region>",  "ArmId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ContainerService/managedclusters/<cluster-name>",  "CorrelationId": "",  "AgentName": "ConfigAgent",  "AgentVersion": "1.14.5",  "AgentTimestamp": "2024/02/07 06:04:43.672"  }

Эта ошибка возникает, если существующий PrivateLinkScope существует в плоскости данных расширения для Kubernetes с поддержкой Azure Arc, а виртуальная сеть (или частный DNS-сервер) совместно используется между Kubernetes с поддержкой Azure Arc и управляемым кластером AKS. Эта конфигурация сети приводит к тому, что исходящий трафик AKS из плоскости данных расширения также направляется через тот же частный IP-адрес, а не через общедоступный IP-адрес.

Выполните следующую команду nslookup в кластере AKS, чтобы получить конкретный частный IP-адрес, на который разрешается конечная точка плоскости данных:

PS D:\> kubectl exec -it -n kube-system extension-agent-<pod-guid> -- nslookup  <region>.dp.kubernetesconfiguration.azure.com
Non-authoritative answer:
<region>.dp.kubernetesconfiguration.azure.com        canonical name = <region>.privatelink.dp.kubernetesconfiguration.azure.com
Name:   <region>.privatelink.dp.kubernetesconfiguration.azure.com
Address: 10.224.1.184

При поиске частного IP-адреса в портал Azure результаты поиска указывают на точный ресурс: виртуальную сеть, частную зону DNS, частный DNS-сервер и т. д. Этот ресурс имеет частную конечную точку, настроенную для плоскости данных расширения для Kubernetes с поддержкой Azure Arc.

Чтобы устранить эту проблему, рекомендуется создать отдельные виртуальные сети для вычислений Kubernetes с поддержкой Azure Arc и AKS.

Решение 3.2. Создание переопределения CoreDNS

Если рекомендуемое решение невозможно в вашей ситуации, создайте переопределение CoreDNS для конечной точки плоскости расширений для перехода по общедоступной сети. Дополнительные сведения о настройке CoreDNS см. в разделе "Подключаемый модуль hosts" статьи "Настройка CoreDNS с помощью Служба Azure Kubernetes".

Чтобы создать переопределение CoreDNS, выполните следующие действия.

  1. Найдите общедоступный IP-адрес конечной точки плоскости данных расширения, выполнив nslookup команду. Убедитесь, что вы измените регион (например, eastus2euap) в зависимости от расположения кластера AKS:

    nslookup <region>.dp.kubernetesconfiguration.azure.com
    Non-authoritative answer:
    Name:    clusterconfig<region>.<region>.cloudapp.azure.com
    Address:  20.39.12.229
    Aliases:  <region>.dp.kubernetesconfiguration.azure.com
             <region>.privatelink.dp.kubernetesconfiguration.azure.com
             <region>.dp.kubernetesconfiguration.trafficmanager.net
    
  2. Создайте резервную копию существующей конфигурации coreDNS:

    kubectl get configmap -n kube-system coredns-custom -o yaml > coredns.backup.yaml
    
  3. Переопределите сопоставление для региональной конечной eastus2euapточки плоскости данных на общедоступный IP-адрес. Для этого создайте файл YAML с именем corednsms.yaml, а затем скопируйте следующую конфигурацию в новый файл. (Убедитесь, что вы обновляете адрес и имя узла с помощью значений среды.)

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom      # This is the name of the configuration map that you can overwrite with your changes.
      namespace: kube-system
    data:
      extensionsdp.override: |  # You can select any name here, but it must have the .override file name extension.
        hosts {
          20.39.12.229 <region>.dp.kubernetesconfiguration.azure.com
          fallthrough
        }
    
  4. Чтобы создать ConfigMap, выполните kubectl apply команду, указав имя файла манифеста YAML:

    kubectl apply -f corednsms.yaml
    
  5. Чтобы перезагрузить ConfigMap и включить планировщик Kubernetes для перезапуска CoreDNS без простоя, выполните команду перезапуска развертывания kubectl:

    kubectl -n kube-system rollout restart deployment coredns
    
  6. nslookup Выполните команду еще раз, чтобы убедиться, что конечная точка плоскости данных разрешает указанный общедоступный IP-адрес:

    kubectl exec -it -n kube-system extension-agent-55d4f4795f-nld9q -- nslookup  [region].dp.kubernetesconfiguration.azure.com
    Name:   <region>.dp.kubernetesconfiguration.azure.com
    Address: 20.39.12.229
    

Журналы pod агента расширения больше не должны регистрировать "Errorcode: 403, message This traffic not authorized" error entries. Вместо этого журналы должны содержать коды откликов "200".

kubectl logs -n kube-system extension-agent-{id} 
{  "Message": "GET configurations returned response code {200}",  "LogType": "ConfigAgentTrace",  "LogLevel": "Information",  "Environment": "prod",  "Role": "ClusterConfigAgent",  "Location": "<region>",  "ArmId": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ContainerService/managedclusters/<cluster-name>",  "CorrelationId": "",  "AgentName": "ConfigAgent",  "AgentVersion": "1.14.5"  }

Ошибка. Модули pod расширения не могут быть запланированы, если все пулы узлов в кластере не заданы "CriticalAddonsOnly"

При возникновении этой ошибки в журнал агента расширения регистрируется следующая запись:

Ошибка модуля pod: 0/2 узла доступны: 2 узла были неустрачены испорчены {CriticalAddonsOnly: true}. preemption: 0/2 узла доступны: 2 preemption не полезно для планирования.

Причина

Эта ошибка возникает при попытке включения расширений (таких как распределенная среда выполнения приложений (DAPR)) в кластере AKS, который содержит CriticalAddonsOnly запятнаные пулы узлов. В этой ситуации модули pod расширения не запланированы на любом узле, так как для этих отметок нет толерации.

Чтобы просмотреть ситуацию с ошибкой, проверьте модули pod расширения, чтобы убедиться, что они застряли в состоянии ожидания:

kubectl get po -n {namespace-name} -l app.kubernetes.io/name={name}

NAME                                   READY   STATUS    RESTARTS   AGE
{podname}                              0/2     Pending   0          2d6h

Описать модули pod, чтобы увидеть, что они не могут быть запланированы из-за неподдерживаемого оттенка:

kubectl describe po -n {namespace-name} {podname}

Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  18s   default-scheduler  0/2 nodes are available: 2 node(s) had untolerated taint {CriticalAddonsOnly: true}. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling.

Примечание.

  • Рекомендуется не устанавливать расширения на CriticalAddOnsOnly неуправляемых пулах узлов, если это не требуется для рабочих нагрузок приложений.

  • Рекомендуется не использовать запятую CriticalAddOnsOnly в кластерах пула узлов. Если вы используете этот фрагмент в кластере с одним пулом узлов, вы не можете запланировать модули pod приложений в кластере. Убедитесь, что хотя бы один пул узлов в кластере не имеет этого значения. Дополнительные сведения об CriticalAddonsOnly использовании заметки см. в разделе "Управление пулами системных узлов" в Служба Azure Kubernetes (AKS).

Решение 1. Добавление пула узлов в кластер

Чтобы устранить эту проблему, добавьте еще один пул узлов, который не имеет недостатка CriticalAddonsOnly . Это действие приводит к планированию модулей pod расширения в новом пуле узлов.

Решение 2. Удалите "Критическое значениеAddonsOnly"

Если это возможно и практически, можно удалить CriticalAddonsOnly ненамеренно, чтобы установить расширение в кластере.

Ошибки Helm

Вы можете столкнуться со следующими ошибками, связанными с Helm:

Ошибка: время ожидания готовности к ресурсу

Установка приложения Kubernetes завершается ошибкой и отображает следующие сообщения об ошибках:

сбой задания: BackoffLimitExceeded

Время ожидания выхода ресурса в готовое или завершенное состояние.

Причина

Эта проблема имеет следующие распространенные причины:

  • Ограничения ресурсов: неадекватная память или ресурсы ЦП в кластере могут препятствовать успешной инициализации модулей pod, заданий или других ресурсов Kubernetes. В конечном итоге эта ситуация приводит к истечении времени ожидания установки. Ограничения политики или ограничения узлов (например NoSchedule, ) также могут блокировать инициализацию ресурсов.

  • Несоответствия архитектуры. Попытка запланировать приложение на основе Linux на узле под управлением Windows (или наоборот) может вызвать сбои в инициализации ресурсов Kubernetes.

  • Неправильные параметры конфигурации: неправильные параметры конфигурации могут препятствовать запуску модулей pod.

Решение

Устранить проблему можно так:

  1. Проверьте ресурсы. Убедитесь, что кластер Kubernetes имеет достаточные ресурсы, и что планирование pod разрешено на узлах (следует учитывать ограничения). Убедитесь, что ресурсы памяти и ЦП соответствуют требованиям.

  2. Проверка событий. Проверьте события в пространстве имен Kubernetes, чтобы определить потенциальные проблемы, которые могут препятствовать pod, заданиям или другим ресурсам Kubernetes достичь готового состояния.

  3. Проверьте диаграммы и конфигурации Helm: многие приложения Kubernetes используют диаграммы Helm для развертывания ресурсов в кластере. Для некоторых приложений может потребоваться ввод пользователей с помощью параметров конфигурации. Убедитесь, что все указанные значения конфигурации являются точными и соответствуют требованиям к установке.

Ошибка. Не удалось скачать диаграмму Helm из URL-адреса репозитория

Эта ошибка вызвана проблемами подключения, возникающими между кластером и брандмауэром, а также проблемами с блокировкой исходящего трафика. Чтобы устранить эту проблему, ознакомьтесь с правилами исходящей сети и полного доменного имени для кластеров Служба Azure Kubernetes (AKS).

Ошибка: сбой отрисовки диаграммы Helm с заданными значениями

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

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

Ошибка: ресурс уже существует в кластере

Эта ошибка возникает, если конфликт существует между ресурсами Kubernetes в кластере и ресурсами Kubernetes, которые приложение пытается установить. Обычно сообщение об ошибке указывает имя конфликтующего ресурса.

Если конфликтующий ресурс является важным и не может быть заменен, возможно, вы не сможете установить приложение. Если ресурс не является критическим и его можно удалить, удалите конфликтующий ресурс и повторите установку.

Ошибка: операция уже выполняется для Helm

Эта ошибка возникает, если операция уже выполняется для определенного выпуска. Чтобы устранить эту проблему, подождите 10 минут, а затем повторите операцию.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.