Crear capturas de diagnóstico cuando se habilita el clúster avanzado

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 está habilitado el clúster avanzado. El clúster avanzado se habilita cuando enableAdvancedClusters se define como true en el archivo de configuración del clúster de administradores y en el archivo de configuración del clúster de usuarios. Si el clúster avanzado no está habilitado, consulta Crear capturas de diagnóstico cuando el clúster avanzado no esté habilitado.

gkectl diagnose snapshot

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

  • Versión de Kubernetes.

  • Estado de los recursos de Kubernetes en los espacios de nombres kube-system y gke-system: clúster, máquina, nodos, servicios, endpoints, ConfigMaps, ReplicaSets, CronJobs, pods y los propietarios de esos pods, incluidos los despliegues, DaemonSets y StatefulSets.

  • Estado del plano de control.

  • Detalles sobre la configuración de cada nodo, incluidas las direcciones IP, las reglas de iptables, los puntos de montaje, 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 las tareas de comprobación preparatoria.

  • Registros de contenedores en espacios de nombres basados en las situaciones.

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

Capturar el estado del clúster de administrador

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

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

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

La salida incluye una lista de archivos y el nombre de un archivo tar, como se muestra en el siguiente 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 tar en un directorio, ejecuta el siguiente comando:

tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME

Haz los cambios siguientes:

  • TAR_FILE_NAME: el nombre del archivo tar.

  • EXTRACTION_DIRECTORY_NAME: el directorio en el que quieres extraer el archivo tar.

Para ver la lista de archivos que genera 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

Sustituye NODE_NAME por el nombre del nodo del que quieras ver los archivos.

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

Especificar la clave SSH del clúster de administrador

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

Sigue las instrucciones de la sección Conectarse a un nodo de clúster mediante SSH para descargar las claves SSH.

En el comando gkectl diagnose snapshot, asigna --admin-ssh-key-path a la ruta de clave decodificada:

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

Capturar el estado de un clúster de usuarios

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

En el siguiente ejemplo de salida se incluye una lista de archivos y el nombre de un archivo 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.

Situaciones de capturas

Los escenarios de la función de crear una copia te permiten controlar la información que se incluye en una copia. Para especificar un escenario, usa la marca --scenario. En la siguiente lista se muestran los valores posibles:

  • system (predeterminado): recoge una instantánea con los registros de los espacios de nombres del sistema admitidos.

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

Para crear una captura del clúster de administrador, no es necesario que especifiques un escenario:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Para crear una instantánea de un clúster de usuarios con el escenario system, sigue estos pasos:

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

Para crear una instantánea de un clúster de usuarios con el escenario all, sigue estos pasos:

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

Usar --log-since para limitar una captura

Puedes usar la marca --log-since para limitar la recogida de registros a un periodo reciente. Por ejemplo, puedes recoger solo los registros de los últimos dos días o de las últimas tres horas. De forma predeterminada, diagnose snapshot recoge todos los registros.

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

Sustituye <var>DURATION</var> por un valor de hora, como 120m o 48h.

Ten en cuenta lo siguiente:

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

Realizar una prueba de funcionamiento de una instantánea

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

Para hacer una prueba de funcionamiento en tu clúster de administrador, introduce el siguiente comando:

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

Para hacer una prueba de funcionamiento en un clúster de usuario, introduce el siguiente comando:

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

Usar una configuración de captura

Si estos dos casos (--scenario system o all) no se ajustan a tus necesidades, puedes crear una instantánea personalizada. Para ello, debes proporcionar un archivo de configuración de instantánea mediante la marca --snapshot-config:

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

Generar una configuración de captura

Para generar una configuración de instantánea de un escenario concreto, debes incluir las marcas --scenario y --dry-run. Por ejemplo, para ver la configuración de la instantánea del escenario predeterminado (system) de un clúster de usuario, introduce el siguiente comando:

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

La salida 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

En el resultado se muestra la siguiente información:

  • numOfParallelThreads: número de hilos paralelos que se usan para hacer capturas.

  • excludeWords: lista de palabras que se excluirán de la instantánea (no distingue entre mayúsculas y minúsculas). Las líneas que contengan estas palabras se eliminarán de los resultados de la captura. "password" siempre se excluye, tanto si la especificas como si no.

  • kubectlCommands: lista de comandos kubectl que se van a ejecutar. Los resultados se guardan. Los comandos se ejecutan en los espacios de nombres correspondientes. En el caso de los comandos de kubectl logs, todos los pods y contenedores de los espacios de nombres correspondientes se añaden automáticamente. Se admiten expresiones regulares para especificar espacios de nombres. Si no especifica un espacio de nombres, se presupone el espacio de nombres default.

  • nodeCommands: lista de comandos que se ejecutarán en los nodos correspondientes. Los resultados se guardan. Si no se especifican nodos, se tendrán en cuenta todos los nodos del clúster de destino.

  • nodeFiles: lista de archivos que se van a recoger de los nodos correspondientes. Los archivos se han guardado. Si no se especifican nodos, se tienen en cuenta todos los nodos del clúster de destino.

Siguientes pasos

Si necesitas más ayuda, ponte en contacto con el servicio de atención al cliente de Cloud.

También puedes consultar la sección Obtener asistencia para obtener más información sobre los recursos de asistencia, incluidos los siguientes: