Esta página mostra-lhe como resolver problemas com o servidor da API Kubernetes (kube-apiserver
) para o Google Distributed Cloud.
Esta página destina-se a administradores de TI e operadores que gerem o ciclo de vida da infraestrutura tecnológica subjacente e respondem a alertas e páginas quando os objetivos de nível de serviço (SLOs) não são cumpridos ou as aplicações falham. Para saber mais sobre as funções comuns e as tarefas de exemplo que referimos no Google Cloud conteúdo, consulteFunções e tarefas comuns do utilizador do GKE.
Tempos limite de webhook e chamadas de webhook com falhas
Estes erros podem ser vistos de várias formas diferentes. Se tiver algum dos seguintes sintomas, é possível que as chamadas de webhook estejam a falhar:
Ligação recusada: se o
kube-apiserver
comunicar erros de limite de tempo excedido para chamar o webhook, o seguinte erro é comunicado nos registos:failed calling webhook "server.system.private.gdc.goog": failed to call webhook: Post "https://root-admin-webhook.gpc-system.svc:443/mutate-system-private-gdc-goog-v1alpha1-server?timeout=10s": dial tcp 10.202.1.18:443: connect: connection refused
Context deadline exceeded: também pode ver o seguinte erro comunicado nos registos:
failed calling webhook "namespaces.hnc.x-k8s.io": failed to call webhook: Post "https://hnc-webhook-service.hnc-system.svc:443/validate-v1-namespace?timeout=10s\": context deadline exceeded"
Se considerar que está a ter tempos limite de webhook ou chamadas de webhook falhadas, use um dos seguintes métodos para confirmar o problema:
Verifique o registo do servidor da API para ver se existe um problema de rede.
- Verifique se existem erros relacionados com a rede, como
TLS handshake error
, no registo. - Verifique se o IP/porta corresponde ao que o servidor da API está configurado para responder.
- Verifique se existem erros relacionados com a rede, como
Monitorize a latência do webhook com os seguintes passos:
Na consola, aceda à página Cloud Monitoring.
Selecione Explorador de métricas.
Selecione a métrica
apiserver_admission_webhook_admission_duration_seconds
.
Para resolver este problema, reveja as seguintes sugestões:
Podem ser necessárias regras de firewall adicionais para o webhook. Para mais informações, veja como adicionar regras de firewall para exemplos de utilização específicos.
Se o webhook precisar de mais tempo para ser concluído, pode configurar um valor de tempo limite personalizado. A latência dos webhooks é adicionada à latência dos pedidos de API, pelo que deve ser avaliada o mais rapidamente possível.
Se o erro do webhook bloquear a disponibilidade do cluster ou o webhook for inofensivo para remover e mitigar a situação, verifique se é possível definir temporariamente o
failurePolicy
comoIgnore
ou remover o webhook ofensivo.
Latência ou falha de ligação do servidor da API
Este erro pode ser apresentado de várias formas:
Erros de resolução de nomes externos: um cliente externo pode devolver erros que contenham
lookup
na mensagem, como:dial tcp: lookup kubernetes.example.com on 127.0.0.1:53: no such host
Este erro não se aplica a um cliente em execução no cluster. O IP do serviço Kubernetes é injetado, pelo que não é necessária nenhuma resolução.
Erros de rede: o cliente pode imprimir um erro de rede genérico ao tentar estabelecer ligação ao servidor da API, como nos seguintes exemplos:
dial tcp 10.96.0.1:443: connect: no route to host dial tcp 10.96.0.1:443: connect: connection refused dial tcp 10.96.0.1:443: connect: i/o timeout
Latência elevada ao estabelecer ligação ao servidor da API: a ligação ao servidor da API pode ser bem-sucedida, mas os pedidos expiram no lado do cliente. Neste cenário, o cliente imprime normalmente mensagens de erro que contêm
context deadline exceeded
.
Se a ligação ao servidor da API falhar completamente, experimente a ligação no mesmo ambiente em que o cliente comunica o erro. Os contentores efémeros do Kubernetes podem ser usados para injetar um contentor de depuração nos espaços de nomes existentes da seguinte forma:
A partir do local onde o cliente problemático é executado, use
kubectl
para fazer um pedido com verbosidade elevada. Por exemplo, um pedidoGET
para/healthz
normalmente não requer autenticação:kubectl get -v999 --raw /healthz
Se o pedido falhar ou
kubectl
estiver indisponível, pode obter o URL a partir do resultado e executar manualmente o pedido comcurl
. Por exemplo, se o anfitrião do serviço obtido a partir do resultado anterior forhttps://192.0.2.1:36917/
, pode enviar um pedido semelhante da seguinte forma:# Replace "--ca-cert /path/to/ca.pem" to "--insecure" if you are accessing # a local cluster and you trust the connection cannot be tampered. # The output is always "ok" and thus contains no sensentive information. curl -v --cacert /path/to/ca.pem https://192.0.2.1:36917/healthz
Normalmente, o resultado deste comando indica a causa principal de uma ligação falhada.
Se a ligação for bem-sucedida, mas for lenta ou expirar o respetivo tempo limite, indica que o servidor da API está sobrecarregado. Para confirmar, na consola, consulte as métricas de
API Server Request Rate
e de latência de pedidos emCloud Kubernetes > Anthos > Cluster > K8s Control Plane
.
Para resolver estas falhas de ligação ou problemas de latência, reveja as seguintes opções de correção:
Se ocorrer um erro de rede no cluster, pode haver um problema com o plugin da interface de rede de contentores (CNI). Normalmente, este problema é transitório e resolve-se sozinho após uma recriação ou um reagendamento do pod.
Se o erro de rede for externo ao cluster, verifique se o cliente está configurado corretamente para aceder ao cluster ou gere novamente a configuração do cliente. Se a ligação passar por um proxy ou um gateway, verifique se outra ligação que passe pelo mesmo mecanismo funciona.
Se o servidor da API estiver sobrecarregado, significa normalmente que muitos clientes acedem ao servidor da API ao mesmo tempo. Um único cliente não pode sobrecarregar um servidor de API devido à limitação e à funcionalidade Prioridade e equidade. Reveja a carga de trabalho para as seguintes áreas:
- Funciona ao nível do pod. É mais comum criar e esquecer-se de Pods por engano do que de recursos de nível superior.
- Ajustar o número de réplicas através de um cálculo incorreto.
- Um webhook que devolve o pedido a si próprio ou amplifica a carga criando mais pedidos do que processa.
O que se segue?
Se precisar de assistência adicional, contacte o apoio ao cliente do Google Cloud.
Também pode consultar o artigo Receber apoio técnico para mais informações sobre recursos de apoio técnico, incluindo o seguinte:
- Requisitos para abrir um registo de apoio técnico.
- Ferramentas para ajudar a resolver problemas, como registos e métricas.
- Componentes suportados, versões e funcionalidades do Google Distributed Cloud para VMware (apenas software).