Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Resumo
Este artigo ajuda você a solucionar problemas de erros de CSE (extensão de script personalizado) que impedem AKS (Serviço de Kubernetes do Azure) de provisionar um novo nó. Identifique o código de saída do CSE e resolva a falha para que novas instâncias do conjunto de dimensionamento de máquinas virtuais se registrem como nós do AKS.
Pré-requisitos
Verifique se você tem o CLI do Azure instalado e se ele está atualizado para a versão mais recente. Use az --version para verificar a versão instalada.
Sintomas
Uma instância recém-provisionada do conjunto de dimensionamento de máquinas virtuais não é registrada como um nó do AKS. Após uma operação de expansão do pool de nós, você pode observar que o número de instâncias de Conjuntos de Dimensionamento de Máquinas Virtuais aumenta enquanto o número de nós do Kubernetes permanece inalterado.
Se o dimensionador automático do cluster estiver habilitado, ele poderá remover a instância de Conjuntos de Dimensionamento de Máquinas Virtuais não registrada após um período de tempo.
Solução de problemas
Para identificar a causa, recupere o código de saída do CSE da instância de Conjuntos de Dimensionamento de Máquinas Virtuais afetada.
Use CLI do Azure para executar as seguintes etapas:
Defina as variáveis para o cluster do AKS.
export RG_NAME="<cluster-resource-group>" export CLUSTER_NAME="<cluster-name>" export NODE_RG=$(az aks show \ --resource-group "$RG_NAME" \ --name "$CLUSTER_NAME" \ --query nodeResourceGroup \ --output tsv) export API_FQDN=$(az aks show \ --resource-group "$RG_NAME" \ --name "$CLUSTER_NAME" \ --query fqdn \ --output tsv)Liste os conjuntos de dimensionamento de VMs no grupo de recursos dos nós e identifique o conjunto de dimensionamento de VMs correspondente ao pool de nós afetado.
az vmss list \ --resource-group "$NODE_RG" \ --query "[].{Name:name,Capacity:sku.capacity,ProvisioningState:provisioningState}" \ --output table export VMSS_NAME="<affected-vmss-name>"Encontre o ID da instância afetada de Conjuntos de Dimensionamento de Máquinas Virtuais e exporte o valor.
export INSTANCE_ID="<affected-vmss-instance-id>"Obtenha o status do CSE da instância afetada.
az vmss get-instance-view \ --resource-group "$NODE_RG" \ --name "$VMSS_NAME" \ --instance-id "$INSTANCE_ID" \ --query "extensions[?name=='vmssCSE'].statuses[].{ ExtensionState:code, Details:message }" \ --output jsonA seguir está a saída de exemplo:
[ { "ExtensionState": "ProvisioningState/failed/0", "Details": "failed to execute command: command terminated with exit status=1\n[stdout]\n{ \"ExitCode\": \"51\", \"Output\": \"... Failed to connect to <AKS API server FQDN> port 443: Connection timed out ... API server connection check code: 51 ... exit 51\", ... }\n\n[stderr]\n..." } ]
Os códigos de saída identificam o problema específico que causou a falha de provisionamento. No exemplo anterior, o CSE retorna o código 51de saída, que indica um problema de conectividade com o servidor de API do Kubernetes.
Para mapeamentos de outros códigos de saída, consulte o auxiliar do CSE.
Solução: Teste e corrija timeouts de rede do servidor de API
Verifique se o servidor de API está acessível da instância de Conjuntos de Dimensionamento de Máquinas Virtuais afetada. Verifique as seguintes configurações de rede:
- Verifique se o NSG (grupo de segurança de rede) associado à sub-rede do AKS bloqueia o tráfego de saída para o endereço IP do servidor de API na porta TCP 443.
- Verifique se um NSG adicional está associado à interface de rede do Conjuntos de Dimensionamento de Máquinas Virtuais. Cada NSG aplicável deve permitir o tráfego de saída para o endereço IP do servidor de API na porta TCP 443.
- Verifique se um firewall ou dispositivo virtual de rede (NVA) está no caminho do tráfego de saída. Normalmente, você configura uma NVA por meio de uma tabela de rotas associada à sub-rede de nó do AKS. Verifique se o firewall ou a NVA permite o tráfego de saída para o endereço IP do servidor de API na porta TCP 443. Para obter mais informações, confira Controlar o tráfego de saída para nós de cluster no AKS.
Para testar a conectividade da instância de Conjuntos de Dimensionamento de Máquinas Virtuais para o servidor de API, use CLI do Azure para executar os comandos a seguir.
az vmss run-command invoke \
--resource-group "$NODE_RG" \
--name "$VMSS_NAME" \
--instance-id "$INSTANCE_ID" \
--command-id RunShellScript \
--scripts '
API_FQDN="'"$API_FQDN"'"
echo "=== DNS resolution ==="
getent ahostsv4 "$API_FQDN" |
awk '"'"'NR==1 {print "Resolved IP: " $1}'"'"'
echo "=== TCP connectivity ==="
if timeout 10 bash -c "</dev/tcp/$API_FQDN/443"; then
echo "TCP 443: connected"
else
echo "TCP 443: failed"
fi
echo "=== HTTPS response ==="
curl -sS -k \
--connect-timeout 10 \
--max-time 15 \
--output /dev/null \
--write-out \
"HTTP status: %{http_code}
Remote IP: %{remote_ip}
Connect time: %{time_connect}s
TLS time: %{time_appconnect}s
" \
"https://$API_FQDN/"
' \
--query "value[0].message" \
--output tsv
O comando testa a resolução do DNS (Sistema de Nomes de Domínio), a conectividade TCP (Protocolo de Controle de Transmissão) e a conectividade HTTPS. Se a conexão for bem-sucedida, a saída deverá ser semelhante ao exemplo a seguir.
Enable succeeded:
[stdout]
=== DNS resolution ===
Resolved IP: 172.199.220.208
=== TCP connectivity ===
TCP 443: connected
=== HTTPS response ===
HTTP status: 401
Remote IP: 172.199.220.208
Connect time: 0.018883s
TLS time: 0.058870s
[stderr]
Uma resposta HTTP 401 é esperada porque a solicitação não inclui credenciais de autenticação. A resposta confirma que a resolução de DNS, a conexão TCP e a negociação de TLS foram bem-sucedidas e que o servidor da API está acessível.
Se a conexão expirar, a saída deverá ser semelhante ao exemplo a seguir.
Enable succeeded:
[stdout]
=== DNS resolution ===
Resolved IP: 20.238.162.102
=== TCP connectivity ===
TCP 443: failed
=== HTTPS response ===
HTTP status: 000
Remote IP:
Connect time: 0.000000s
TLS time: 0.000000s
[stderr]
curl: (28) Connection timeout after 10000 ms
Se a conexão atingir o tempo limite, a instância Conjuntos de Dimensionamento de Máquinas Virtuais não poderá acessar o servidor de API na porta TCP 443. Verifique as regras NSG efetivas, rotas definidas pelo usuário, firewalls, NVAs e outros dispositivos de rede que possam bloquear a conexão.
Referências
- Para obter as etapas gerais de solução de problemas, consulte Solução de problemas básicos de falhas de Node Not Ready.