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 dogkectl. 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,alleall-with-logs.Versões 1.13 a 1.28:
systemeall. O cenáriosystemé igual ao cenáriosystem-with-logsantigo. O cenárioallé igual ao cenárioall-with-logsantigo.Versões 1.29 e superiores:
system,allelite.
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 comandoskubectl 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 nomesdefault.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).