A ferramenta gkectl
tem dois comandos para solucionar problemas com clusters:
gkectl diagnose cluster
e gkectl diagnose snapshot
. Os comandos funcionam
com clusters de administrador e usuário. Neste documento, mostramos como usar o
comando gkectl diagnose
para diagnosticar problemas nos clusters.
Para mais informações sobre como usar o comando gkectl diagnose snapshot
para
criar snapshots que podem ajudar o Cloud Customer Care a diagnosticar problemas, consulte
Criar snapshots para diagnosticar clusters.
gkectl diagnose cluster
Esse comando executa verificações de integridade no cluster e relata erros. O comando executa verificações de integridade nos seguintes componentes:
- vCenter
- Credencial
- DRS
- Grupos antiafinidade
- Rede
- Versão
- Data center
- Datastore
- ResourcePool
- Pasta
- Rede
- Balanceador de carga (F5, Seesaw ou manual)
- Cluster de usuários e pools de nós
- Objetos de cluster
- Disponibilidade do servidor de conectividade do cluster de usuários
- Objetos de máquina e os nós de cluster correspondentes
- Pods nos namespaces
kube-system
egke-system
- Plano de controle
- Volumes permanentes do vSphere no cluster
- Sinais de contenção de memória e vCPU do usuário e administrador (CPU virtual)
- O cluster de usuários e administradores ESXi pré-configurou os alarmes de uso de CPU do host e da memória.
- Hora do dia (TOD)
- Política de rede de nós para um cluster com o Dataplane V2 ativado
- Integridade geral do agente do nó do Dataplane V2
Diagnosticar um cluster de administrador
Para diagnosticar um cluster de administrador, especifique o caminho para esse cluster:
gkectl diagnose cluster --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
Substitua ADMIN_CLUSTER_KUBECONFIG
pelo caminho do
arquivo kubeconfig do cluster de administrador.
O exemplo de saída a seguir é retornado do comando gkectl diagnose cluster
:
Preparing for the diagnose tool...
Diagnosing the cluster......DONE
- Validation Category: Admin Cluster Connectivity
Checking VMs TOD (availability)...SUCCESS
Checking Konnectivity Server (readiness)...SUCCESS
- Validation Category: Admin Cluster F5 BIG-IP
Checking f5 (credentials, partition)...SUCCESS
- Validation Category: Admin Cluster VCenter
Checking Credentials...SUCCESS
Checking DRS enabled...SUCCESS
Checking Hosts for AntiAffinityGroups...SUCCESS
Checking Version...SUCCESS
Checking Datacenter...SUCCESS
Checking Datastore...SUCCESS
Checking Resource pool...SUCCESS
Checking Folder...SUCCESS
Checking Network...SUCCESS
- Validation Category: Admin Cluster
Checking cluster object...SUCCESS
Checking machine deployment...SUCCESS
Checking machineset...SUCCESS
Checking machine objects...SUCCESS
Checking kube-system pods...SUCCESS
Checking anthos-identity-service pods...SUCCESS
Checking storage...SUCCESS
Checking resource...SUCCESS
Checking virtual machine resource contention...SUCCESS
Checking host resource contention...SUCCESS
All validation results were SUCCESS.
Cluster is healthy!
Se houver um problema com um endereço IP virtual (VIP) no cluster de destino,
use a sinalização --config
para fornecer o arquivo de configuração do cluster de administrador e
fornecer mais informações de depuração.
gkectl diagnose cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config CLUSTER_CONFIG
Substitua CLUSTER_CONFIG
pelo caminho do arquivo de configuração do cluster de administrador
ou de usuário.
O exemplo de saída a seguir mostra que o comando gkectl diagnose cluster
agora pode se conectar corretamente ao cluster e verificar problemas:
Failed to access the api server via LB VIP "...": ...
Try to use the admin master IP instead of problematic VIP...
Reading config with version "[CONFIG_VERSION]"
Finding the admin master VM...
Fetching the VMs in the resource pool "[RESOURCE_POOL_NAME]"...
Found the "[ADMIN_MASTER_VM_NAME]" is the admin master VM.
Diagnosing admin|user cluster "[TARGET_CLUSTER_NAME]"...
...
Diagnosticar um cluster de usuário
Para diagnosticar um cluster de usuário, especifique o nome dele. Se você precisar saber o nome de um cluster de usuário, execute o seguinte comando:
kubectl get cluster --kubeconfig=USER_CLUSTER_KUBECONFIG
Substitua USER_CLUSTER_KUBECONFIG
pelo caminho do
arquivo kubeconfig do cluster de usuário.
Especifique o nome do cluster de usuário junto com o arquivo de configuração da seguinte maneira:
gkectl diagnose cluster --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
Substitua USER_CLUSTER_NAME
pelo nome do cluster de
usuário.
O exemplo de saída a seguir é retornado do comando gkectl diagnose cluster
:
Preparing for the diagnose tool...
Diagnosing the cluster......DONE
Diagnose result is saved successfully in <DIAGNOSE_REPORT_JSON_FILE>
- Validation Category: User Cluster Connectivity
Checking Node Network Policy...SUCCESS
Checking VMs TOD (availability)...SUCCESS
Checking Dataplane-V2...Success
- Validation Category: User Cluster F5 BIG-IP
Checking f5 (credentials, partition)...SUCCESS
- Validation Category: User Cluster VCenter
Checking Credentials...SUCCESS
Checking DRS enabled...SUCCESS
Checking Hosts for AntiAffinityGroups...SUCCESS
Checking VSphere CSI Driver...SUCCESS
Checking Version...SUCCESS
Checking Datacenter...SUCCESS
Checking Datastore...SUCCESS
Checking Resource pool...SUCCESS
Checking Folder...SUCCESS
Checking Network...SUCCESS
- Validation Category: User Cluster
Checking user cluster and node pools...SUCCESS
Checking cluster object...SUCCESS
Checking machine deployment...SUCCESS
Checking machineset...SUCCESS
Checking machine objects...SUCCESS
Checking control plane pods...SUCCESS
Checking kube-system pods...SUCCESS
Checking gke-system pods...SUCCESS
Checking gke-connect pods...SUCCESS
Checeking anthos-identity-service pods...SUCCESS
Checking storage...SUCCESS
Checking resource...SUCCESS
Checking virtual machine resource contention...SUCCESS
Checking host resource contention...SUCCESS
All validation results were SUCCESS.
Cluster is healthy!
Diagnosticar o status da máquina virtual
Se surgir um problema com a criação da máquina virtual, execute gkectl diagnose cluster
para receber um diagnóstico do status da máquina virtual.
O resultado será assim:
- Validation Category: Cluster Healthiness
Checking cluster object...SUCCESS
Checking machine deployment...SUCCESS
Checking machineset...SUCCESS
Checking machine objects...SUCCESS
Checking machine VMs...FAILURE
Reason: 1 machine VMs error(s).
Unhealthy Resources:
Machine [NODE_NAME]: The VM's UUID "420fbe5c-4c8b-705a-8a05-ec636406f60" does not match the machine object's providerID "420fbe5c-4c8b-705a-8a05-ec636406f60e".
Debug Information:
null
...
Exit with error:
Cluster is unhealthy!
Run gkectl diagnose cluster automatically in gkectl diagnose snapshot
Public page https://cloud.google.com/anthos/clusters/docs/on-prem/latest/diagnose#overview_diagnose_snapshot
Resolver problemas
A tabela a seguir descreve algumas possíveis soluções para problemas na execução
do comando gkectl diagnose cluster
:
Problema | Causas possíveis | Resolução |
---|---|---|
O servidor da API Kubernetes não está acessível, seja para o cluster de administração ou para clusters de usuários. | Verifique os gráficos de latência de memória (OBB, na sigla em inglês) de integridade da máquina virtual, que preferencialmente têm uma latência de memória por volta de zero. A contenção de memória também pode aumentar a contenção da CPU e os gráficos de prontidão da CPU podem ter um pico, porque haverá interação. | Aumente a memória física. Para ver outras opções, consulte Sugestões de solução de problemas do VMware. |
A criação do pool de nós expira. | Alta latência de leitura/gravação do VMDK. Verifique a integridade da integridade da VM para a latência de leitura e gravação do disco virtual. De acordo com o VMware, uma latência total maior que 20 ms indica um problema. | Consulte Soluções de VMware para problemas de desempenho do disco. |
BundleUnexpectedDiff
erro
O recurso da API Kubernetes Cluster gerenciado por um pacote do Google Distributed Cloud pode ser modificado acidentalmente, o que pode causar falha nos componentes do sistema ou no upgrade ou na atualização do cluster.
No Google Distributed Cloud versão 1.13 e mais recentes, o
onprem-user-cluster-controller
verifica periodicamente o status dos objetos e
informa diferenças inesperadas do estado desejado por meio de registros e
eventos. Esses objetos incluem o plano de controle do cluster de usuário e complementos, como
Serviços e DaemonSets.
O exemplo de saída a seguir mostra um evento de diferença inesperado:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning BundleUnexpectedDiff 13m onpremusercluster/ci-bundle-diff Detected unexpected difference of user control plane objects: [ConfigMap/istio], please check onprem-user-cluster-controller logs for more details.
A saída de exemplo a seguir mostra registros gerados por
onprem-user-cluster-controller
:
2022-08-06T02:54:42.701352295Z W0806 02:54:42.701252 1 update.go:206] Detected unexpected difference of user addon object(ConfigMap/istio), Diff: map[string]string{
2022-08-06T02:54:42.701376406Z - "mesh": (
2022-08-06T02:54:42.701381190Z - """
2022-08-06T02:54:42.701385438Z - defaultConfig:
2022-08-06T02:54:42.701389350Z - discoveryAddress: istiod.gke-system.svc:15012
...
2022-08-06T02:54:42.701449954Z - """
2022-08-06T02:54:42.701453099Z - ),
2022-08-06T02:54:42.701456286Z - "meshNetworks": "networks: {}",
2022-08-06T02:54:42.701459304Z + "test-key": "test-data",
2022-08-06T02:54:42.701462434Z }
Os eventos e registros não bloqueiam a operação do cluster. Os objetos com diferenças inesperadas do estado pretendido serão substituídos no próximo upgrade do cluster.