Crie instantâneos de diagnóstico quando o cluster avançado não estiver ativado

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 clusters, consulte o artigo Diagnosticar problemas de clusters.

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 simples 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 captura de ecrã 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 de ficheiros 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, all e all-with-logs.

  • Versões 1.13 a 1.28: system e all. O cenário system é igual ao cenário system-with-logs antigo. O cenário all é igual ao cenário all-with-logs antigo.

  • Versões 1.29 e superiores: system, all e 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-since só é suportada para registos kubectl e journalctl.
  • 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 balanceador 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 o storage.googleapis.com no 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_ACCOUNT pela 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 universalmente exclusivo 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: