Solucionar problemas de erros ao implantar extensões de cluster do AKS
Este artigo discute como solucionar erros que ocorrem quando você implanta extensões de cluster para o AKS (Serviço de Kubernetes do Microsoft Azure).
Erros de criação de extensão
Erro: Não é possível obter uma resposta do agente a tempo
Esse erro ocorrerá se os serviços do Azure não receberem uma resposta do agente de extensão de cluster. Essa situação pode ocorrer porque o cluster do AKS não pode estabelecer uma conexão com o Azure.
Causa 1: o agente de extensão de cluster e os pods do gerenciador não são inicializados
O agente e o gerenciador de extensão de cluster são componentes cruciais do sistema responsáveis por gerenciar o ciclo de vida dos aplicativos Kubernetes. A inicialização do agente de extensão de cluster e dos pods do gerenciador pode falhar devido aos seguintes problemas:
- Limitações de recursos
- Restrições de política
- Taints de nó, como
NoSchedule
Solução 1: verifique se o agente de extensão de cluster e os pods do gerenciador funcionam corretamente
Para resolver esse problema, verifique se o agente de extensão de cluster e os pods do gerenciador estão agendados corretamente e podem ser iniciados. Se os pods estiverem presos em um estado despronto, verifique a descrição do pod executando o seguinte kubectl describe pod
comando para obter mais detalhes sobre os problemas subjacentes (por exemplo, taints que impedem o agendamento, memória insuficiente ou restrições de política):
kubectl describe pod -n kube-system extension-operator-{id}
Aqui está um exemplo de saída de comando:
kube-system extension-agent-55d4f4795f-sqx7q 2/2 Running 0 2d19h
kube-system extension-operator-56c8d5f96c-nvt7x 2/2 Running 0 2d19h
Para clusters conectados ao ARC, execute o seguinte comando para verificar a descrição do pod:
kubectl describe pod -n azure-arc extension-manager-{id}
Aqui está um exemplo de saída de comando:
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
Quando o agente de extensão de cluster e os pods do gerenciador estão operacionais e íntegros, eles estabelecem comunicação com os serviços do Azure para instalar e gerenciar aplicativos do Kubernetes.
Causa 2: um problema afeta o bloco de saída ou o firewall
Se o agente de extensão de cluster e os pods do gerenciador estiverem íntegros e você ainda encontrar o erro "Não é possível obter uma resposta do agente a tempo", provavelmente existe um problema de bloqueio de saída ou firewall. Esse problema pode impedir que o agente de extensão de cluster e os pods do gerenciador se comuniquem com o Azure.
Solução 2: verifique se os pré-requisitos de rede foram atendidos
Para resolver esse problema, siga os pré-requisitos de rede descritos em Rede de saída e regras FQDN para clusters do AKS (Serviço de Kubernetes do Azure).
Causa 3: o tráfego não está autorizado
O agente de extensão tenta sem êxito chamar os pontos de extremidade de serviço do <region>.dp.kubernetesconfiguration.azure.com
plano de dados. Essa falha gera uma entrada "Código de erro: 403, mensagem Este tráfego não está autorizado" nos logs do pod do agente de extensão.
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" }
Esse erro ocorrerá se um PrivateLinkScope preexistente existir no plano de dados de uma extensão para o Kubernetes habilitado para Azure Arc e a rede virtual (ou servidor DNS privado) for compartilhada entre o Kubernetes habilitado para Azure Arc e o cluster gerenciado pelo AKS. Essa configuração de rede faz com que o tráfego de saída do AKS do plano de dados de extensão também seja roteado pelo mesmo endereço IP privado em vez de por meio de um endereço IP público.
Execute o seguinte comando nslookup no cluster do AKS para recuperar o endereço IP privado específico para o qual o ponto de extremidade do plano de dados está resolvendo:
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
Quando você pesquisa o endereço IP privado no portal do Azure, os resultados da pesquisa apontam para o recurso exato: rede virtual, zona DNS privada, servidor DNS privado e assim por diante. Esse recurso tem um ponto de extremidade privado configurado para o plano de dados de extensão para o Kubernetes habilitado para Azure Arc.
Solução 3.1: (Recomendado) Criar redes virtuais separadas
Para resolver esse problema, recomendamos que você crie redes virtuais separadas para computações do Kubernetes e do AKS habilitadas para Azure Arc.
Solução 3.2: Criar uma substituição do CoreDNS
Se a solução recomendada não for possível em sua situação, crie uma substituição de CoreDNS para que o ponto de extremidade do plano de dados de extensão passe pela rede pública. Para obter mais informações sobre como personalizar o CoreDNS, consulte a seção "Plug-in de hosts" de "Personalizar o CoreDNS com o Serviço de Kubernetes do Azure".
Para criar uma substituição de CoreDNS, siga estas etapas:
Localize o endereço IP público do ponto de extremidade do plano de dados de extensão executando o
nslookup
comando. Certifique-se de alterar a região (por exemplo,eastus2euap
) com base no local do cluster do 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
Crie um backup da configuração existente do coreDNS:
kubectl get configmap -n kube-system coredns-custom -o yaml > coredns.backup.yaml
Substitua o mapeamento do ponto de extremidade do plano de dados regional (por exemplo,
eastus2euap
) para o endereço IP público. Para fazer isso, crie um arquivo YAML chamado corednsms.yaml e copie a configuração de exemplo a seguir para o novo arquivo. (Certifique-se de atualizar o endereço e o nome do host usando os valores para seu ambiente.)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 }
Para criar o ConfigMap, execute o
kubectl apply
comando, especificando o nome do arquivo de manifesto YAML:kubectl apply -f corednsms.yaml
Para recarregar o ConfigMap e permitir que o Kubernetes Scheduler reinicie o CoreDNS sem tempo de inatividade, execute o comando kubectl rollout restart :
kubectl -n kube-system rollout restart deployment coredns
Execute o
nslookup
comando novamente para garantir que o ponto de extremidade do plano de dados seja resolvido para o endereço IP público fornecido: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
Os logs do pod do agente de extensão não devem mais registrar entradas de erro "Código de erro: 403, mensagem Este tráfego não está autorizado". Em vez disso, os logs devem conter códigos de resposta "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" }
Erro: Os pods de extensão não poderão ser agendados se todos os pools de nós no cluster estiverem "CriticalAddonsOnly" contaminados
Quando esse erro ocorre, a seguinte entrada é registrada no log do agente de extensão:
Erro de pod de extensão: 0/2 nós estão disponíveis: 2 nó (s) tinham taint não tolerado {CriticalAddonsOnly: true}. preempção: 0/2 nós estão disponíveis: 2 A preempção não é útil para agendamento.
Motivo
Esse erro ocorre quando você tenta habilitar extensões (como o DAPR (Distributed Application Runtime)) em um cluster do AKS que tem CriticalAddonsOnly
pools de nós contaminados. Nessa situação, os pods de extensão não são agendados em nenhum nó porque não existe tolerância para esses taints.
Para exibir a situação de erro, examine os pods de extensão para verificar se eles estão presos em um estado pendente:
kubectl get po -n {namespace-name} -l app.kubernetes.io/name={name}
NAME READY STATUS RESTARTS AGE
{podname} 0/2 Pending 0 2d6h
Descreva os pods para ver que eles não podem ser agendados devido a uma mancha insuportável:
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.
Observação
Recomendamos que você não instale extensões em
CriticalAddOnsOnly
pools de nós contaminados, a menos que isso seja necessário para cargas de trabalho de aplicativo.Recomendamos que você não use um
CriticalAddOnsOnly
taint em clusters de pool de nó único. Se você usar esse taint em um cluster que tenha apenas um pool de nós, não poderá agendar pods de aplicativos no cluster. Certifique-se de que pelo menos um pool de nós no cluster não tenha esse taint. Para obter mais informações sobre quando aCriticalAddonsOnly
anotação deve ser usada, consulte Gerenciar pools de nós do sistema no AKS (Serviço de Kubernetes do Azure).
Solução 1: Adicionar um pool de nós ao cluster
Para resolver esse problema, adicione mais um pool de nós que não tenha um CriticalAddonsOnly
taint. Essa ação faz com que os pods de extensão sejam agendados no novo pool de nós.
Solução 2: Remover o taint "CriticalAddonsOnly"
Se for possível e prático, você poderá remover o CriticalAddonsOnly
taint para instalar a extensão no cluster.
Erros do Helm
Você pode encontrar qualquer um dos seguintes erros relacionados ao Helm:
- Tempo limite aguardando a preparação do recurso
- Não é possível baixar o gráfico do Helm da URL de repositório
- Falha na renderização do gráfico do Helm com determinados valores
- O recurso já existe no cluster
- Operação já está em andamento para Helm
Erro: Tempo limite esgotado aguardando prontidão de recursos
A instalação de um aplicativo Kubernetes falha e exibe as seguintes mensagens de erro:
falha no trabalho: BackoffLimitExceeded
Tempo limite esgotado aguardando que o recurso chegue a um estado pronto/concluído.
Motivo
Esse problema tem as seguintes causas comuns:
Restrições de recursos: recursos inadequados de memória ou CPU no cluster podem impedir a inicialização bem-sucedida de pods, trabalhos ou outros recursos do Kubernetes. Eventualmente, essa situação faz com que a instalação atinja o tempo limite. Restrições de política ou taints de nó (como
NoSchedule
) também podem bloquear a inicialização de recursos.Incompatibilidades de arquitetura: tentar agendar um aplicativo baseado em Linux em um nó baseado no Windows (ou vice-versa) pode causar falhas na inicialização de recursos do Kubernetes.
Definições de configuração incorretas: definições de configuração incorretas podem impedir que os pods sejam iniciados.
Solução
Para resolver esse problema, siga estas etapas:
Verifique os recursos: verifique se o cluster do Kubernetes tem recursos suficientes e se o agendamento de pod é permitido nos nós (você deve considerar taints). Verifique se os recursos de memória e CPU atendem aos requisitos.
Inspecionar eventos: verifique os eventos no namespace do Kubernetes para identificar possíveis problemas que possam impedir que pods, trabalhos ou outros recursos do Kubernetes atinjam um estado pronto.
Verifique os gráficos e as configurações do Helm: muitos aplicativos do Kubernetes usam gráficos do Helm para implantar recursos no cluster. Alguns aplicativos podem exigir entrada do usuário por meio de definições de configuração. Certifique-se de que todos os valores de configuração fornecidos sejam precisos e atendam aos requisitos de instalação.
Erro: Não é possível baixar o gráfico do Helm da URL do repositório
Esse erro é causado por problemas de conectividade que ocorrem entre o cluster e o firewall, além de problemas de bloqueio de saída. Para resolver esse problema, consulte Rede de saída e regras de FQDN para clusters do AKS (Serviço de Kubernetes do Azure).
Erro: Falha na renderização do gráfico do Helm com valores fornecidos
Esse erro ocorrerá se os aplicativos do Kubernetes dependerem de gráficos do Helm para implantar recursos no cluster do Kubernetes. Esses aplicativos podem exigir entrada do usuário fornecida por meio de definições de configuração que são passadas como valores do Helm durante a instalação. Se alguma dessas definições de configuração cruciais estiver ausente ou incorreta, o gráfico do Helm poderá não ser renderizado.
Para resolver esse problema, verifique a extensão ou a documentação do aplicativo para determinar se você omitiu valores obrigatórios ou forneceu valores incorretos durante a instalação do aplicativo. Essas diretrizes podem ajudá-lo a corrigir problemas de renderização de gráficos do Helm causados por valores de configuração ausentes ou imprecisos.
Erro: O recurso já existe no cluster
Esse erro ocorrerá se houver um conflito entre os recursos do Kubernetes no cluster e os recursos do Kubernetes que o aplicativo está tentando instalar. A mensagem de erro geralmente especifica o nome do recurso conflitante.
Se o recurso conflitante for essencial e não puder ser substituído, talvez você não consiga instalar o aplicativo. Se o recurso não for crítico e puder ser removido, exclua o recurso conflitante e tente a instalação novamente.
Erro: A operação já está em andamento para o Helm
Esse erro ocorrerá se já houver uma operação em andamento para uma versão específica. Para resolver esse problema, aguarde 10 minutos e repita a operação.
Entre em contato conosco para obter ajuda
Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.