Crea instantáneas de diagnóstico cuando el clúster avanzado está habilitado

En este documento, se muestra cómo usar el comando gkectl diagnose para crear instantáneas de diagnóstico para solucionar problemas en los clústeres creados con Google Distributed Cloud (solo software) para VMware cuando el clúster avanzado está habilitado. El clúster avanzado se habilita cuando enableAdvancedClusters se establece en true en el archivo de configuración del clúster de administrador y en el archivo de configuración del clúster de usuario. Si el clúster avanzado no está habilitado, consulta Cómo crear instantáneas de diagnóstico cuando el clúster avanzado no está habilitado.

Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud.

gkectl diagnose snapshot

Este comando comprime el estado, la configuración y los registros de un clúster en un archivo tar. La configuración predeterminada del comando gkectl diagnose snapshot captura la siguiente información sobre el clúster:

  • Versión de Kubernetes.

  • Estado de los recursos de Kubernetes en los espacios de nombres de kube-system y gke-system: clúster, máquina, nodos, Services, Endpoints, ConfigMaps, ReplicaSets, CronJobs, Pods y los propietarios de esos Pods, incluidos Deployments, DaemonSets y StatefulSets

  • Estado del plano de control.

  • Los detalles sobre la configuración de cada nodo, incluidas las direcciones IP, las reglas de iptables, los puntos de activación, el sistema de archivos, las conexiones de red y los procesos en ejecución.

  • Registros de contenedores del nodo del plano de control del clúster de administrador, cuando el servidor de la API de Kubernetes no está disponible.

  • Registros del comando gkectl diagnose snapshot

  • Registros de trabajos de solicitud preliminar.

  • Registros de contenedores en espacios de nombres según las situaciones.

Las credenciales, incluidas las de vSphere y F5, se quitan antes de crear el archivo tar.

Captura el estado del clúster de administrador

Para capturar el estado del clúster de administrador, ejecuta el siguiente comando:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Reemplaza ADMIN_CLUSTER_KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster de administrador.

El resultado incluye una lista de archivos y el nombre de un archivo comprimido, como se muestra en el siguiente resultado de ejemplo:

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 extraer el archivo comprimido en un directorio, ejecuta el siguiente comando:

tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME

Reemplaza lo siguiente:

  • TAR_FILE_NAME: Es el nombre del archivo tar.

  • EXTRACTION_DIRECTORY_NAME: El directorio en el que deseas extraer el archivo tar.

Para ver la lista de archivos que produjo la instantánea, ejecuta los siguientes comandos:

cd EXTRACTION_DIRECTORY_NAME/EXTRACTED_SNAPSHOT_DIRECTORY
ls kubectlCommands
ls nodes/NODE_NAME/commands
ls nodes/NODE_NAME/files

Reemplaza NODE_NAME por el nombre del nodo para el que deseas ver los archivos.

Para ver los detalles de una operación en particular, abre uno de los archivos.

Especifica la clave SSH para el clúster de administrador

Cuando obtienes una instantánea del clúster de administrador, gkectl busca la clave SSH privada para este clúster de forma automática. También puedes especificar la clave de forma explícita mediante el parámetro --admin-ssh-key-path.

Sigue las instrucciones para usar SSH a fin de conectarte a un nodo del clúster y descargar las claves SSH.

En el comando gkectl diagnose snapshot, configura --admin-ssh-key-path como la ruta de acceso de la clave decodificada:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --admin-ssh-key-path=PATH_TO_DECODED_KEY

Captura el estado del clúster de usuario

Para capturar el estado de un clúster de usuario, ejecuta el siguiente comando:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME

El siguiente ejemplo de salida incluye una lista de archivos y el nombre de un archivo comprimido:

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.

Situaciones de instantáneas

Las situaciones de instantáneas te permiten controlar la información que se incluye en una instantánea. Para especificar una situación, usa la marca --scenario. En la siguiente lista, se muestran los valores posibles:

  • system (predeterminado): Recopila una instantánea con registros en los espacios de nombres del sistema compatibles.

  • all: Recopila una instantánea con registros en todos los espacios de nombres, incluidos los espacios de nombres definidos por el usuario.

Para crear una instantánea del clúster de administrador, no necesitas especificar una situación:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Para crear una instantánea de un clúster de usuario mediante la situación system, ejecuta lo siguiente:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=system

Para crear una instantánea de un clúster de usuario mediante la situación all, ejecuta lo siguiente:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=all

Usa --log-since para limitar una instantánea

Puedes usar la marca --log-since para limitar la recopilación de registros a un período reciente. Por ejemplo, puedes recopilar solo los registros de los últimos dos días o de las últimas tres horas. De forma predeterminada, diagnose snapshot recopila todos los registros.

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=CLUSTER_NAME \
    --scenario=system \
    --log-since=DURATION

Reemplaza <var>DURATION</var> por un valor de tiempo como 120m48h.

Se aplican las siguientes consideraciones:

  • La marca --log-since solo es compatible con los registros kubectl y journalctl.
  • No se permiten marcas de comando como --log-since en la configuración de instantánea personalizada.

Realiza una ejecución de prueba de una instantánea

Puedes usar la marca --dry-run para mostrar las acciones que se realizarán y la configuración de la instantánea.

Para realizar una ejecución de prueba en el clúster de administrador, ingresa el siguiente comando:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=ADMIN_CLUSTER_NAME \
    --dry-run

Para realizar una ejecución de prueba en un clúster de usuario, ingresa el siguiente comando:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --dry-run

Usa una configuración de instantáneas

Si estas dos situaciones (--scenario system o all) no satisfacen tus necesidades, puedes pasar un archivo de configuración de una instantánea a través de la marca --snapshot-config para crear una instantánea personalizada:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

Genera una configuración de instantáneas

Puedes generar una configuración de una instantánea para una situación determinada si pasas las marcas --scenario y --dry-run. Por ejemplo, a fin de ver la configuración de la instantánea para la situación predeterminada (system) de un clúster de usuario, ingresa el siguiente comando:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=system
    --dry-run

El resultado es similar al siguiente ejemplo.

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

La siguiente información se muestra en el resultado:

  • numOfParallelThreads: Cantidad de subprocesos paralelos que se usan para tomar instantáneas.

  • excludeWords: Lista de palabras que se excluirán de la instantánea (no distingue entre mayúsculas y minúsculas). Las líneas que contienen estas palabras se quitan de los resultados de la instantánea. “Password” siempre se excluye, ya sea que lo especifiques o no.

  • kubectlCommands: Lista de comandos de kubectl que se ejecutarán. Los resultados se guardan. Los comandos se ejecutan en los espacios de nombres correspondientes. En los comandos kubectl logs, todos los Pods y los contenedores de los espacios de nombres correspondientes se agregan de forma automática. Las expresiones regulares son compatibles con la especificación de espacios de nombres. Si no especificas un espacio de nombres, se supone que usas el espacio de nombres default.

  • nodeCommands: Lista de comandos que se ejecutarán en los nodos correspondientes. Los resultados se guardan. Cuando no se especifica ningún nodo, se consideran todos los nodos del clúster de destino.

  • nodeFiles: Lista de archivos que se recopilarán de los nodos correspondientes. Se guardan los archivos. Cuando no se especifica ningún nodo, se consideran todos los nodos del clúster de destino.

¿Qué sigue?

Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud.