Diagnosticar problemas de cluster.

Esta página é destinada a administradores de plataforma ou operadores de infraestrutura.

Nesta página, descrevemos como usar a ferramenta de linha de comando actl no modo particular do Anthos para diagnosticar problemas com clusters. O comando diagnose gera um arquivo que contém uma coleção de registros que captura o estado do cluster.

Introdução

Use o comando actl diagnose para capturar o estado dos clusters de administrador ou de usuário. As informações de diagnóstico podem ajudar você a descobrir problemas e depurar suas implantações com mais eficiência. O comando captura todos os arquivos de configuração de cluster e nó relevantes para o escopo definido e empacota as informações em um único arquivo tar. As sinalizações do comando permitem escolher o escopo de diagnóstico dele.

actl diagnose

Use o comando actl diagnose para resolver problemas com clusters. Esse comando compacta o status, as configurações e os registros de um cluster em um arquivo tar. Dependendo do tipo de cluster (de administrador ou de usuário) em que ele está sendo capturado, informações diferentes são coletadas. A configuração padrão do comando captura as seguintes informações sobre o cluster:

  • Versão do Kubernetes
  • Status dos recursos do Kubernetes nos namespaces dos controladores do kube-system e do APM: cluster, máquina, nós, serviços, Endpoints, ConfigMaps, ReplicaSets, CronJobs, pods e os proprietários desses pods, incluindo implantações, DaemonSets e StatefulSets.
  • Status do plano de controle do usuário se o cluster de destino for um cluster de usuário (o plano de controle do cluster de usuário é executado no cluster de administrador)
  • Detalhes sobre cada configuração de nó, incluindo endereços IP, regras de iptables, pontos de montagem, sistemas de arquivos, conexões de rede e processos em execução.
  • Registros do contêiner no nó do plano de controle do cluster de administrador quando o servidor da API Kubernetes não está disponível.
  • Informações no sistema Istio, incluindo pods, serviços, implantações, endpoints, secrets, configmaps, registros atuais e anteriores de todos os componentes e arquivos secundários do Istio e todos os artefatos de configuração do Istio.
  • Informações no Config Sync, incluindo configurações em namespaces relacionados a config-management-system.
  • Registros do comando actl diagnose

Crie um snapshot em um cenário

O comando actl diagnose é compatível com seis cenários. Para especificar um cenário, use a sinalização --scenario para coletar snapshots de qualquer uma das seguintes configurações:

  • all: (padrão) inclui todos os cenários predefinidos, incluindo: auth, config-management, kubernetes, management-center, observabilidade e service-mesh.
  • auth
  • config-management
  • kubernetes
  • management-center
  • observabilidade
  • service-mesh

É possível usar cada um dos seis cenários com o cluster de administrador ou os clusters de usuário. Para criar um snapshot de um cluster usando o cenário all:

Cluster de administrador

Se você tiver as credenciais do kubeconfig no cluster de administrador e tiver acesso para ler informações de Cluster, é possível tirar um snapshot com todos os cenários executando o seguinte comando:

 actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG\
    --cluster=CLUSTER_NAME\
    --scenario=all

Substitua:

  • ADMIN_CLUSTER_KUBECONFIG: o arquivo kubeconfig do cluster do administrador
  • CLUSTER_NAME: o nome do cluster. Se você não souber o nome do cluster, omita essa sinalização e será solicitado que você selecione um cluster para o snapshot.

Cluster de usuário

Se você tiver apenas credenciais kubeconfig em um cluster de usuário, tire um snapshot desse cluster de usuário específico com o seguinte comando:

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG\
    --scenario=all

Substitua USER_CLUSTER_KUBECONFIG pelo arquivo kubeconfig do cluster de usuário.

A saída inclui uma lista de arquivos e o nome de um arquivo tar:

Using ["all"] snapshot configuration...
? Choose a cluster (namespace/name) cluster-admin/admin
Taking snapshots in 10 thread(s)...
  kubectlCommands/anthos-management-center-operator/kubectl_get_updateitems
  kubectlCommands/kubectl_cluster-info
  kubectlCommands/kubectl_version
  kubectlCommands/anthos-management-center/kubectl_logs_git-server-0_--container_git-server_--since_24h0m0s
  kubectlCommands/anthos-management-center/kubectl_get_deployments
  ...
  nodes/10.200.0.5/files/lib/systemd/system/docker.service
  nodes/10.200.0.4/files/lib/systemd/system/docker.service
  ...
  istioCommands/istioctl_bug-report

Snapshot succeeded.
Snapshots saved in "[TAR_FILE_PATH]/[TAR_FILE_NAME].tar.gz".

