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.
Información sobre el entorno de ejecución de VM en Google Distributed Cloud y cualquier VM y recursos relacionados con VM que se ejecutan en tu clúster. Para obtener más información sobre lo que se recopila de forma predeterminada y cómo crear instantáneas específicas de VM, consulta Información de VM en instantáneas en este documento.
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 el archivo de 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:
Configura la API y la cuenta de servicio:
- Habilita la API de Cloud Storage dentro de tu proyecto de Google Cloud.
- Otorga una función
storage.admin
a la cuenta de servicio para que la cuenta de servicio pueda subir datos a Cloud Storage. - Descarga la clave JSON para la cuenta de servicio.
Consulta Habilita servicios de Google y cuentas de servicio para obtener más detalles.
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
: 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 de acceso al archivo kubeconfig esbmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
de forma predeterminada. Sin embargo, si especificaste tu lugar de trabajo con la marcaWORKSPACE_DIR
, la ruta esWORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
).BUCKET_NAME
: el nombre de un bucket de Cloud Storage que te pertenece.SERVICE_ACCOUNT_KEY_FILE
: 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 entornoGOOGLE_APPLICATION_CREDENTIALS
.
Crea una cuenta de servicio y comparte el acceso con la Atención al cliente de Cloud como se describe en Permite que la Asistencia de Google Cloud vea la instantánea de clúster que subiste.
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 de acceso al archivo kubeconfig esbmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
de forma predeterminada. Sin embargo, si especificaste tu lugar de trabajo con la marcaWORKSPACE_DIR
, la ruta esWORKSPACE_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
Situaciones de instantáneas
El comando bmctl check cluster --snapshot
admite dos situaciones. Para especificar una situación, usa la marca --scenario
. En la siguiente lista, se muestran los valores posibles:
system
: Recopila una instantánea de los componentes del sistema, incluidos sus registros.all
: Recopila una instantánea de todos los pods, incluidos sus registros.
Puedes usar cada una de las dos situaciones con un clúster de administrador o un clúster de usuario. Por ejemplo, para crear una instantánea del clúster de administrador mediante la situación system
, ejecuta lo siguiente:
bmctl check cluster --snapshot --snapshot-scenario system \ --cluster=ADMIN_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Para crear una instantánea de un clúster de usuario mediante la situación all
, ejecuta lo siguiente:
bmctl check cluster --snapshot --snapshot-scenario all \ --cluster=USER_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Realiza una ejecución de prueba de una instantánea
Cuando usas la marca --snapshot-dry-run
, el comando no crea la instantánea.
En cambio, muestra qué acciones realizaría el comando de la instantánea y genera un archivo de configuración de la instantánea. Para obtener información sobre el archivo de configuración de instantáneas, consulta Cómo crear una instantánea personalizada.
Para realizar una instantánea de prueba de validación en el clúster de administrador, ingresa el siguiente comando:
bmctl check cluster --snapshot --snapshot-dry-run \ --cluster=ADMIN_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Para realizar una instantánea de prueba de validación en un clúster de usuario, ingresa el siguiente comando:
bmctl check cluster --snapshot --snapshot-dry-run \ --cluster=USER_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Obtener registros de un período en particular
Puedes usar la marca --since
para recuperar registros de un período que te interese en particular. De esta manera, puedes crear instantáneas de registro más pequeñas y enfocadas en los últimos segundos, minutos o horas.
Por ejemplo, con el siguiente comando de bmctl
, se crea una instantánea del registro que ocurrió en las últimas tres horas:
bmctl check cluster --snapshot --since=3h \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Especifica un directorio en el que se guardará la instantánea de forma temporal
Puedes usar la marca --snapshot-temp-output-dir
para especificar un directorio en el que se guarde la instantánea de forma temporal:
bmctl check cluster --snapshot --snapshot-temp-output-dir=TEMP_OUTPUT_DIR \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Si no especificas un directorio, la instantánea se guarda en el directorio /tmp
de forma temporal. La opción --snapshot-temp-output-dir
es una buena idea cuando, por ejemplo, el espacio está limitado en el directorio /tmp
predeterminado.
Suprime el registro de la consola
Puedes usar la marca --quiet
para evitar que los mensajes de registro aparezcan en la consola durante la ejecución de una instantánea. En su lugar, los registros de la consola se guardan en el archivo
“bmctl_diagnose_Snapshot.log” como parte de la instantánea.
Ejecuta el siguiente comando para evitar que los mensajes de registro aparezcan en la consola:
bmctl check cluster --snapshot --quiet \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Instantáneas personalizadas
Te recomendamos crear una instantánea personalizada de un clúster por los siguientes motivos:
- Para incluir más información sobre tu clúster de lo que se proporciona en la instantánea predeterminada.
- Para excluir parte de la información que está en la instantánea predeterminada.
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:
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
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 deuptime
sobre el nodo10.200.0.3
. Esta información no aparece en una instantánea estándar.... nodeCommands: - nodes: - 10.200.0.3 commands: - uptime ...
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 comandobmctl
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
ynodeFiles
- 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 establezcasnumOfParallelThreads
en10
, 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. UsaexcludeWords
para reducir los riesgos de seguridad cuando compartas la instantánea. Por ejemplo, excluyepassword
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:
Recupera un archivo de configuración de instantáneas del clúster de tus archivos.
Modifica el archivo de configuración de instantáneas para que la instantánea contenga la información que deseas.
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
Cuando no se pueda acceder al clúster de administrador, puedes tomar una instantánea personalizada del clúster mediante la ejecución del siguiente comando:
bmctl check cluster --snapshot --cluster CLUSTER_NAME
--node-ssh-key SSH_KEY_FILE
--nodes NODE_1_IP_ADDRESS, NODE_2_IP_ADDRESS, ...
En el comando, reemplaza las siguientes entradas por información específica del entorno de tu clúster:
CLUSTER_NAME
: el nombre del clúster del que deseas tomar una instantánea.SSH_KEY_FILE
: Es la ruta de acceso al archivo de llave SSH del nodo.NODE_x_IP_ADDRESS
: la dirección IP del nodo del clúster sobre el que deseas obtener información.
Como alternativa, puedes enumerar las direcciones IP del nodo en líneas separadas:
bmctl check cluster
--snapshot --cluster CLUSTER_NAME \
--node-ssh-key SSH_KEY_FILE \
--nodes NODE_1_IP_ADDRESS \
--nodes NODE_2_IP_ADDRESS
...
Información de la VM en instantáneas
Si usas el entorno de ejecución de VM en Google Distributed Cloud para crear y administrar máquinas virtuales (VMs) en GKE en Bare Metal, puedes recopilar información de diagnóstico relevante en las instantáneas. Las instantáneas son un recurso fundamental para diagnosticar y solucionar problemas con tus VMs.
Qué se recopila de forma predeterminada
Cuando creas una instantánea predeterminada, esta contiene la información sobre el entorno de ejecución de VM en Google Distributed Cloud y los recursos relacionados.
El entorno de ejecución de VM en Google Distributed Cloud se agrupa con GKE en Bare Metal y el recurso personalizado VMRuntime
está disponible en los clústeres que ejecutan cargas de trabajo.
Incluso si no habilitaste el entorno de ejecución de VM en Google Distributed Cloud, la instantánea aún contiene la descripción YAML del recurso personalizado VMRuntime
.
Si habilitaste el entorno de ejecución de VM en Google Distributed Cloud, las instantáneas contienen información sobre el estado y la configuración de los recursos relacionados con la VM (cuando los objetos están presentes) en el clúster. Los recursos relacionados con las VMs incluyen objetos de Kubernetes, como Pods, Deployments, DaemonSets y ConfigMaps.
Objetos en el espacio de nombres vm-system
La información de estado y configuración de los siguientes objetos se encuentra en kubectlCommands/vm-system
en la instantánea generada:
KubeVirt
VirtualMachineType
VMHighAvailabilityPolicy
Objetos en otros espacios de nombres
Cuando creas una VM (VirtualMachine
), puedes especificar el espacio de nombres. Si no especificas un espacio de nombres, la VM obtiene el espacio de nombres default
. Los otros objetos de esta sección, como VirtualMachineInstance
, están vinculados al espacio de nombres de la VM correspondiente.
La información de estado y configuración de los siguientes objetos se encuentra en kubectlCommands/VM_NAMESPACE
en la instantánea generada. Si no configuraste un espacio de nombres específico para tu VM, la información se encuentra en kubectlCommands/default
:
VirtualMachine
VirtualMachineInstance
VirtualMachineDisk
GuestEnvironmentData
VirtualMachineAccessRequest
VirtualMachinePasswordResetRequest
Objetos sin espacios de nombres
A los siguientes objetos no se les asigna un espacio de nombres, por lo que su información correspondiente se encuentra directamente en kubectlCommands
en la instantánea generada:
VMRuntime
DataVolume
CDI
GPUAllocation
Usa un archivo de configuración de instantánea para capturar solo los detalles de la VM
Si diagnosticas problemas específicos de las VMs, puedes usar un archivo de configuración de instantánea para restringir la información recopilada solo a los detalles relacionados con las VMs y adaptar la información de VM recopilada.
En el siguiente archivo de configuración de instantánea, se ilustra cómo puedes construir una instantánea específica de la VM. Puedes incluir comandos adicionales a fin de recopilar más información para la instantánea.
---
kubectlCommands:
- commands:
- kubectl get vm -o wide
- kubectl get vmi -o wide
- kubectl get gvm -o wide
- kubectl get vm -o yaml
- kubectl get vmi -o yaml
- kubectl get gvm -o yaml
- kubectl describe vm
- kubectl describe vmi
- kubectl describe gvm
namespaces:
- .*
- commands:
- kubectl get virtualmachinetype -o wide
- kubectl get virtualmachinedisk -o wide
- kubectl get virtualmachinetype -o yaml
- kubectl get virtualmachinedisk -o yaml
- kubectl describe virtualmachinetype
- kubectl describe virtualmachinedisk
namespaces:
- vm-system
Para obtener más información sobre el uso de archivos de configuración de instantánea, consulta Instantáneas personalizadas en este documento.