Crea instantáneas para ayudar a diagnosticar problemas de clústeres

Cuando tienes un problema con uno de tus clústeres, puedes obtener ayuda en Atención al cliente de Cloud. Atención al cliente puede pedirte que tomes una “instantánea” del clúster, que puede usar para diagnosticar el problema. Una instantánea captura los archivos de configuración del clúster y del nodo, y empaqueta esa información en un solo archivo tar.

En este documento, se describe cómo crear instantáneas predeterminadas o instantáneas más personalizadas de un clúster. También se explica cómo crear instantáneas cuando un clúster experimenta errores particulares.

Instantáneas predeterminadas

En las siguientes secciones, se describe el contenido de una instantánea estándar y cómo crear una. Para obtener información sobre las instantáneas personalizadas, consulta la sección Instantáneas personalizadas.

¿Qué información contiene una instantánea predeterminada?

La instantánea de un clúster es un archivo tar de archivos de configuración y registros sobre el clúster. En específico, la configuración predeterminada del comando 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

  • 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 del comando bmctl check cluster --snapshot

La información de credenciales de un clúster no se incluye en la instantánea predeterminada. Si Atención al cliente de Cloud solicita esa información, consulta Recupera información del clúster.

Para obtener una lista completa de la información recopilada cuando ejecutas el comando de instantáneas, consulta el archivo de configuración que se muestra en la sección El archivo de configuración en detalle. En este archivo de configuración, se muestran los comandos que se ejecutan cuando se toma una instantánea predeterminada.

Cómo crear una instantánea predeterminada

Con el comando bmctl check cluster, se toma una instantánea de un clúster. Puedes usar este comando para realizar cualquiera de las siguientes acciones: * crear una instantánea y subirla de forma automática a un bucket de Cloud Storage * crear una instantánea de un clúster y guardar la instantánea en la máquina local en la que ejecutas el comando.

Método 1: crea una instantánea predeterminada y súbela automáticamente al bucket de Cloud Storage

Para crear y subir una instantánea a un bucket de Cloud Storage, haz lo siguiente:

  1. Configura la API y la cuenta de servicio:

    1. Habilita la API de Cloud Storage dentro de tu proyecto de Google Cloud.
    2. Otorga una función storage.admin a la cuenta de servicio para que la cuenta de servicio pueda subir datos a Cloud Storage.
    3. Descarga la clave JSON para la cuenta de servicio.

    Consulta Habilita servicios de Google y cuentas de servicio para obtener más detalles.

  2. Ejecuta el siguiente comando de bmctl para crear y subir de forma automática una instantánea a un bucket de Cloud Storage:

    bmctl check cluster --snapshot --cluster=CLUSTER_NAME
    --kubeconfig=KUBECONFIG_PATH
    --upload-to BUCKET_NAME
    [--service-account-key-file SERVICE_ACCOUNT_KEY_FILE]
    

    En el comando, reemplaza las siguientes entradas por información específica del entorno de tu clúster:

    • CLUSTER_NAME: Es el nombre del clúster del que deseas tomar una instantánea.
    • KUBECONFIG_PATH: Es la ruta al archivo kubeconfig del clúster de administrador (la ruta al archivo kubeconfig suele ser bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. Sin embargo, si especificaste tu lugar de trabajo con la marca WORKSPACE_DIR, la ruta es WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig).
    • BUCKET_NAME: Es el nombre de un bucket de Cloud Storage que te pertenece.
    • SERVICE_ACCOUNT_KEY_FILE_PATH: si no proporcionas la marca --service-account-key-file, bmctl intenta obtener la ruta al archivo de claves de la cuenta de servicio desde la variable de entorno GOOGLE_APPLICATION_CREDENTIALS.
  3. Otorga a Atención al cliente de Cloud acceso de lectura al bucket que contiene la instantánea:

    gsutil iam ch \
    serviceAccount:service-PROJECT_ID@anthos-support.iam.gserviceaccount.com:roles/storage.objectViewer \
    gs://BUCKET_NAME
    

Método no 2: Crea una instantánea predeterminada en una máquina local

Puedes capturar el estado de los clústeres creados con el siguiente comando .

bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
    --kubeconfig=KUBECONFIG_PATH

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es el nombre del clúster de destino.

  • KUBECONFIG_PATH: Es la ruta al archivo kubeconfig del clúster de administrador (la ruta al archivo kubeconfig suele ser bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. Sin embargo, si especificaste tu lugar de trabajo con la marca WORKSPACE_DIR, la ruta es WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig).

Este comando genera un archivo tar en tu máquina local. El nombre de este archivo tar tiene el formato snapshot-CLUSTER_NAME-TIMESTAMP.tar.gz, en el que TIMESTAMP indica la fecha y hora en que se creó el archivo. Este archivo tar incluye información de depuración relevante sobre los componentes y las máquinas del sistema de un clúster.

Cuando ejecutas este comando, se recopila información sobre los Pods de los siguientes espacios de nombres: gke-system, gke-connect, capi-system, capi-webhook-system, cert-manager y capi-kubeadm-bootstrap-system

Sin embargo, puedes ampliar el alcance de la información de diagnóstico recopilada mediante la marca --snapshot-scenario all. Esta marca aumenta el alcance de la instantánea de diagnóstico para incluir todos los Pods en un clúster:

bmctl check cluster --snapshot --snapshot-scenario all \
--cluster=CLUSTER_NAME \
--kubeconfig=KUBECONFIG_PATH

Instantáneas personalizadas

Te recomendamos crear una instantánea personalizada de un clúster por los siguientes motivos:

Cómo crear una instantánea personalizada

Crear una instantánea personalizada requiere el uso de un archivo de configuración de instantáneas. En los siguientes pasos, se explica cómo crear el archivo de configuración, modificarlo y usarlo para crear una instantánea personalizada de un clúster:

  1. Crea un archivo de configuración de instantánea mediante la ejecución del siguiente comando en tu clúster y escribe el resultado en un archivo:

     bmctl check cluster
    --snapshot --snapshot-dry-run --cluster CLUSTER_NAME
    --kubeconfig KUBECONFIG_PATH
    
  2. Define el tipo de información que deseas que aparezca en tu instantánea personalizada. Para ello, modifica el archivo de configuración de instantáneas que creaste en el paso 1. Por ejemplo, si deseas que la instantánea contenga información adicional, como por cuánto tiempo se ejecutó un nodo en particular, agrega el comando uptime de Linux a la sección relevante del archivo de configuración. En el siguiente fragmento de un archivo de configuración, se muestra cómo hacer que el comando de la instantánea proporcione información de uptime sobre el nodo 10.200.0.3. Esta información no aparece en una instantánea estándar.

    ...
    nodeCommands:
    - nodes:
      - 10.200.0.3
      commands:
      - uptime
    ...
    
  3. Una vez que hayas modificado el archivo de configuración para definir qué tipo de instantánea deseas, crea la instantánea personalizada mediante la ejecución del siguiente comando:

     bmctl check cluster
    --snapshot --snapshot-config SNAPSHOT_CONFIG_FILE --cluster
    CLUSTER_NAME --kubeconfig KUBECONFIG_PATH
    

    La marca --snapshot-config dirige al comando bmctl para que use el contenido del archivo de configuración de instantáneas a fin de definir qué información aparece en la instantánea.

El archivo de configuración en detalle

En el siguiente archivo de configuración de instantáneas de muestra, se muestran los comandos y archivos estándar que se usan para crear una instantánea, pero puedes agregar más comandos y archivos cuando se necesita información de diagnóstico adicional:

numOfParallelThreads: 10
excludeWords:
- password
nodeCommands:
- nodes:
  - 10.200.0.3
  - 10.200.0.4
  commands:
  - uptime
  - df --all --inodes
  - ip addr
  - ip neigh
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1 || true
  - docker info || true
  - docker ps -a || true
  - crictl ps -a || true
  - docker ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
    sudo docker logs || true
  - docker ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
    xargs sudo docker logs || true
  - crictl ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
    sudo crictl logs || true
  - crictl ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
    xargs sudo crictl logs || true
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - conntrack --count
  - dmesg
  - systemctl status -l docker || true
  - journalctl --utc -u docker
  - journalctl --utc -u docker-monitor.service
  - systemctl status -l kubelet
  - journalctl --utc -u kubelet
  - journalctl --utc -u kubelet-monitor.service
  - journalctl --utc --boot --dmesg
  - journalctl --utc -u node-problem-detector
  - systemctl status -l containerd || true
  - journalctl --utc -u containerd
  - systemctl status -l docker.haproxy || true
  - journalctl --utc -u docker.haproxy
  - systemctl status -l docker.keepalived || true
  - journalctl --utc -u docker.keepalived
  - systemctl status -l container.haproxy || true
  - journalctl --utc -u container.haproxy
  - systemctl status -l container.keepalived || true
  - journalctl --utc -u container.keepalived
nodeFiles:
- nodes:
  - 10.200.0.3
  - 10.200.0.4
  files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
  - /proc/sys/net/ipv4/conf/all/rp_filter
  - /lib/systemd/system/kubelet.service
  - /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  - /lib/systemd/system/docker.service || true
  - /etc/systemd/system/containerd.service || true
  - /etc/docker/daemon.json || true
  - /etc/containerd/config.toml || true
  - /etc/systemd/system/container.keepalived.service || true
  - /etc/systemd/system/container.haproxy.service || true
  - /etc/systemd/system/docker.keepalived.service || true
  - /etc/systemd/system/docker.haproxy.service || true
nodeSSHKey: ~/.ssh/id_rsa # path to your ssh key file

Es probable que las siguientes entradas en tu archivo de configuración difieran de las que aparecen en el archivo de configuración de muestra anterior:

  • Las direcciones IP de los nodos en las secciones nodeCommands y nodeFiles
  • La ruta de acceso al nodeSSHKey del clúster

