Créer des instantanés de diagnostic lorsque le cluster avancé est activé

Ce document explique comment utiliser la commande gkectl diagnose pour créer des instantanés de diagnostic afin de résoudre les problèmes de vos clusters créés à l'aide de Google Distributed Cloud (logiciel uniquement) pour VMware lorsque le cluster avancé est activé. Le cluster avancé est activé lorsque enableAdvancedClusters est défini sur true dans le fichier de configuration du cluster d'administrateur et le fichier de configuration du cluster d'utilisateur. Si le cluster avancé n'est pas activé, consultez la section Créer des instantanés de diagnostic lorsque le cluster avancé n'est pas activé.

Si vous avez besoin d'aide supplémentaire, contactez l'assistance Cloud Customer Care.

gkectl diagnose snapshot

Cette commande compresse l'état, les configurations et les journaux d'un cluster dans un fichier tar. La configuration par défaut de la commande gkectl diagnose snapshot 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.

  • 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 de conteneur à partir du nœud du plan de contrôle du cluster d'administrateur, lorsque le serveur d'API Kubernetes n'est pas disponible

  • Journaux de la commande gkectl diagnose snapshot

  • Journaux des tâches de requête préliminaire.

  • Journaux des conteneurs dans les espaces de noms en fonction des scénarios.

Les identifiants, y compris pour vSphere et F5, sont supprimés avant la création du fichier tar.

Capturer l'état du cluster d'administrateur

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

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Remplacez ADMIN_CLUSTER_KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster d'administrateur.

La sortie inclut une liste de fichiers et le nom d'un fichier tar, comme illustré dans l'exemple de sortie suivant :

Using "system" snapshot configuration...
Creating ssh signer for "[ADMIN_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
    gkectlLogs/gkectl-xxx.log
...
    kubectlCommands/[NAMESPACE]/kubectl_get_pods
    kubectlCommands/[NAMESPACE]/kubectl_get_deployments
    kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
    nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
    nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.

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

tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME

Remplacez les éléments suivants :

  • TAR_FILE_NAME : nom du fichier tar.

  • EXTRACTION_DIRECTORY_NAME : répertoire dans lequel vous souhaitez extraire l'archive de fichier tar.

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

Remplacez NODE_NAME par le nom du nœud pour lequel vous souhaitez afficher les fichiers.

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 vous connecter à un nœud de cluster via SSH afin de télécharger les clés SSH.

Dans votre commande gkectl diagnose snapshot, définissez --admin-ssh-key-path sur le chemin d'accès de la 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

L'exemple de sortie suivant inclut une liste de fichiers et le nom d'un fichier tar :

Using "system" snapshot configuration...
Creating ssh signer for "[USER_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
    gkectlLogs/gkectl-xxx.log
...
    kubectlCommands/[NAMESPACE]/kubectl_get_pods
    kubectlCommands/[NAMESPACE]/kubectl_get_deployments
    kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
    nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/commands/journalctl_-u_kubelet
    nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/files/var/log/startup.logn
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.

Scénarios d'instantanés

Les scénarios d'instantané vous permettent de contrôler les informations incluses dans un instantané. Pour spécifier un scénario, utilisez l'option --scenario. La liste suivante répertorie les valeurs possibles :

  • system (par défaut) : collecter un instantané avec des journaux dans les espaces de noms système compatibles.

  • all : collecter un instantané avec des journaux dans tous les espaces de noms, y compris les espaces de noms définis par l'utilisateur.

Pour créer un instantané du cluster d'administrateur, vous n'avez pas besoin de spécifier de scénario :

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

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

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=system

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

Utiliser --log-since pour limiter un instantané

Vous pouvez utiliser l'option --log-since pour limiter la collecte de journaux à une période récente. Par exemple, vous pouvez ne collecter que les journaux des deux derniers jours ou des trois dernières heures. Par défaut, diagnose snapshot collecte tous les journaux.

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=CLUSTER_NAME \
    --scenario=system \
    --log-since=DURATION

Remplacez <var>DURATION</var> par une valeur temporelle telle que 120m ou 48h.

Les considérations suivantes s'appliquent :

  • L'option --log-since n'est compatible qu'avec les journaux kubectl et journalctl.
  • Les options de commande telles que --log-since ne sont pas autorisées dans la configuration de l'instantané personnalisée.

Effectuer une simulation pour un instantané

Vous pouvez utiliser l'option --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 ces deux scénarios (--scenario system ou all) 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 options --scenario et --dry-run. Par exemple, pour afficher la configuration de l'instantané du 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 à celui de l'exemple ci-dessous.

The snapshot configuration is:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
  - kubectl version
  - kubectl cluster-info
  - kubectl top node
  - kubectl top pod -A --containers
  namespaces: []
- commands:
  - kubectl get -o wide --ignore-not-found
  - kubectl get -o yaml --ignore-not-found
  - kubectl describe
  namespaces:
  - kube-system
...
  expandResources: true
- commands:
  - kubectl logs
  namespaces:
  - kube-system
...
kindNodeCommands: []
nodeCommands:
- nodes: []
  commands:
  - uptime
  - df --all --inodes
  - ip addr
  - ip neigh
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1 || true
  - docker info || true
...
- nodes: []
  commands:
  - dmesg
  - systemctl status -l kubelet
  - journalctl --utc -u kubelet
  - journalctl --utc -u kubelet-monitor.service
...
nodeFiles:
- nodes: []
  files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
...
- nodes: []
  files:
  - /var/log/apiserver/audit-proxy-buffer/* || true

Le résultat affiche les informations suivantes :

  • 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. Lorsqu'aucun nœud n'est spécifié, 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. Lorsqu'aucun nœud n'est spécifié, tous les nœuds du cluster cible sont pris en compte.

Étape suivante

Si vous avez besoin d'une aide supplémentaire, contactez Cloud Customer Care.