Este documento mostra como usar o comando gkectl diagnose para criar
capturas instantâneas de diagnóstico para resolver problemas nos seus clusters criados com o
Google Distributed Cloud (apenas software) para VMware quando o cluster avançado não está ativado.
O cluster avançado não está ativado quando enableAdvancedClusters está definido como false no
ficheiro de configuração do cluster de administrador
e no ficheiro de configuração do cluster de utilizador. Se o cluster avançado estiver ativado, consulte o artigo Crie instantâneos quando o cluster avançado estiver ativado.
A ferramenta gkectl tem dois comandos para resolver problemas com clusters:
gkectl diagnose snapshot e gkectl diagnose cluster. Os comandos funcionam com clusters de administrador e de utilizador.
Para mais informações sobre como usar o comando gkectl diagnose cluster para diagnosticar problemas de cluster, consulte o artigo Diagnosticar problemas de cluster.
gkectl diagnose snapshot
Este comando comprime o estado, as configurações e os registos de um cluster num ficheiro tar. Quando executa gkectl diagnose snapshot, o comando executa automaticamente gkectl diagnose cluster como parte do processo, e os ficheiros de saída são colocados numa nova pasta na imagem instantânea denominada /diagnose-report.
Instantâneo predefinido
A configuração predefinida do comando gkectl diagnose snapshot captura as seguintes informações sobre o seu cluster:
- Versão do Kubernetes. 
- Estado dos recursos do Kubernetes nos espaços de nomes kube-system e gke-system: cluster, máquina, nós, serviços, pontos finais, ConfigMaps, ReplicaSets, CronJobs, pods e os proprietários desses pods, incluindo implementações, DaemonSets e StatefulSets. 
- Estado do plano de controlo. 
- Detalhes sobre cada configuração de nó, incluindo endereços IP, regras de iptables, pontos de montagem, sistema de ficheiros, ligações de rede e processos em execução. 
- Registos de contentores do nó do plano de controlo do cluster de administrador quando o servidor da API Kubernetes não está disponível. 
- Informações do vSphere, incluindo objetos de VM e os respetivos eventos com base no conjunto de recursos. Também recolhe informações sobre os objetos Datacenter, Cluster, Network e Datastore associados às VMs. 
- Informações do equilibrador de carga F5 BIG-IP, incluindo servidor virtual, endereço virtual, conjunto, nó e monitor. 
- Registos do comando - gkectl diagnose snapshot.
- Registos de tarefas de pré-publicação. 
- Registos de contentores em espaços de nomes com base nos cenários. 
- Informações sobre a expiração do certificado Kubernetes do cluster de administrador no ficheiro de instantâneo - /nodes/<admin_master_node_name>/sudo_kubeadm_certs_check-expiration.
- Um ficheiro de índice HTML para todos os ficheiros na captura instantânea. 
- Opcionalmente, o ficheiro de configuração do cluster de administrador usado para instalar e atualizar o cluster com a flag - --config.
As credenciais, incluindo as do vSphere e F5, são removidas antes de o ficheiro TAR ser criado.
Instantâneo leve
Na versão 1.29 e superior do Google Distributed Cloud, está disponível uma versão simplificada do gkectl diagnose snapshot para clusters de administrador e de utilizador.
A captura instantânea simples acelera o processo de captura instantânea porque captura menos informações sobre o cluster. Quando adiciona --scenario=lite ao comando, apenas as seguintes informações são incluídas na captura de ecrã:
- Estado dos recursos do Kubernetes nos espaços de nomes kube-system e gke-system: cluster, máquina, nós, serviços, pontos finais, ConfigMaps, ReplicaSets, CronJobs, pods e os proprietários desses pods, incluindo implementações, DaemonSets e StatefulSets 
- Registos do comando - gkectl diagnose snapshot
Capture o estado do cluster
Se os comandos gkectl diagnose cluster encontrarem erros, deve capturar o estado do cluster e fornecer as informações ao apoio técnico ao cliente da Google Cloud. Pode capturar estas informações através do comando gkectl diagnose snapshot.
gkectl diagnose snapshot tem uma flag opcional para --config. Além de recolher informações sobre o cluster,
esta flag recolhe o ficheiro de configuração que foi usado para criar ou atualizar o
cluster.
Capturar o estado do cluster de administrador
Para capturar o estado de um cluster de administrador, execute o seguinte comando:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config
O parâmetro --config é opcional:
Se existir um problema com um endereço IP virtual (VIP) no cluster de destino, use a flag --config para fornecer o ficheiro de configuração do cluster de administrador e fornecer mais informações de depuração.
Na versão 1.29 e superior, pode incluir --scenario=lite se não precisar de todas as informações na imagem instantânea predefinida.
A saída inclui uma lista de ficheiros e o nome de um ficheiro TAR, conforme mostrado no seguinte exemplo de saída:
Taking snapshot of admin cluster "[ADMIN_CLUSTER_NAME]"...
   Using default snapshot configuration...
   Setting up "[ADMIN_CLUSTER_NAME]" ssh key file...DONE
   Taking snapshots...
       commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
       commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
       commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
       ...
       nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
       nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
       ...
   Snapshot succeeded. Output saved in [TAR_FILE_NAME].tar.gz.
