Créer des instantanés pour diagnostiquer les problèmes de cluster

Lorsque vous rencontrez un problème avec l'un de vos clusters, vous pouvez obtenir de l'aide auprès de Cloud Customer Care. Le service client peut vous demander de prendre un "instantané" du cluster, qu'il pourra utiliser pour diagnostiquer le problème. Un instantané capture les fichiers de configuration des clusters et des nœuds, puis regroupe ces informations dans un seul fichier tar.

Ce document décrit comment créer des instantanés par défaut ou des instantanés plus personnalisés d'un cluster. Il explique également comment créer des instantanés lorsqu'un cluster rencontre des erreurs particulières.

Instantanés par défaut

Les sections suivantes décrivent le contenu d'un instantané standard et comment en créer un. Pour en savoir plus sur les instantanés personnalisés, consultez la section Instantanés personnalisés.

Quelles informations un instantané par défaut contient-il ?

L'instantané d'un cluster est un fichier tar de fichiers de configuration et de journaux concernant le cluster. 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

  • 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 la commande bmctl check cluster --snapshot

Les informations d'identification d'un cluster ne sont pas incluses dans l'instantané par défaut. Si l'assistance Cloud Customer Care demande ces informations, consultez la section Récupérer des informations sur un cluster.

Pour obtenir la liste complète des informations collectées lorsque vous exécutez la commande d'instantané, consultez le fichier de configuration présenté dans la section Le fichier de configuration en détail. Ce fichier de configuration indique les commandes exécutées lors de la prise d'un instantané par défaut.

Créer un instantané par défaut

La commande bmctl check cluster prend un instantané d'un cluster. Vous pouvez utiliser cette commande pour effectuer l'une des actions suivantes : * Créer un instantané et importer automatiquement cet instantané dans un bucket Cloud Storage * Créer un instantané d'un cluster et enregistrer l'instantané sur l'ordinateur local sur lequel vous exécutez la commande.

Méthode 1 : créer un instantané par défaut et l'importer automatiquement dans un bucket Cloud Storage

