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 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
,all
eall-with-logs
.Versões 1.13 a 1.28:
system
eall
. O cenáriosystem
é igual ao cenáriosystem-with-logs
antigo. O cenárioall
é igual ao cenárioall-with-logs
antigo.Versões 1.29 e superiores:
system
,all
elite
.
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 registoskubectl
ejournalctl
. - 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 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:
- Requisitos para abrir um registo de apoio técnico.
- 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).