Para extrair o ficheiro tar para um diretório, execute o seguinte comando:
tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME
Substitua o seguinte:
- TAR_FILE_NAME: o nome do ficheiro TAR.
- EXTRACTION_DIRECTORY_NAME: o diretório para o qual quer extrair o arquivo do ficheiro TAR.
Para ver a lista de ficheiros produzidos pela captura instantânea, execute os seguintes comandos:
cd EXTRACTION_DIRECTORY_NAME/EXTRACTED_SNAPSHOT_DIRECTORY ls kubectlCommands ls nodes/NODE_NAME/commands ls nodes/NODE_NAME/files
Substitua NODE_NAME pelo nome do nó para o qual quer ver os ficheiros.
Para ver os detalhes de uma operação específica, abra um dos ficheiros.
Especifique a chave SSH para o cluster de administrador
Quando obtém uma captura instantânea do cluster de administrador, o gkectl encontra automaticamente a chave SSH privada para o cluster de administrador. Também pode especificar a chave explicitamente através do parâmetro --admin-ssh-key-path.
Siga as instruções para Usar o SSH para estabelecer ligação a um nó do cluster para transferir as chaves SSH.
No comando gkectl diagnose snapshot, defina --admin-ssh-key-path para o caminho da chave descodificada:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --admin-ssh-key-path=PATH_TO_DECODED_KEY
Capture o estado do cluster de utilizadores
Para capturar o estado de um cluster de utilizadores, execute o seguinte comando:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME
O exemplo de saída seguinte inclui uma lista de ficheiros e o nome de um ficheiro tar:
Taking snapshot of user cluster "[USER_CLUSTER_NAME]"...
Using default snapshot configuration...
Setting up "[USER_CLUSTER_NAME]" ssh key file...DONE
    commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
    commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
    commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
    ...
    commands/kubectl_get_pods_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
    commands/kubectl_get_deployments_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
    commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
    ...
    nodes/[USER_CLUSTER_NODE]/commands/journalctl_-u_kubelet
    nodes/[USER_CLUSTER_NODE]/files/var/log/startup.log
    ...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.
Cenários de instantâneos
Os cenários de instantâneos permitem-lhe controlar as informações incluídas num instantâneo. Para especificar um cenário, use a flag --scenario. A lista que se segue
mostra os valores possíveis:
- system(predefinição): recolhe o instantâneo com registos nos espaços de nomes do sistema suportados.
- all: recolhe um instantâneo com registos em todos os espaços de nomes, incluindo espaços de nomes definidos pelo utilizador.
- lite(1.29 e superior): recolha uma captura de ecrã apenas com recursos do Kubernetes e registos do- gkectl. Todos os outros registos, como os registos do contentor e os registos do kernel do nó, são excluídos.
Os cenários de instantâneos disponíveis variam consoante a versão do Google Distributed Cloud.
- Versões inferiores a 1.13: - system,- system-with-logs,- alle- all-with-logs.
- Versões 1.13 a 1.28: - systeme- all. O cenário- systemé igual ao cenário- system-with-logsantigo. O cenário- allé igual ao cenário- all-with-logsantigo.
- Versões 1.29 e superiores: - system,- alle- lite.
Para criar um instantâneo do cluster de administrador, não precisa de especificar um cenário:
gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
Para criar uma imagem instantânea de um cluster de utilizadores através do cenário system:
gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=system
Para criar uma imagem instantânea de um cluster de utilizadores através do cenário all:
gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=all
Para criar uma imagem instantânea de um cluster de utilizadores através do cenário lite:
gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=lite
Use --log-since para limitar um instantâneo
Pode usar a flag --log-since para limitar a recolha de registos a um período recente. Por exemplo, pode recolher apenas os registos dos últimos dois dias ou das últimas três horas. Por predefinição, o diagnose snapshot recolhe todos os registos.
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=CLUSTER_NAME \
    --scenario=system \
    --log-since=DURATION
Substitua <var>DURATION</var> por um valor de tempo, como 120m ou 48h.
Aplicam-se as seguintes considerações:
- A flag --log-sincesó é suportada para registoskubectlejournalctl.
- As flags de comando, como --log-since, não são permitidas na configuração de instantâneo personalizada.
Faça um ensaio de um instantâneo
Pode usar a flag --dry-run para mostrar as ações a realizar e a configuração de instantâneos.
Para fazer um teste de execução no cluster de administrador, introduza o seguinte comando:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=ADMIN_CLUSTER_NAME \
    --dry-run
Para fazer um teste de execução num cluster de utilizadores, introduza o seguinte comando:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --dry-run
Use uma configuração de instantâneo
Se estes dois cenários (--scenario system ou all) não satisfizerem as suas necessidades, pode criar um resumo personalizado transmitindo um ficheiro de configuração do resumo através da flag --snapshot-config:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE
Gere uma configuração de instantâneo
Pode gerar uma configuração de resumo para um determinado cenário transmitindo as flags --scenario e --dry-run. Por exemplo, para ver a configuração de instantâneo para o cenário predefinido (system) de um cluster de utilizadores, introduza o seguinte comando:
gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=system
    --dry-run
O resultado é semelhante ao seguinte exemplo:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
  - kubectl get clusters -o wide
  - kubectl get machines -o wide
  - kubectl get clusters -o yaml
  - kubectl get machines -o yaml
  - kubectl describe clusters
  - kubectl describe machines
  namespaces:
  - default
- commands:
  - kubectl version
  - kubectl cluster-info
  - kubectl get nodes -o wide
  - kubectl get nodes -o yaml
  - kubectl describe nodes
  namespaces: []
- commands:
  - kubectl get pods -o wide
  - kubectl get deployments -o wide
  - kubectl get daemonsets -o wide
  - kubectl get statefulsets -o wide
  - kubectl get replicasets -o wide
  - kubectl get services -o wide
  - kubectl get jobs -o wide
  - kubectl get cronjobs -o wide
  - kubectl get endpoints -o wide
  - kubectl get configmaps -o wide
  - kubectl get pods -o yaml
  - kubectl get deployments -o yaml
  - kubectl get daemonsets -o yaml
  - kubectl get statefulsets -o yaml
  - kubectl get replicasets -o yaml
  - kubectl get services -o yaml
  - kubectl get jobs -o yaml
  - kubectl get cronjobs -o yaml
  - kubectl get endpoints -o yaml
  - kubectl get configmaps -o yaml
  - kubectl describe pods
  - kubectl describe deployments
  - kubectl describe daemonsets
  - kubectl describe statefulsets
  - kubectl describe replicasets
  - kubectl describe services
  - kubectl describe jobs
  - kubectl describe cronjobs
  - kubectl describe endpoints
  - kubectl describe configmaps
  namespaces:
  - kube-system
  - gke-system
  - gke-connect.*
prometheusRequests: []
nodeCommands:
- nodes: []
  commands:
  - uptime
  - df --all --inodes
  - ip addr
  - sudo iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1
  - sudo docker ps -a
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - sudo conntrack --count
nodeFiles:
- nodes: []
  files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/nf_conntrack_max
seesawCommands: []
seesawFiles: []
nodeCollectors:
- nodes: []
f5:
  enabled: true
vCenter:
  enabled: true
