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 no está habilitado el clúster avanzado.
El clúster avanzado no está habilitado cuando enableAdvancedClusters
tiene el valor false
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 está habilitado, consulta Crear copias de seguridad cuando el clúster avanzado esté habilitado.
La herramienta gkectl
tiene dos comandos para solucionar problemas con los clústeres:
gkectl diagnose snapshot
y gkectl diagnose cluster
. Los comandos funcionan tanto con clústeres de administradores como de usuarios.
Para obtener más información sobre cómo usar el comando gkectl diagnose cluster
para diagnosticar problemas de clústeres, consulta Diagnosticar problemas de clústeres.
gkectl diagnose snapshot
Este comando comprime el estado, las configuraciones y los registros de un clúster en un archivo tar. Cuando ejecutas gkectl diagnose snapshot
, el comando ejecuta automáticamente gkectl diagnose cluster
como parte del proceso y los archivos de salida se colocan en una nueva carpeta de la instantánea llamada /diagnose-report
.
Instantánea predeterminada
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.
Información de vSphere, incluidos los objetos de máquina virtual y sus eventos basados en el grupo de recursos. También recoge información sobre los objetos Datacenter, Cluster, Network y Datastore asociados a las máquinas virtuales.
Información del balanceador de carga F5 BIG-IP, como el servidor virtual, la dirección virtual, el pool, el nodo y el monitor.
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.
Información sobre la caducidad del certificado de Kubernetes del clúster de administrador en el archivo de instantánea
/nodes/<admin_master_node_name>/sudo_kubeadm_certs_check-expiration
.Un archivo de índice HTML de todos los archivos de la captura.
Opcionalmente, el archivo de configuración del clúster de administrador que se usa para instalar y actualizar el clúster con la marca
--config
.
Las credenciales, incluidas las de vSphere y F5, se eliminan antes de crear el archivo tar.
Captura ligera
En Google Distributed Cloud versión 1.29 y posteriores, hay disponible una versión ligera de gkectl diagnose snapshot
para los clústeres de administradores y de usuarios.
La instantánea ligera acelera el proceso de creación de instantáneas porque captura menos información sobre el clúster. Cuando añades --scenario=lite
al comando, solo se incluye la siguiente información en la instantánea:
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
Registros del comando
gkectl diagnose snapshot
Capturar el estado del clúster
Si el comando gkectl diagnose cluster
encuentra errores, debes registrar el estado del clúster y proporcionar la información al equipo de Atención al Cliente de Cloud. Puedes obtener esta información con el comando gkectl diagnose snapshot
.
gkectl diagnose snapshot
tiene una marca opcional para --config
. Además de recoger información sobre el clúster, esta marca recoge el archivo de configuración que se ha usado para crear o actualizar el clúster.
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 --config
El parámetro --config
es opcional:
Si hay un problema con una dirección IP virtual (VIP) en el clúster de destino, usa la marca --config
para proporcionar el archivo de configuración del clúster de administrador y obtener más información de depuración.
En la versión 1.29 y posteriores, puede incluir --scenario=lite
si no necesita toda la información de la captura predeterminada.
La salida incluye una lista de archivos y el nombre de un archivo tar, como se muestra en el siguiente ejemplo:
Taking snapshot of admin cluster "[ADMIN_CLUSTER_NAME]"...
Using default snapshot configuration...
Setting up "[ADMIN_CLUSTER_NAME]" ssh key file...DONE
Taking snapshots...
commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
...
nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [TAR_FILE_NAME].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:
Taking snapshot of user cluster "[USER_CLUSTER_NAME]"...
Using default snapshot configuration...
Setting up "[USER_CLUSTER_NAME]" ssh key file...DONE
commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
...
commands/kubectl_get_pods_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
...
nodes/[USER_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[USER_CLUSTER_NODE]/files/var/log/startup.log
...
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.lite
(1.29 y versiones posteriores): recoge una instantánea con solo recursos de Kubernetes ygkectl
registros. Se excluyen todos los demás registros, como los registros de contenedores y los registros del kernel de nodos.
Los escenarios de creación de instantáneas disponibles varían en función de la versión de Google Distributed Cloud.
Versiones anteriores a la 1.13:
system
,system-with-logs
,all
yall-with-logs
.Versiones 1.13-1.28:
system
yall
. El escenariosystem
es el mismo que el escenariosystem-with-logs
anterior. El caso deall
es el mismo que el deall-with-logs
.Versiones 1.29 y posteriores:
system
,all
ylite
.
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
Para crear una instantánea de un clúster de usuarios con el escenario lite
, sigue estos pasos:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=lite
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 registroskubectl
yjournalctl
. - 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:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
- kubectl get clusters -o wide
- kubectl get machines -o wide
- kubectl get clusters -o yaml
- kubectl get machines -o yaml
- kubectl describe clusters
- kubectl describe machines
namespaces:
- default
- commands:
- kubectl version
- kubectl cluster-info
- kubectl get nodes -o wide
- kubectl get nodes -o yaml
- kubectl describe nodes
namespaces: []
- commands:
- kubectl get pods -o wide
- kubectl get deployments -o wide
- kubectl get daemonsets -o wide
- kubectl get statefulsets -o wide
- kubectl get replicasets -o wide
- kubectl get services -o wide
- kubectl get jobs -o wide
- kubectl get cronjobs -o wide
- kubectl get endpoints -o wide
- kubectl get configmaps -o wide
- kubectl get pods -o yaml
- kubectl get deployments -o yaml
- kubectl get daemonsets -o yaml
- kubectl get statefulsets -o yaml
- kubectl get replicasets -o yaml
- kubectl get services -o yaml
- kubectl get jobs -o yaml
- kubectl get cronjobs -o yaml
- kubectl get endpoints -o yaml
- kubectl get configmaps -o yaml
- kubectl describe pods
- kubectl describe deployments
- kubectl describe daemonsets
- kubectl describe statefulsets
- kubectl describe replicasets
- kubectl describe services
- kubectl describe jobs
- kubectl describe cronjobs
- kubectl describe endpoints
- kubectl describe configmaps
namespaces:
- kube-system
- gke-system
- gke-connect.*
prometheusRequests: []
nodeCommands:
- nodes: []
commands:
- uptime
- df --all --inodes
- ip addr
- sudo iptables-save --counters
- mount
- ip route list table all
- top -bn1
- sudo docker ps -a
- ps -edF
- ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
- sudo conntrack --count
nodeFiles:
- nodes: []
files:
- /proc/sys/fs/file-nr
- /proc/sys/net/nf_conntrack_max
seesawCommands: []
seesawFiles: []
nodeCollectors:
- nodes: []
f5:
enabled: true
vCenter:
enabled: 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 dekubectl 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 nombresdefault
.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.seesawCommands
: lista de comandos que se deben ejecutar para recoger información del balanceador de carga de Seesaw. Los resultados se guardan si el clúster usa el balanceador de carga Seesaw.seesawFiles
: lista de archivos que se van a recoger para el balanceador de carga de Seesaw.nodeCollectors
: un recopilador que se ejecuta en los nodos de Cilium para recoger información de eBPF.f5
: una marca para habilitar la recogida de información relacionada con el balanceador de carga F5 BIG-IP.vCenter
: una marca para habilitar la recogida de información relacionada con vCenter.prometheusRequests
: lista de solicitudes de Prometheus. Los resultados se guardan.
Subir snapshots a un segmento de Cloud Storage
Para facilitar el registro, el análisis y el almacenamiento, puedes subir todas las instantáneas de un clúster específico a un segmento de Cloud Storage. Esto es especialmente útil si necesitas ayuda de Cloud Customer Care.
Antes de subir instantáneas a un segmento de Cloud Storage, revisa y completa los siguientes requisitos iniciales:
Habilita
storage.googleapis.com
en el proyecto del host de la flota. Aunque puedes usar otro proyecto, te recomendamos que uses el proyecto host de la flota.gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com
Asigna el rol
roles/storage.admin
a la cuenta de servicio en su proyecto principal y proporciona el archivo de clave JSON de la cuenta de servicio mediante el parámetro--service-account-key-file
. Puedes usar cualquier cuenta de servicio, pero te recomendamos que uses la cuenta de servicio de registro de conexión. Consulta Cuentas de servicio para obtener más información.gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT" \ --role "roles/storage.admin"
Sustituye
CONNECT_REGISTER_SERVICE_ACCOUNT
por la cuenta de servicio de registro de conexión.
Una vez que cumpla estos requisitos, podrá subir la instantánea al segmento de Cloud Storage:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name CLUSTER_NAME \ --upload \ --share-with GOOGLE_SUPPORT_SERVICE_ACCOUNT
La marca --share-with
puede aceptar una lista de nombres de cuentas de servicio. Sustituye GOOGLE_SUPPORT_SERVICE_ACCOUNT
por la cuenta de servicio de Cloud Customer Care que te haya proporcionado este servicio, así como por cualquier otra cuenta de servicio que te haya proporcionado.
Cuando usas la marca --upload
, el comando busca en tu proyecto un segmento de almacenamiento cuyo nombre empiece por "anthos-snapshot-
". Si existe un segmento de este tipo, el comando sube la instantánea a ese segmento. Si el comando no encuentra ningún contenedor con un nombre coincidente, crea uno con el nombre anthos-snapshot-UUID
, donde UUID
es un identificador único universal de 32 dígitos.
Si usas la marca --share-with
, no tienes que compartir manualmente el acceso al contenedor con el equipo de Asistencia de Google Cloud.
El siguiente ejemplo de resultado se muestra cuando subes una instantánea a un segmento de Cloud Storage:
Using "system" snapshot configuration...
Taking snapshot of user cluster <var>CLUSTER_NAME</var>...
Setting up <var>CLUSTER_NAME</var> ssh key...DONE
Using the gke-connect register service account key...
Setting up Google Cloud Storage bucket for uploading the snapshot...DONE
Taking snapshots in 10 thread(s)...
...
Snapshot succeeded.
Snapshots saved in "<var>SNAPSHOT_FILE_PATH</var>".
Uploading snapshot to Google Cloud Storage...... DONE
Uploaded the snapshot successfully to gs://anthos-snapshot-a4b17874-7979-4b6a-a76d-e49446290282/<var>xSNAPSHOT_FILE_NAME</var>.
Shared successfully with service accounts:
<var>GOOGLE_SUPPORT_SERVICE_ACCOUNT</var>
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:
- Requisitos para abrir un caso de asistencia.
- Herramientas para ayudarte a solucionar problemas, como registros y métricas.
- Componentes, versiones y funciones compatibles de Google Distributed Cloud para VMware (solo software).