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.
Si vous avez besoin d'aide supplémentaire, contactez l'assistance Cloud Customer Care.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.
Informations sur l'environnement d'exécution des VM sur GDC, ainsi que sur toutes les VM et ressources associées aux VM qui s'exécutent dans votre cluster. Pour plus d'informations sur les éléments collectés par défaut et sur la création d'instantanés spécifiques à des VM, consultez la section Informations sur les VM dans les instantanés de ce document.
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 la section suivante sur 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 l'importer automatiquement dans un bucket Cloud Storage
- Créer un instantané d'un cluster et enregistrer le fichier d'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 :
Configurez l'API et le compte de service comme décrit dans Configurer un compte de service pouvant accéder à un bucket Cloud Storage.
Vous n'aurez à le faire qu'une seule fois.
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 \ --admin-kubeconfig=ADMIN_KUBECONFIG \ --service-account-key-file SA_KEY_FILE
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é.ADMIN_KUBECONFIG
: chemin d'accès au fichier kubeconfig du cluster d'administrateur.SA_KEY_FILE
: chemin d'accès au fichier de clé JSON téléchargé pour le compte de service créé à l'étape précédente. Si vous n'utilisez pas l'indicateur--service-account-key-file
, la commande utilise les identifiants associés à la variable d'environnementGOOGLE_APPLICATION_CREDENTIALS
. La spécification explicite des identifiants du compte de service avec l'indicateur est prioritaire.
Cette commande génère un fichier tar d'instantané et l'enregistre en local. Lorsque le compte de service est correctement configuré, la commande importe également le fichier tar de l'instantané dans un bucket Cloud Storage. La commande recherche dans votre projet un bucket de stockage dont le nom commence par
anthos-snapshot-
. Si un tel bucket existe, la commande importe l'instantané dans ce bucket. Si la commande ne trouve pas de bucket avec un nom correspondant, elle crée un bucket nomméanthos-snapshot-UUID
, oùUUID
est un identifiant unique universel à 32 chiffres.Partagez l'accès avec Cloud Customer Care, comme décrit dans la section Autoriser Cloud Customer Care à afficher l'instantané de cluster importé.
Méthode 2 : créer un instantané par défaut sur un ordinateur localuniquement
Utilisez l'indicateur --local
pour vous assurer que l'instantané de votre cluster est enregistré uniquement en local. Vous pouvez capturer l'état de vos clusters à l'aide de la commande suivante :
bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
--admin-kubeconfig=ADMIN_KUBECONFIG --local
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du cluster cible.ADMIN_KUBECONFIG
: chemin d'accès au fichier kubeconfig du cluster d'administrateur.
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 \
--local
Scénarios d'instantanés
La commande bmctl check cluster --snapshot
accepte deux scénarios. Pour spécifier un scénario, utilisez l'option --scenario
. La liste suivante répertorie les valeurs possibles :
system
: collecter un instantané des composants système, y compris leurs journauxall
: collecter un instantané de tous les pods, y compris leurs journaux
Vous pouvez utiliser chacun des deux scénarios avec un cluster d'administrateur ou un cluster d'utilisateur. L'exemple suivant crée un instantané du cluster d'administration en utilisant le scénario system
:
bmctl check cluster --snapshot --snapshot-scenario system \ --cluster=ADMIN_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
L'exemple suivant crée un instantané d'un cluster d'utilisateurs à l'aide du scénario all
:
bmctl check cluster --snapshot --snapshot-scenario all \ --cluster=USER_CLUSTER_NAME \ --kubeconfig=USER_KUBECONFIG_PATH
Effectuer une simulation pour un instantané
Lorsque vous utilisez l'option --snapshot-dry-run
, la commande ne crée pas d'instantané.
Au lieu de cela, elle indique les actions effectuées par la commande d'instantané et génère un fichier de configuration d'instantané. Pour en savoir plus sur le fichier de configuration d'instantané, consultez la page Créer un instantané personnalisé.
Pour exécuter une simulation d'instantané sur votre cluster d'administrateur, saisissez la commande suivante :
bmctl check cluster --snapshot --snapshot-dry-run \ --cluster=ADMIN_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Pour exécuter une simulation d'instantané sur un cluster d'utilisateur, saisissez la commande suivante :
bmctl check cluster --snapshot --snapshot-dry-run \ --cluster=USER_CLUSTER_NAME \ --kubeconfig=USER_KUBECONFIG_PATH
Obtenir les journaux d'une période particulière
Vous pouvez utiliser l'option --since
pour récupérer les journaux d'une période qui vous intéresse particulièrement. Vous pouvez ainsi créer des instantanés de journalisation plus petits et plus ciblés des événements survenus au cours des dernières secondes, minutes ou heures.
Par exemple, la commande bmctl
suivante crée un instantané de journalisation survenue au cours des trois dernières heures :
bmctl check cluster --snapshot --since=3h \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Spécifier un répertoire dans lequel l'instantané est enregistré temporairement
Vous pouvez utiliser l'option --snapshot-temp-output-dir
pour spécifier un répertoire dans lequel l'instantané est enregistré temporairement :
bmctl check cluster --snapshot --snapshot-temp-output-dir=TEMP_OUTPUT_DIR \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Si vous ne spécifiez pas de répertoire, l'instantané est enregistré temporairement dans le répertoire /tmp
. Il est recommandé d'utiliser l'option --snapshot-temp-output-dir
lorsque l'espace est limité dans le répertoire /tmp
par défaut, par exemple.
Supprimer la journalisation de la console
Vous pouvez utiliser l'option --quiet
pour empêcher l'affichage des messages de journal dans la console lors d'une exécution d'instantané. Les journaux de la console sont alors enregistrés dans le fichier "bmctl_diagnose_snapshot.log" lors de la capture de l'instantané.
Exécutez la commande suivante pour empêcher l'affichage des messages de journal dans la console :
bmctl check cluster --snapshot --quiet \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Instantanés personnalisés
Vous pouvez créer un instantané personnalisé d'un cluster pour les raisons suivantes :
- Pour inclure plus d'informations sur votre cluster que celles fournies dans l'instantané par défaut.
- Pour exclure certaines informations figurant dans l'instantané par défaut.
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 :
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
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œud10.200.0.3
. Ces informations n'apparaissent pas dans un instantané standard.... nodeCommands: - nodes: - 10.200.0.3 commands: - uptime ...
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 commandebmctl
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 précédent:
- Les adresses IP des nœuds dans les sections
nodeCommands
etnodeFiles
- 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éfinirnumOfParallelThreads
sur10
, 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. UtilisezexcludeWords
pour réduire les risques de sécurité lorsque vous partagez votre instantané. Par exemple, excluezpassword
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
Des étapes ou des paramètres de commande supplémentaires peuvent être nécessaires pour créer un instantané lorsque certains événements se produisent, comme une mise à niveau bloquée.
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 prendre un instantané d'un cluster à l'aide du cluster d'amorçage, comme illustré dans l'exemple suivant:
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 :
Récupérez un fichier de configuration d'instantané du cluster à partir de vos archives.
Modifiez le fichier de configuration de l'instantané de sorte que l'instantané contienne les informations souhaitées.
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
Créer un instantané personnalisé lorsque le cluster d'administration est inaccessible
Lorsque le cluster d'administrateur est inaccessible, vous pouvez prendre un instantané personnalisé du cluster en exécutant la commande suivante :
bmctl check cluster --snapshot --cluster CLUSTER_NAME
--node-ssh-key SSH_KEY_FILE
--nodes NODE_1_IP_ADDRESS, NODE_2_IP_ADDRESS, ...
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é.SSH_KEY_FILE
: chemin d'accès au fichier de clé SSH du nœud.NODE_x_IP_ADDRESS
: adresse IP d'un nœud de cluster pour lequel vous souhaitez obtenir des informations.
Vous pouvez également lister les adresses IP des nœuds sur des lignes distinctes :
bmctl check cluster
--snapshot --cluster CLUSTER_NAME \
--node-ssh-key SSH_KEY_FILE \
--nodes NODE_1_IP_ADDRESS \
--nodes NODE_2_IP_ADDRESS
...
Informations sur les VM dans les instantanés
Si vous utilisez l'environnement d'exécution des VM sur GDC pour créer et gérer des machines virtuelles (VM) sur Google Distributed Cloud, vous pouvez collecter des informations de diagnostic pertinentes dans des instantanés. Les instantanés sont une ressource essentielle pour le diagnostic et le dépannage des problèmes liés à vos VM.
Éléments collectés par défaut
Lorsque vous créez un instantané par défaut, celui-ci contient des informations sur l'environnement d'exécution des VM sur GDC et les ressources associées.
L'environnement d'exécution des VM sur GDC est fourni avec Google Distributed Cloud. La ressource personnalisée VMRuntime
est disponible sur vos clusters qui exécutent des charges de travail.
Même si vous n'avez pas activé l'environnement d'exécution des VM sur GDC, l'instantané contient la description YAML de la ressource personnalisée VMRuntime
.
Si vous avez activé l'environnement d'exécution des VM sur GDC, les instantanés contiennent les informations d'état et de configuration des ressources associées aux VM (lorsque les objets sont présents) dans votre cluster. Les ressources associées aux VM incluent des objets Kubernetes, tels que des pods, des déploiements, des DaemonSets et des ConfigMaps.
Objets dans l'espace de noms vm-system
Les informations d'état et de configuration des objets suivants se trouvent dans kubectlCommands/vm-system
dans l'instantané généré :
KubeVirt
VirtualMachineType
VMHighAvailabilityPolicy
Objets dans d'autres espaces de noms
Lorsque vous créez une VM (VirtualMachine
), vous pouvez spécifier l'espace de noms. Si vous n'en spécifiez pas, l'espace de noms default
est attribué à la VM. Les autres objets de cette section, tels que VirtualMachineInstance
, sont liés à l'espace de noms de la VM correspondante.
Les informations d'état et de configuration des objets suivants se trouvent dans kubectlCommands/VM_NAMESPACE
dans l'instantané généré. Si vous n'avez pas défini d'espace de noms spécifique à votre VM, les informations se trouvent dans kubectlCommands/default
:
VirtualMachine
VirtualMachineInstance
VirtualMachineDisk
GuestEnvironmentData
VirtualMachineAccessRequest
VirtualMachinePasswordResetRequest
Objets sans espace de noms
Les objets suivants ne sont pas liés à un espace de noms. Les informations correspondantes se trouvent donc directement dans kubectlCommands
dans l'instantané généré :
VMRuntime
DataVolume
CDI
GPUAllocation
Utiliser un fichier de configuration d'instantané pour ne capturer que des informations sur les VM
Si vous diagnostiquez des problèmes spécifiques aux VM, vous pouvez utiliser un fichier de configuration d'instantané pour limiter les informations collectées à celles associées aux VM et les personnaliser.
Le fichier de configuration d'instantané suivant montre comment créer un instantané spécifique à une VM. Vous pouvez inclure des commandes supplémentaires pour collecter plus d'informations sur votre instantané.
---
kubectlCommands:
- commands:
- kubectl get vm -o wide
- kubectl get vmi -o wide
- kubectl get gvm -o wide
- kubectl get vm -o yaml
- kubectl get vmi -o yaml
- kubectl get gvm -o yaml
- kubectl describe vm
- kubectl describe vmi
- kubectl describe gvm
namespaces:
- .*
- commands:
- kubectl get virtualmachinetype -o wide
- kubectl get virtualmachinedisk -o wide
- kubectl get virtualmachinetype -o yaml
- kubectl get virtualmachinedisk -o yaml
- kubectl describe virtualmachinetype
- kubectl describe virtualmachinedisk
namespaces:
- vm-system
Pour en savoir plus sur l'utilisation des fichiers de configuration d'instantané, consultez la section Instantanés personnalisés de ce document.