As seguintes informações são apresentadas no resultado:
- numOfParallelThreads: número de threads paralelos usados para tirar instantâneos.
- excludeWords: lista de palavras a excluir do resumo (sem distinção entre maiúsculas e minúsculas). As linhas que contêm estas palavras são removidas dos resultados da análise rápida. "palavra-passe" é sempre excluída, quer a especifique ou não.
- kubectlCommands: lista de comandos kubectl a executar. Os resultados são guardados. Os comandos são executados nos espaços de nomes correspondentes. Para comandos- kubectl logs, todos os pods e contentores nos espaços de nomes correspondentes são adicionados automaticamente. As expressões regulares são suportadas para especificar espaços de nomes. Se não especificar um espaço de nomes, é assumido o espaço de nomes- default.
- nodeCommands: lista de comandos a executar nos nós correspondentes. Os resultados são guardados. Quando não são especificados nós, são considerados todos os nós no cluster de destino.
- nodeFiles: lista de ficheiros a recolher dos nós correspondentes. Os ficheiros são guardados. Quando os nós não são especificados, todos os nós no cluster de destino são considerados.
- seesawCommands: lista de comandos a executar para recolher informações do equilibrador de carga do Seesaw. Os resultados são guardados se o cluster estiver a usar o equilibrador de carga do Seesaw.
- seesawFiles: lista de ficheiros a recolher para o equilibrador de carga do Seesaw.
- nodeCollectors: um coletor executado para nós do Cilium para recolher informações do eBPF.
- f5: um indicador para ativar a recolha de informações relacionadas com o equilibrador de carga F5 BIG-IP.
- vCenter: um indicador para ativar a recolha de informações relacionadas com o vCenter.
- prometheusRequests: lista de pedidos do Prometheus. Os resultados são guardados.
Carregue capturas de ecrã para um contentor do Cloud Storage
Para facilitar a manutenção de registos, a análise e o armazenamento, pode carregar todas as cópias instantâneas de um cluster específico para um contentor do Cloud Storage. Isto é particularmente útil se precisar de assistência do Cloud Customer Care.
Antes de carregar capturas instantâneas para um contentor do Cloud Storage, reveja e conclua os seguintes requisitos iniciais:
- Ative a - storage.googleapis.comno projeto anfitrião da frota. Embora possa usar um projeto diferente, recomendamos o projeto anfitrião da frota.- gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com 
- Conceda a função - roles/storage.adminà conta de serviço no respetivo projeto principal e transmita o ficheiro de chave JSON da conta de serviço através do parâmetro- --service-account-key-file. Pode usar qualquer conta de serviço, mas recomenda-se a conta de serviço de registo de associação. Consulte o artigo Contas de serviço para mais informações.- gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT" \ --role "roles/storage.admin" - Substitua - CONNECT_REGISTER_SERVICE_ACCOUNTpela conta de serviço de registo de associação.
Com estes requisitos cumpridos, já pode carregar a captura de ecrã para o contentor do Cloud Storage:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name CLUSTER_NAME \
    --upload \
    --share-with GOOGLE_SUPPORT_SERVICE_ACCOUNT
A flag --share-with pode aceitar uma lista de nomes de contas de serviço. Substitua
GOOGLE_SUPPORT_SERVICE_ACCOUNT pela conta de serviço do
Cloud Customer Care fornecida pelo Cloud Customer Care, juntamente com quaisquer
outras contas de serviço fornecidas pelo Cloud Customer Care.
Quando usa a flag --upload, o comando procura no seu projeto um contentor de armazenamento com um nome que comece por "anthos-snapshot-". Se existir um contentor deste tipo, o comando carrega a captura de ecrã para esse contentor. Se o comando não encontrar um contentor com um nome correspondente, cria um novo contentor com o nome anthos-snapshot-UUID, em que UUID é um identificador exclusivo universal de 32 dígitos.
Quando usa a flag --share-with, não precisa de partilhar manualmente o acesso ao contentor com o Apoio ao cliente do Google Cloud.
O exemplo de saída seguinte é apresentado quando carrega uma captura instantânea para um contentor do Cloud Storage:
Using "system" snapshot configuration...
Taking snapshot of user cluster <var>CLUSTER_NAME</var>...
Setting up <var>CLUSTER_NAME</var> ssh key...DONE
Using the gke-connect register service account key...
Setting up Google Cloud Storage bucket for uploading the snapshot...DONE
Taking snapshots in 10 thread(s)...
   ...
Snapshot succeeded.
Snapshots saved in "<var>SNAPSHOT_FILE_PATH</var>".
Uploading snapshot to Google Cloud Storage......  DONE
Uploaded the snapshot successfully to gs://anthos-snapshot-a4b17874-7979-4b6a-a76d-e49446290282/<var>xSNAPSHOT_FILE_NAME</var>.
Shared successfully with service accounts:
<var>GOOGLE_SUPPORT_SERVICE_ACCOUNT</var>
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 ao cliente.
- 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).