Vous consultez la documentation d'une version précédente de GKE On-Prem. Consulter la documentation la plus récente

Diagnostiquer les problèmes de cluster

Cette page explique comment utiliser l'outil d'interface de ligne de commande (CLI) gkectl pour diagnostiquer les problèmes dans vos clusters GKE On-Prem.

Aperçu

L'outil gkectl comporte deux commandes permettant de résoudre les problèmes liés aux clusters : gkectl diagnose cluster et gkectl diagnose snapshot. Les commandes fonctionnent à la fois avec les clusters d'administrateurs et d'utilisateurs.

gkectl diagnose cluster

Effectue des vérifications d'état sur votre cluster GKE On-Prem et signale les erreurs. Exécute des vérifications d'état sur les composants suivants :

  • Objets du cluster
  • Objets machine et nœuds de cluster correspondants
  • Pods dans les espaces de noms kube-system et gke-system
  • Plan de contrôle utilisateur si le cluster cible est un cluster d'utilisateur
  • Volumes persistants vSphere dans le cluster

gkectl diagnose snapshot

Compresse l'état, les configurations et les journaux d'un cluster dans un fichier tarball. Plus précisément, la configuration par défaut de la commande capture les informations suivantes concernant votre cluster :

  • Version de Kubernetes
  • État des ressources Kubernetes dans les espaces de noms kube-system et gke-system : cluster, machine, nœuds, Services, Endpoints, ConfigMaps, ReplicaSets, CronJobs, Pods et les propriétaires de ces pods, y compris les déploiements, DaemonSets et StatefulSets
  • État du plan de contrôle utilisateur si le cluster cible est un cluster d'utilisateur (le plan de contrôle du cluster s'exécute dans le cluster d'administrateur)
  • Détails sur chaque configuration de nœud, y compris les adresses IP, les règles iptables, les points d'installation, le système de fichiers, les connexions réseau et les processus en cours d'exécution
  • Journaux résultant de la commande gkectl diagnose snapshot.
  • Fichier de configuration GKE On-Prem utilisé pour installer et mettre à niveau les clusters (facultatif).

Les identifiants, y compris les identifiants vSphere et F5, sont supprimés avant la création du tarball.

Diagnostiquer des clusters

Vous pouvez exécuter gke diagnose cluster pour rechercher les problèmes courants liés à votre cluster.

Diagnostiquer un cluster d'administrateur

Vous pouvez diagnostiquer un cluster d'administrateur en lui transmettant son nom ou en lui transmettant uniquement son kubeconfig.

Utiliser le cluster d'administrateur kubeconfig

La transmission du fichier kubeconfig du cluster d'administrateur oblige gkectl à choisir automatiquement le cluster d'administrateur :

gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG]

Utiliser le nom du cluster d'administrateur

Pour obtenir le nom du cluster d'administrateur, exécutez la commande suivante :

kubectl get cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG]

Transmettez ensuite le nom du cluster d'administrateur à gkectl diagnose cluster :

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

Si votre cluster d'administrateur fonctionne correctement, gkectl diagnose cluster affiche le résultat suivant :

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.

Diagnostiquer un cluster d'utilisateur

Pour diagnostiquer un cluster, commencez par obtenir le nom du cluster d'utilisateur :

kubectl get cluster --kubeconfig=[USER_CLUSTER_KUBECONFIG]

Transmettez ensuite le fichier kubeconfig du cluster d'administrateur et le nom du cluster d'utilisateur :

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

Si votre cluster d'utilisateur fonctionne correctement, gkectl diagnose cluster affiche le résultat suivant :

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.

Capturer l'état du cluster

Si gkectl diagnose cluster détecte des erreurs, vous devez capturer l'état du cluster et fournir les informations à Google. Pour ce faire, utilisez la commande gkectl diagnose snapshot.

gkectl diagnose snapshot possède une option facultative, --seed-config. Cette option recueille des informations sur le cluster et le fichier de configuration GKE On-Prem qui a été utilisé pour créer ou mettre à niveau le cluster.

Capturer l'état du cluster d'administrateur

Pour capturer l'état d'un cluster d'administrateur, exécutez la commande suivante, où --seed-config est facultatif :

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

Le résultat inclut une liste de fichiers et le nom d'un fichier tarball :

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.

Pour extraire le fichier tarball dans un répertoire, exécutez la commande suivante :

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

Pour afficher la liste des fichiers générés par l'instantané, exécutez les commandes suivantes :

