Crie instantâneos de diagnóstico quando o cluster avançado 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 está ativado. O cluster avançado é ativado quando enableAdvancedClusters está definido como true no ficheiro de configuração do cluster de administrador e no ficheiro de configuração do cluster de utilizador. Se o cluster avançado não estiver ativado, consulte o artigo Crie capturas de ecrã de diagnóstico quando o cluster avançado não estiver ativado.

gkectl diagnose snapshot

Este comando comprime o estado, as configurações e os registos de um cluster num ficheiro tar. A configuração predefinida do comando gkectl diagnose snapshot captura as seguintes informações sobre o 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.

  • 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.

As credenciais, incluindo as do vSphere e F5, são removidas antes de o ficheiro TAR ser criado.

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

Substitua ADMIN_CLUSTER_KUBECONFIG pelo caminho para o ficheiro kubeconfig do cluster de administrador.

A saída inclui uma lista de ficheiros e o nome de um ficheiro TAR, conforme mostrado no seguinte exemplo de saída:

Using "system" snapshot configuration...
Creating ssh signer for "[ADMIN_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
    gkectlLogs/gkectl-xxx.log
...
    kubectlCommands/[NAMESPACE]/kubectl_get_pods
    kubectlCommands/[NAMESPACE]/kubectl_get_deployments
    kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
    nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
    nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].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:

Using "system" snapshot configuration...
Creating ssh signer for "[USER_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
    gkectlLogs/gkectl-xxx.log
...
    kubectlCommands/[NAMESPACE]/kubectl_get_pods
    kubectlCommands/[NAMESPACE]/kubectl_get_deployments
    kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
    nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/commands/journalctl_-u_kubelet
    nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/files/var/log/startup.logn
...
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.

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

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:

The snapshot configuration is:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
  - kubectl version
  - kubectl cluster-info
  - kubectl top node
  - kubectl top pod -A --containers
  namespaces: []
- commands:
  - kubectl get -o wide --ignore-not-found
  - kubectl get -o yaml --ignore-not-found
  - kubectl describe
  namespaces:
  - kube-system
...
  expandResources: true
- commands:
  - kubectl logs
  namespaces:
  - kube-system
...
kindNodeCommands: []
nodeCommands:
- nodes: []
  commands:
  - uptime
  - df --all --inodes
  - ip addr
  - ip neigh
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1 || true
  - docker info || true
...
- nodes: []
  commands:
  - dmesg
  - systemctl status -l kubelet
  - journalctl --utc -u kubelet
  - journalctl --utc -u kubelet-monitor.service
...
nodeFiles:
- nodes: []
  files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
...
- nodes: []
  files:
  - /var/log/apiserver/audit-proxy-buffer/* || 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.

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: