Estás viendo la documentación de una versión anterior de GKE On-Prem. Consulta la documentación más reciente.

Diagnostica problemas de clústeres

En esta página, se explica cómo usar la herramienta de la interfaz de línea de comandos (CLI) de gkectl para diagnosticar problemas en tus clústeres de GKE On-Prem.

Descripción general

La herramienta de gkectl tiene dos comandos para solucionar problemas con clústeres: gkectl diagnose cluster y gkectl diagnose snapshot. Los comandos funcionan con clústeres de administrador y de usuario.

gkectl diagnose cluster

Realiza verificaciones de estado en el clúster de GKE On-Prem e informa los errores. Ejecuta verificaciones de estado en los siguientes componentes:

  • Objetos de clúster
  • Objetos de máquina y los nodos de clústeres correspondientes
  • Pods en los espacios de nombres de kube-system y gke-system
  • Plano de control de usuario si el clúster de destino es un clúster de usuario
  • Volúmenes persistentes de vSphere en el clúster

gkectl diagnose snapshot

Comprime el estado, la configuración y los registros de un clúster en un archivo comprimido. 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
  • El estado del plano de control del usuario si el clúster de destino es un clúster de usuario (el plano de control del clúster de usuario se ejecuta en el clúster de administrador)
  • 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 de gkectl diagnose snapshot
  • De manera opcional, el archivo de configuración de GKE On-Prem que se usa para instalar y actualizar clústeres

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

Diagnostica clústeres

Puedes ejecutar gke diagnose cluster para detectar problemas comunes en el clúster.

Diagnostica un clúster de administrador

Puedes diagnosticar un clúster de administrador si pasas su nombre o si solo pasas su kubeconfig.

Usa el kubeconfig del clúster de administrador

Pasar el kubeconfig del clúster de administrador hace que gkectl elija de forma automática el clúster de administrador:

gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG]

Usa el nombre del clúster de administrador

Para obtener el nombre del clúster de administrador, ejecuta el siguiente comando:

kubectl get cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG]

Luego, pasa el nombre del clúster de administrador a gkectl diagnose cluster:

gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--cluster-name=[ADMIN_CLUSTER_NAME]

Si el clúster de administrador funciona de forma correcta, gkectl diagnose cluster muestra el siguiente resultado:

Diagnosing admin cluster "[ADMIN_CLUSTER_NAME]"...
Checking cluster object...PASS
Checking machine objects...PASS
Checking kube-system pods...PASS
Checking storage...PASS
Cluster is healthy.

Diagnostica un clúster de usuario

Para diagnosticar un clúster, primero obtén el nombre del clúster de usuario:

kubectl get cluster --kubeconfig=[USER_CLUSTER_KUBECONFIG]

Luego, pasa el kubeconfig del clúster de administrador y el nombre del clúster de usuario:

gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
  --cluster-name=[USER_CLUSTER_NAME]

Si el clúster de usuario funciona de forma correcta, gkectl diagnose cluster muestra el siguiente resultado:

Diagnosing user cluster "[USER_CLUSTER_NAME]"...
Checking cluster object...PASS
Checking control plane pods...PASS
Checking machine objects...PASS
Checking other kube-system pods...PASS
Checking storage...PASS
Cluster is healthy.

Captura el estado del clúster

Si gkectl diagnose cluster encuentra errores, debes capturar el estado del clúster y proporcionar la información a Google. Puedes hacerlo mediante el comando gkectl diagnose snapshot.

gkectl diagnose snapshot tiene una marca opcional, --seed-config. Además de recopilar información sobre el clúster, esta marca recopila el archivo de configuración de GKE On-Prem que se usó para crear o actualizar el clúster.

Captura el estado del clúster de administrador

Para capturar el estado de un clúster de administrador, ejecuta el siguiente comando, en el que --seed-config es opcional:

gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] [--seed-config]

El resultado incluye una lista de archivos y el nombre de un archivo comprimido:

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 [TARBALL_FILE_NAME].tar.gz.

Para extraer el archivo comprimido en un directorio, ejecuta el siguiente comando:

tar -zxf [TARBALL_FILE_NAME] --directory [EXTRACTION_DIRECTORY_NAME]

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

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 llave 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 llaves SSH.

Luego, en el comando gkectl diagnose snapshot, configura --admin-ssh-key-path como la ruta de acceso del archivo de claves decodificado:

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 resultado incluye una lista de archivos y el nombre de un archivo comprimido:

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 instantáneas

El comando gkectl diagnose snapshot admite cuatro situaciones. Para especificar una situación, usa la marca --scenario. En la siguiente lista, se muestran los valores posibles:

  • system: (Predeterminado) recopila una instantánea para los espacios de nombres del sistema: kube-system y gke-system.

  • system-with-logs: Recopila una instantánea system con registros.

  • all: Recopila una instantánea de todos los espacios de nombres.

  • all-with-logs: Recopila una instantánea all con registros.

Puedes usar cada una de las cuatro situaciones con un clúster de administrador o un clúster de usuario, por lo que hay ocho permutaciones posibles. En los siguientes ejemplos, se muestran algunas de las posibilidades.

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

gkectl diagnose snapshot \
--kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--scenario=system

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

gkectl diagnose snapshot \
--kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--user-cluster=[USER_CLUSTER_NAME] \
--scenario=system-with-logs

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

Para crear una instantánea del clúster de administrador mediante la situación all-with-logs, ejecuta lo siguiente:

gkectl diagnose snapshot \
--kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--scenario=all-with-logs

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 una instantánea

Si los cuatro casos 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 una instantánea

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:

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
  • 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.
  • prometheusRequests: Lista de solicitudes de Prometheus. Los resultados se guardan.

Problemas conocidos

Versión 1.1.2-gke.0: la ruta se resuelve en varios centros de datos

Consulta las notas de la versión de GKE On-Prem.

Versiones 1.1.x: el volumen no está conectado a la máquina

Consulta las notas de la versión de GKE On-Prem.