Limite um snapshot a um período

É possível usar a sinalização --log-since para limitar a coleta de registros a um período recente. Por exemplo, é possível coletar os registros dos últimos dois dias ou das últimas três horas. Por padrão, diagnose coleta registros das últimas 24 horas. Essa sinalização é compatível apenas com registros kubectl.

Para limitar o período da coleta de registros:

Cluster de administrador

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --scenario=all \
    --log-since=DURATION

Cluster de usuário

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG \
    --scenario=all \
    --log-since=DURATION

Substitua DURATION por um valor de tempo como 2d ou 3h. A duração padrão é de 24 horas.

Executar uma simulação para um snapshot

É possível usar a sinalização --dry-run para mostrar as ações a serem realizadas e a configuração do snapshot.

Para executar uma simulação no cluster de administrador:

Cluster de administrador

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --dry-run

Cluster de usuário

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG \
    --dry-run

Personalize as configurações de um snapshot

Se os seis cenários não atenderem às suas necessidades, crie um snapshot personalizado. Você pode gerar uma configuração e copiá-la e colá-la em um novo arquivo de configuração ou criar um arquivo de configuração do zero. Em seguida, você pode criar o snapshot a partir do arquivo de configuração personalizado.

Opção 1: gerar uma configuração de snapshot

É possível gerar as configurações de um snapshot para um determinado cenário transmitindo as sinalizações --scenario e --dry-run. Por exemplo, para ver as configurações do snapshot de todo (padrão) o cenário de um cluster, digite este comando:

actl diagnose \
    --scenario=all  \
    --dry-run

Veja um exemplo da saída:

ExcludeWords:
- certificateAuthorityData
- password
IstioBugReport:
  Enabled: true
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system
NodeCommands:
- Commands:
  - uptime
  - df --all --inodes
  - ip addr
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1
  - docker info
  - docker ps -a
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - conntrack --count
  Nodes: []
NodeFiles:
- Files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
  - /lib/systemd/system/kubelet.service
  - /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  - /lib/systemd/system/docker.service
  - /etc/docker/daemon.json
  Nodes: []
NomosBugReport:
  Enabled: true
NumOfParallelThreads: 10

É possível copiar e colar a saída desse comando da interface de linha de comando em um novo arquivo de configuração criado, por exemplo, myconfig.yaml. É possível editar estes valores:

  • ExcludeWords: lista de palavras a serem excluídas do snapshot (não diferencia maiúsculas de minúsculas). As linhas que contêm essas palavras são removidas dos resultados do snapshot. "password" é sempre excluída, mesmo que você a especifique.
  • IstioBugReport: uma sinalização para ativar o snapshot istioctl bug-report.
  • KubectlCommands: lista de comandos kubectl a serem executados. Os comandos são executados nos namespaces correspondentes. Para comandos kubectl logs, todos os pods e contêineres nos namespaces correspondentes são adicionados automaticamente. As expressões regulares são compatíveis com a especificação de namespaces. Se você não especificar um namespace, o namespace default será usado.
  • NodeCommands: lista de comandos a serem executados nos nós correspondentes. Os resultados são salvos. Quando os nós não são especificados, todos os nós no cluster de destino são considerados.
  • NodeFiles: lista de arquivos a serem coletados dos nós correspondentes. Os arquivos são salvos. Quando os nós não são especificados, todos os nós no cluster de destino são considerados.
  • NomosBugReport: uma sinalização para ativar o snapshot nomos bugreport.
  • NumOfParallelThreads: número de linhas de execução paralelas usadas para tirar snapshots.

Opção 2: definir manualmente o arquivo de configuração personalizado de um snapshot

Crie um arquivo YAML com os parâmetros de snapshot desejados, por exemplo:

ExcludeWords:
- certificateAuthorityData
- password
NumOfParallelThreads: 10
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system

Crie um snapshot usando a configuração personalizada de snapshot

Transmita seu arquivo de configuração personalizado do snapshot usando a sinalização --snapshot-config:

Cluster de administrador

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

Cluster de usuário

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

Substitua SNAPSHOT_CONFIG_FILE pelo nome do arquivo de configuração de snapshot personalizado, por exemplo, myconfig.yaml.

Revisar o conteúdo do snapshot

Para revisar o conteúdo do arquivo tar, extraia-o com o seguinte comando:

tar -zxf TAR_FILE_PATHTAR_FILENAME.tar.gz  --directory EXTRACTION_DIRECTORY_NAME

Revise o conteúdo do arquivo .tar antes de anexá-lo às interações com o suporte.

A seguir