cd [EXTRACTION_DIRECTORY_NAME]/[EXTRACTED_SNAPSHOT_DIRECTORY]
ls kubectlCommands
ls nodes/[NODE_NAME]/commands
ls nodes/[NODE_NAME]/files

Pour afficher les détails d'une opération spécifique, ouvrez l'un des fichiers.

Spécifier la clé SSH pour le cluster d'administrateur

Lorsque vous obtenez un instantané du cluster d'administrateur, gkectl trouve automatiquement la clé SSH privée du cluster d'administrateur. Vous pouvez également spécifier la clé explicitement à l'aide du paramètre --admin-ssh-key-path.

Suivez les instructions pour utiliser SSH pour vous connecter à un nœud de cluster afin de télécharger les clés SSH.

Ensuite, dans votre commande gkectl diagnose snapshot, définissez --admin-ssh-key-path sur le chemin d'accès du fichier de clé décodée :

gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--admin-ssh-key-path=[PATH_TO_DECODED_KEY]

Capturer l'état du cluster d'utilisateur

Pour capturer l'état d'un cluster d'utilisateur, exécutez la commande suivante :

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

Le résultat inclut une liste de fichiers et le nom d'un fichier tarball :

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.

Scénarios d'instantanés

La commande gkectl diagnose snapshot prend en charge quatre scénarios. Pour spécifier un scénario, utilisez l'indicateur --scenario. La liste suivante répertorie les valeurs possibles :

  • system : (par défaut) collecter un instantané pour les espaces de noms système : kube-system et gke-system.

  • system-with-logs : collecter un instantané system avec des journaux.

  • all : collecter un instantané pour tous les espaces de noms.

  • all-with-logs : collecter un instantané all avec des journaux.

Vous pouvez utiliser chacun des quatre scénarios avec un cluster d'administrateur ou un cluster d'utilisateur. Il existe donc huit permutations possibles. Les exemples suivants illustrent certaines possibilités.

Pour créer un instantané du cluster d'administrateur à l'aide du scénario system :

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

Pour créer un instantané d'un cluster d'utilisateur en utilisant le scénario system-with-logs :

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

Pour créer un instantané d'un cluster d'utilisateur en utilisant le scénario all :

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

Pour créer un instantané du cluster d'administrateur à l'aide du scénario all-with-logs :

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

Effectuer une simulation pour un instantané

Vous pouvez utiliser l'indicateur --dry-run pour afficher les actions à effectuer et la configuration de l'instantané.

Pour exécuter une simulation sur votre cluster d'administrateur, saisissez la commande suivante :

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

Pour exécuter une simulation sur un cluster d'utilisateur, saisissez la commande suivante :

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

Utiliser une configuration d'instantané

Si les quatre scénarios ne répondent pas à vos besoins, vous pouvez créer un instantané personnalisé en transmettant un fichier de configuration d'instantané à l'aide de l'indicateur --snapshot-config :

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

Générer une configuration d'instantané

Vous pouvez générer une configuration d'instantané pour un scénario donné en transmettant les indicateurs --scenario et --dry-run. Par exemple, pour afficher la configuration de l'instantané pour le scénario par défaut (system) d'un cluster d'utilisateur, saisissez la commande suivante :

gkectl diagnose snapshot \
--kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--cluster-name=[USER_CLUSTER_NAME] \
--scenario=system
--dry-run

Le résultat ressemble à ce qui suit :

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 : nombre de threads parallèles utilisés pour prendre des instantanés.
  • excludeWords : liste des mots à exclure de l'instantané (non sensible à la casse). Les lignes contenant ces mots sont supprimées des résultats de l'instantané. "mot de passe" est toujours exclu, que vous le spécifiiez ou non.
  • kubectlCommands : liste des commandes kubectl à exécuter. Les résultats sont enregistrés. Les commandes s'exécutent sur les espaces de noms correspondants. Pour les commandes kubectl logs, tous les pods et conteneurs des espaces de noms correspondants sont automatiquement ajoutés. Les expressions régulières sont compatibles avec la spécification des espaces de noms. Si vous ne spécifiez pas d'espace de noms, l'espace de noms default est utilisé.
  • nodeCommands : liste des commandes à exécuter sur les nœuds correspondants. Les résultats sont enregistrés. Lorsque les nœuds ne sont pas spécifiés, tous les nœuds du cluster cible sont pris en compte.
  • nodeFiles : liste des fichiers à collecter à partir des nœuds correspondants. Les fichiers sont enregistrés. Lorsque des nœuds ne sont pas spécifiés, tous les nœuds du cluster cible sont pris en compte.
  • prometheusRequests : liste des requêtes Prometheus. Les résultats sont enregistrés.