Pour créer et importer un instantané dans un bucket Cloud Storage, procédez comme suit :

  1. Configurez l'API et le compte de service :

    1. Activez l'API Cloud Storage dans votre projet Google Cloud.
    2. Attribuez un rôle storage.admin au compte de service afin qu'il puisse importer des données dans Cloud Storage.
    3. Téléchargez la clé JSON du compte de service.

    Pour en savoir plus, consultez la section Activer les services et comptes de service Google.

  2. Exécutez la commande bmctl suivante pour créer un instantané et l'importer automatiquement dans un bucket Cloud Storage :

    bmctl check cluster --snapshot --cluster=CLUSTER_NAME
    --kubeconfig=KUBECONFIG_PATH
    --upload-to BUCKET_NAME
    [--service-account-key-file SERVICE_ACCOUNT_KEY_FILE]
    

    Dans la commande, remplacez les entrées suivantes par des informations spécifiques à votre environnement de cluster :

    • CLUSTER_NAME : nom du cluster pour lequel vous souhaitez prendre un instantané.
    • KUBECONFIG_PATH : chemin d'accès au fichier kubeconfig du cluster d'administrateur (le chemin d'accès au fichier kubeconfig est généralement bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. Toutefois, si vous avez spécifié votre espace de travail avec l'option WORKSPACE_DIR, le chemin d'accès est WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig).
    • BUCKET_NAME : nom d'un bucket Cloud Storage dont vous êtes propriétaire.
    • SERVICE_ACCOUNT_KEY_FILE_PATH : si vous ne fournissez pas l'option --service-account-key-file, bmctl tente d'obtenir le chemin d'accès au fichier de clé du compte de service à partir de la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS.
  3. Attribuez à Cloud Customer Care un accès en lecture au bucket contenant l'instantané :

    gsutil iam ch \
    serviceAccount:service-PROJECT_ID@anthos-support.iam.gserviceaccount.com:roles/storage.objectViewer \
    gs://BUCKET_NAME
    

Méthode 2 : créer un instantané par défaut sur un ordinateur local

Vous pouvez capturer l'état de vos clusters à l'aide de la commande suivante :

bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
    --kubeconfig=KUBECONFIG_PATH

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom du cluster cible.

  • KUBECONFIG_PATH : chemin d'accès au fichier kubeconfig du cluster d'administrateur (le chemin d'accès au fichier kubeconfig est généralement bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig. Toutefois, si vous avez spécifié votre espace de travail avec l'option WORKSPACE_DIR, le chemin d'accès est WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig).

Cette commande génère un fichier tar sur votre ordinateur local. Le nom de ce fichier tar est au format snapshot-CLUSTER_NAME-TIMESTAMP.tar.gz, où TIMESTAMP indique la date et l'heure de création du fichier. Ce fichier tar inclut des informations de débogage pertinentes concernant les composants système et les machines d'un cluster.

Lorsque vous exécutez cette commande, les informations sur les pods sont collectées à partir des espaces de noms suivants : gke-system, gke-connect, capi-system, capi-webhook-system, cert-manager et capi-kubeadm-bootstrap-system.

Cependant, vous pouvez étendre le champ d'application des informations de diagnostic collectées à l'aide de l'option --snapshot-scenario all. Cette option augmente le champ d'application de l'instantané de diagnostic pour inclure tous les pods d'un cluster :

bmctl check cluster --snapshot --snapshot-scenario all \
--cluster=CLUSTER_NAME \
--kubeconfig=KUBECONFIG_PATH

Instantanés personnalisés

Vous pouvez créer un instantané personnalisé d'un cluster pour les raisons suivantes :

Comment créer un instantané personnalisé

La création d'un instantané personnalisé nécessite l'utilisation d'un fichier de configuration d'instantané. Les étapes suivantes expliquent comment créer, modifier et utiliser le fichier de configuration pour créer un instantané personnalisé d'un cluster :

  1. Pour créer un fichier de configuration d'instantané, exécutez la commande suivante sur votre cluster et écrivez le résultat dans un fichier :

     bmctl check cluster
    --snapshot --snapshot-dry-run --cluster CLUSTER_NAME
    --kubeconfig KUBECONFIG_PATH
    
  2. Définissez le type d'informations que vous souhaitez afficher dans votre instantané personnalisé. Pour ce faire, modifiez le fichier de configuration d'instantané que vous avez créé à l'étape 1. Par exemple, si vous souhaitez que l'instantané contienne des informations supplémentaires, telles que la durée d'exécution d'un nœud particulier, ajoutez la commande Linux uptime à la section appropriée du fichier de configuration. L'extrait de fichier de configuration suivant montre comment faire en sorte que la commande d'instantané fournisse des informations d'uptime au sujet du nœud 10.200.0.3. Ces informations n'apparaissent pas dans un instantané standard.

    ...
    nodeCommands:
    - nodes:
      - 10.200.0.3
      commands:
      - uptime
    ...
    
  3. Une fois que vous avez modifié le fichier de configuration pour définir le type d'instantané souhaité, créez l'instantané personnalisé en exécutant la commande suivante :

     bmctl check cluster
    --snapshot --snapshot-config SNAPSHOT_CONFIG_FILE --cluster
    CLUSTER_NAME --kubeconfig KUBECONFIG_PATH
    

    L'option --snapshot-config indique à la commande bmctl d'utiliser le contenu du fichier de configuration de l'instantané pour définir les informations qui apparaissent dans l'instantané.

Le fichier de configuration en détail

L'exemple de fichier de configuration d'instantané suivant affiche les commandes et fichiers standards utilisés pour créer un instantané, mais vous pouvez ajouter des commandes et des fichiers supplémentaires lorsque des informations de diagnostic supplémentaires sont nécessaires :

numOfParallelThreads: 10
excludeWords:
- password
nodeCommands:
- nodes:
  - 10.200.0.3
  - 10.200.0.4
  commands:
  - uptime
  - df --all --inodes
  - ip addr
  - ip neigh
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1 || true
  - docker info || true
  - docker ps -a || true
  - crictl ps -a || true
  - docker ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
    sudo docker logs || true
  - docker ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
    xargs sudo docker logs || true
  - crictl ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
    sudo crictl logs || true
  - crictl ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
    xargs sudo crictl logs || true
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - conntrack --count
  - dmesg
  - systemctl status -l docker || true
  - journalctl --utc -u docker
  - journalctl --utc -u docker-monitor.service
  - systemctl status -l kubelet
  - journalctl --utc -u kubelet
  - journalctl --utc -u kubelet-monitor.service
  - journalctl --utc --boot --dmesg
  - journalctl --utc -u node-problem-detector
  - systemctl status -l containerd || true
  - journalctl --utc -u containerd
  - systemctl status -l docker.haproxy || true
  - journalctl --utc -u docker.haproxy
  - systemctl status -l docker.keepalived || true
  - journalctl --utc -u docker.keepalived
  - systemctl status -l container.haproxy || true
  - journalctl --utc -u container.haproxy
  - systemctl status -l container.keepalived || true
  - journalctl --utc -u container.keepalived
nodeFiles:
- nodes:
  - 10.200.0.3
  - 10.200.0.4
  files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
  - /proc/sys/net/ipv4/conf/all/rp_filter
  - /lib/systemd/system/kubelet.service
  - /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  - /lib/systemd/system/docker.service || true
  - /etc/systemd/system/containerd.service || true
  - /etc/docker/daemon.json || true
  - /etc/containerd/config.toml || true
  - /etc/systemd/system/container.keepalived.service || true
  - /etc/systemd/system/container.haproxy.service || true
  - /etc/systemd/system/docker.keepalived.service || true
  - /etc/systemd/system/docker.haproxy.service || true
nodeSSHKey: ~/.ssh/id_rsa # path to your ssh key file

Les entrées suivantes de votre fichier de configuration sont probablement différentes de celles apparaissant dans l'exemple de fichier de configuration ci-dessus :

  • Les adresses IP des nœuds dans les sections nodeCommands et nodeFiles
  • Le chemin d'accès au nodeSSHKey de votre cluster

Champs du fichier de configuration

Un fichier de configuration d'instantané est au format YAML. Le fichier de configuration inclut les champs suivants :

  • numOfParallelThreads : la routine d'instantané exécute généralement de nombreuses commandes. Plusieurs threads parallèles permettent d'assurer une exécution plus rapide de la routine. Nous vous recommandons de définir numOfParallelThreads sur 10, comme indiqué dans l'exemple de fichier de configuration précédent. Si vos instantanés prennent trop de temps, augmentez cette valeur.

  • excludeWords : l'instantané contient une grande quantité de données pour vos nœuds de cluster. Utilisez excludeWords pour réduire les risques de sécurité lorsque vous partagez votre instantané. Par exemple, excluez password pour que les chaînes de mot de passe correspondantes ne puissent pas être identifiées.

  • nodeCommands : cette section spécifie les informations suivantes :

    • nodes : liste des adresses IP des nœuds de cluster à partir desquels vous souhaitez recueillir des informations. Pour créer un instantané lorsque le cluster d'administrateur n'est pas accessible, spécifiez au moins une adresse IP de nœud.

    • commands : liste des commandes (et des arguments) à exécuter sur chaque nœud. Le résultat de chaque commande est inclus dans l'instantané.

  • nodeFiles : cette section spécifie les informations suivantes :

    • nodes : liste des adresses IP des nœuds de cluster à partir desquels vous souhaitez collecter des fichiers. Pour créer un instantané lorsque le cluster d'administrateur n'est pas accessible, spécifiez au moins une adresse IP de nœud.

    • files : liste de fichiers à récupérer à partir de chaque nœud. Lorsque les fichiers spécifiés se trouvent sur un nœud, ils sont inclus dans l'instantané.

  • nodeSSHKey : chemin d'accès à votre fichier de clé SSH. Lorsque le cluster d'administrateur est inaccessible, ce champ est obligatoire.

Créer des instantanés en cas d'erreurs particulières

Créer un instantané par défaut lors d'installations ou de mises à niveau bloquées

Lors de l'installation ou de la mise à niveau de clusters d'administrateur, hybrides ou autonomes, bmctl peut parfois se bloquer à certains points où l'on peut voir les sorties suivantes :

  • En attente de la préparation du cluster kubeconfig.
  • En attente de la préparation du cluster.
  • En attente de la préparation des pools de nœuds.
  • En attente de la fin de la mise à niveau.

Si vous rencontrez un problème d'installation ou de mise à niveau bloquée, vous pouvez toutefois prendre un instantané d'un cluster, à l'aide du cluster d'amorçage, en exécutant la commande suivante :

bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
    --kubeconfig=WORKSPACE_DIR/.kindkubeconfig

Créer un instantané personnalisé lors d'installations ou de mises à niveau bloquées

Les étapes suivantes montrent comment créer un instantané personnalisé d'un cluster lorsqu'une installation ou une mise à niveau est bloquée :

  1. Récupérez un fichier de configuration d'instantané du cluster à partir de vos archives.

  2. Modifiez le fichier de configuration de l'instantané de sorte que l'instantané contienne les informations souhaitées.

  3. Créez l'instantané personnalisé en exécutant la commande suivante :

    bmctl check cluster --snapshot
    --snapshot-config=SNAPSHOT_CONFIG_FILE
    --cluster=CLUSTER_NAME
    --kubeconfig=WORKSPACE_DIR/.kindkubeconfig
    

Comment créer un instantané personnalisé lorsque le cluster d'administrateur est inaccessible

Si votre cluster génère une erreur indiquant que le cluster d'administrateur est inaccessible, vous ne pouvez pas prendre d'instantané par défaut d'un cluster. En effet, la commande bmctl par défaut tente, entre autres, de récupérer des informations à partir du cluster d'administrateur. Lorsque la commande par défaut tente de récupérer des informations à partir d'un cluster d'administrateur inaccessible, la commande d'instantané échoue.

Par conséquent, lorsque le cluster d'administrateur est inaccessible, vous devez prendre un instantané personnalisé du cluster plutôt qu'un instantané par défaut. De cette façon, vous pouvez créer un instantané personnalisé qui ne demande pas d'informations à partir d'un cluster d'administrateur défaillant.

Les étapes suivantes montrent comment créer un instantané personnalisé d'un cluster lorsque le cluster d'administrateur est inaccessible :

  1. Récupérez un fichier de configuration d'instantané du cluster à partir de vos archives.

  2. Dans la section des nœuds, répertoriez les adresses IP des nœuds pour lesquels vous souhaitez obtenir des informations, mais veillez à exclure l'adresse IP du nœud du cluster d'administrateur.

  3. Créez l'instantané personnalisé en exécutant la commande suivante :

    bmctl check cluster
    --snapshot --snapshot-config=SNAPSHOT_CONFIG_FILE
    --cluster=CLUSTER_NAME
    --kubeconfig=KUBECONFIG_PATH
    

Collecter les journaux pour les problèmes liés à une entrée ou à Anthos Service Mesh

Les instantanés bmctl ne contiennent pas d'informations permettant de résoudre les problèmes liés à une entrée ou à Anthos Service Mesh. Pour savoir comment collecter les journaux de diagnostic pertinents, consultez la section Collecter les journaux Anthos Service Mesh dans la documentation d'Anthos Service Mesh.