Campos en el archivo de configuración

Un archivo de configuración de instantáneas tiene el formato YAML. El archivo de configuración incluye los siguientes campos:

  • numOfParallelThreads: La rutina de instantánea suele ejecutar varios comandos. Contar con varios subprocesos paralelos ayuda a que la rutina se ejecute más rápido. Te recomendamos que establezcas numOfParallelThreads en 10, como se muestra en el archivo de configuración de muestra anterior. Si las instantáneas tardan demasiado, aumenta este valor.

  • excludeWords: La instantánea contiene una gran cantidad de datos para los nodos del clúster. Usa excludeWords para reducir los riesgos de seguridad cuando compartas la instantánea. Por ejemplo, excluye password para que no se puedan identificar las strings de contraseña correspondientes.

  • nodeCommands: En esta sección, se especifica la siguiente información:

    • nodes: Una lista de direcciones IP para los nodos del clúster del que deseas recopilar información. Para crear una instantánea cuando no se puede acceder al clúster de administrador, especifica al menos una dirección IP de nodo.

    • commands: Una lista de comandos (y argumentos) que se ejecutarán en cada nodo. El resultado de cada comando se incluye en la instantánea.

  • nodeFiles: En esta sección, se especifica la siguiente información:

    • nodes: Es una lista de direcciones IP de los nodos del clúster del que deseas recopilar archivos. Para crear una instantánea cuando no se puede acceder al clúster de administrador, especifica al menos una dirección IP de nodo.

    • files: Una lista de los archivos que se recuperarán de cada nodo. Cuando se encuentran los archivos especificados en un nodo, se incluyen en la instantánea.

  • nodeSSHKey: Es la ruta de acceso a tu archivo de claves SSH. Cuando no se puede acceder al clúster de administrador, este campo es obligatorio.

Crea instantáneas cuando experimentas errores específicos

Cómo crear una instantánea predeterminada durante las instalaciones o actualizaciones detenidas

Cuando se instalan o actualizan clústeres de administrador, híbridos o independientes, a veces, bmctl puede detenerse en puntos en los que se pueden ver los siguientes resultados:

  • Espera a que el clúster kubeconfig esté listo
  • Espera a que el clúster esté listo
  • Espera a que los grupos de nodos estén listos
  • Espera a que se complete la actualización

Sin embargo, si tienes una instalación o actualización detenida, puedes tomar una instantánea de un clúster si usas el clúster de arranque, mediante la ejecución del siguiente comando:

bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
    --kubeconfig=WORKSPACE_DIR/.kindkubeconfig

Cómo crear una instantánea personalizada durante las instalaciones o actualizaciones detenidas

En los siguientes pasos, se muestra cómo crear una instantánea personalizada de un clúster cuando se detiene una instalación o actualización:

  1. Recupera de tus archivos un archivo de configuración de instantáneas del clúster.

  2. Modifica el archivo de configuración de instantáneas para que la instantánea contenga la información que deseas.

  3. Ejecuta el siguiente comando para crear la instantánea personalizada:

    bmctl check cluster --snapshot
    --snapshot-config=SNAPSHOT_CONFIG_FILE
    --cluster=CLUSTER_NAME
    --kubeconfig=WORKSPACE_DIR/.kindkubeconfig
    

Cómo crear una instantánea personalizada cuando no se pueda acceder al clúster de administrador

Si tu clúster produce un error que indica que el clúster de administrador es inaccesible, no puedes tomar una instantánea predeterminada de un clúster. Esto se debe a que el comando bmctl predeterminado intenta, entre otras acciones, recuperar información del clúster de administrador. Cuando el comando predeterminado intenta recuperar información de un clúster de administrador inaccesible, el comando de la instantánea fallará.

Por lo tanto, cuando no se pueda acceder al clúster de administrador, debes tomar una instantánea personalizada del clúster en lugar de una instantánea predeterminada. De esta manera, puedes crear una instantánea personalizada que no solicite información de un clúster de administrador defectuoso.

En los siguientes pasos, se muestra cómo crear una instantánea personalizada de un clúster cuando no se puede acceder al clúster de administrador:

  1. Recupera de tus archivos un archivo de configuración de instantáneas del clúster.

  2. En la sección de nodos, enumera las direcciones IP de los nodos sobre los que quieres obtener información, pero asegúrate de excluir la dirección IP del nodo del clúster de administrador.

  3. Ejecuta el siguiente comando para crear la instantánea personalizada:

    bmctl check cluster
    --snapshot --snapshot-config=SNAPSHOT_CONFIG_FILE
    --cluster=CLUSTER_NAME
    --kubeconfig=KUBECONFIG_PATH
    

Recopila registros para problemas de Ingress o Anthos Service Mesh

Las instantáneas bmctl no contienen información para solucionar problemas de entrada o de Anthos Service Mesh. Si deseas obtener instrucciones para recopilar los registros de diagnóstico relevantes, consulta Recopila registros de Anthos Service Mesh en la documentación de Anthos Service Mesh.