En esta página, se explica cómo usar la herramienta de interfaz de línea de comandos (CLI) de gkectl
en clústeres de Anthos alojados en VMware (GKE On-Prem) para diagnosticar problemas en tus clústeres.
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 e informa errores. Ejecuta verificaciones de estado en los siguientes componentes:
- VCenter
- Credencial
- DRS
- Grupos antiafinidad
- Red
- Versión
- Centro de datos
- Datastore
- Grupo de recursos
- Carpeta
- Red
- Balanceador de cargas (F5, Seesaw, Manual)
- Clúster de usuario y grupos de nodos
- 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
- Indicadores de CPU virtual del clúster de usuario y administrador y contención de memoria
- Alarmas de uso de memoria y de uso de CPU host preconfigurada del clúster ESXi de administrador y de usuario.
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 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 VM y sus eventos basados en el grupo de recursos También objetos de centro de datos, clúster, red y Datastore asociados con las VM
Información del balanceador de cargas BIG-IP de F5, que incluye el servidor virtual, la dirección virtual, el grupo, los nodos y la supervisión
Registros del comando
gkectl diagnose snapshot
Un archivo de índice HTML para todos los archivos en la instantánea
De forma opcional, el archivo de configuración del clúster que se usa para instalar y actualizar el clúster
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.
gkectl diagnose cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
Resultado de ejemplo:
Failed to access the api server via LB VIP "...": ... Try to use the admin master IP instead of problematic VIP... Reading config with version "[CONFIG_VERSION]" Finding the admin master VM... Fetching the VMs in the resource pool "[RESOURCE_POOL_NAME]"... Found the "[ADMIN_MASTER_VM_NAME]" is the admin master VM. Diagnosing admin|user cluster "[TARGET_CLUSTER_NAME]"... ...
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 un resultado similar al siguiente:
Diagnosing admin cluster "[ADMIN_CLUSTER_NAME]" ... - Validation Category: Admin Cluster Vcenter Checking Credentials...SUCCESS Checking DRS enabled...SUCCESS Checking Hosts for AntiAffinityGroups...SUCCESS Checking VSphere CSI Driver...SUCCESS Checking Version...SUCCESS Checking Datacenter...SUCCESS Checking Datastore...SUCCESS Checking Resource pool...SUCCESS Checking Folder...SUCCESS Checking Network...SUCCESS Checking Node Pool Datastore...SUCCESS - Validation Category: Admin Cluster Checking Cluster Object...SUCCESS Checking Machine Deployment...SUCCESS Checking Machineset...SUCCESS Checking Machine Objects...SUCCESS Checking Control Plane Pods...SUCCESS Checking [NAMESPACES] Pods...SUCCESS Checking Storage...SUCCESS Checking Resource...SUCCESS 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 tu clúster de usuario funciona de forma correcta, gkectl diagnose cluster
muestra un resultado similar al siguiente:
I0314 01:57:44.232006 2134732 console.go:47] WARNING: SYLLOGI_FEATURE_GATES is deprecated, use GKE_ON_PREM_FEATURE_GATES to set the feature gate instead. WARNING: SYLLOGI_FEATURE_GATES is deprecated, use GKE_ON_PREM_FEATURE_GATES to set the feature gate instead. Preparing for the diagnose tool... Diagnosing the cluster...... DONE - Validation Category: User Cluster F5 BIG-IP Checking f5 (credentials, partition)...SUCCESS - Validation Category: User Cluster VCenter Checking Credentials...SUCCESS Checking DRS enabled...SUCCESS Checking Hosts for AntiAffinityGroups...SUCCESS Checking VSphere CSI Driver...SUCCESS Checking Version...SUCCESS Checking Datacenter...SUCCESS Checking Datastore...SUCCESS Checking Resource pool...SUCCESS Checking Folder...SUCCESS Checking Network...SUCCESS - Validation Category: User Cluster Checking user cluster and node pools...SUCCESS Checking cluster object...SUCCESS Checking machine deployment...SUCCESS Checking machineset...SUCCESS Checking machine objects...SUCCESS Checking control plane pods...SUCCESS Checking kube-system pods...SUCCESS Checking gke-system pods...SUCCESS Checking config-management-system pods...SUCCESS Checking storage...SUCCESS Checking resource...SUCCESS Checking virtual machine resource contention...SUCCESS Checking host resource contention...SUCCESS Cluster is healthy. Diagnose result is saved successfully in diagnose-user-cluster-20210314015803.json
Soluciona problemas de clústeres diagnosticados
Si tienes los siguientes problemas cuando ejecutas el comando gke diagnose cluster
, estas son algunas soluciones posibles.
Problema | Causas posibles | Solución |
---|---|---|
No se puede acceder al servidor de la API de Kubernetes, ya sea para el clúster de administrador o los clústeres de usuario. | Revisa los grafos de latencia de memoria OOB (listo para usar) del estado de la máquina virtual, que idealmente deben tener una latencia de memoria cercana a cero. La contención de memoria también puede aumentar la contención de la CPU, y los gráficos de preparación de la CPU pueden tener un aumento repentino, ya que habrá un intercambio involucrado. | Aumenta la memoria física. A fin de ver otras opciones, consulta las sugerencias para solucionar problemas de VMware. |
Se agota el tiempo de espera de la creación del grupo de nodos. | Latencia alta de lectura y escritura de VMDK. Verifica el estado de VM de OOB para la latencia de lectura y escritura del disco virtual. Según VMware, una latencia total superior a 20 ms indica un problema. | Consulta soluciones de VMware para problemas de rendimiento del disco. |
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, --config
. Además de recopilar información sobre el clúster, esta marca recopila el archivo de configuración de clústeres de Anthos alojados en VMware 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 --config
es opcional:
gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] [--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 clave 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 claves 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
ygke-system
.system-with-logs
: Recopila una instantáneasystem
con registros.all
: Recopila una instantánea de todos los espacios de nombres.all-with-logs
: Recopila una instantáneaall
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] \ --cluster-name=[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
Usa --log-since
para limitar una instantánea
En las situaciones system-with-logs
y all-with-logs
, puedes usar la marca --log-since
para limitar la recopilación de registros a un período reciente. Por ejemplo, puedes recopilar solo los registros de los últimos dos días o de las últimas tres horas. De forma predeterminada, diagnose snapshot
recopila todos los registros.
Para limitar el período de recopilación de registros, sigue estos pasos:
gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --cluster-name=[CLUSTER_NAME] \ --scenario=system-with-logs \ --log-since=[DURATION]
Reemplaza [DURATION] por un valor de tiempo como 120m
o 48h
.
Notas:
- La marca
--log-since
solo es compatible con los registroskubectl
yjournalctl
. - No se permiten marcas de comando como
--log-since
en la configuración de instantánea personalizada.
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 seesawCommands: [] seesawFiles: [] nodeCollectors: - nodes: [] f5: enabled: true vCenter: enabled: true
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 comandoskubectl 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 nombresdefault
.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.seesawCommands
: lista de comandos que se deben ejecutar para recopilar información del balanceador de cargas de Seesaw Los resultados se guardan si el clúster usa el balanceador de cargas de Seesaw.seesawFiles
: lista de archivos que se recopilarán para el balanceador de cargas de Seesaw.nodeCollectors
: un colector que se ejecuta para que los nodos de Cilium recopilen información de eBPF.f5
: una marca para habilitar la recopilación de información relacionada con el balanceador de cargas BIG-IP de F5.vCenter
: una marca para habilitar la recopilación de información relacionada con vCenterprometheusRequests
: 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 clústeres de Anthos alojados en VMware.
Versiones 1.1.x: El volumen no está conectado a la máquina
Consulta las notas de la versión de clústeres de Anthos alojados en VMware.