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.
Informations sur l'environnement d'exécution des VM dans Google Distributed Cloud, ainsi que sur les VM et les ressources associées aux VM exécutées 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 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 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 :
- Activez l'API Cloud Storage dans votre projet Google Cloud.
- Attribuez un rôle
storage.admin
au compte de service afin qu'il puisse importer des données dans Cloud Storage. - 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.
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 estbmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
par défaut. Toutefois, si vous avez spécifié votre espace de travail avec l'optionWORKSPACE_DIR
, le chemin d'accès estWORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
).BUCKET_NAME
: nom d'un bucket Cloud Storage dont vous êtes propriétaire.SERVICE_ACCOUNT_KEY_FILE
: 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'environnementGOOGLE_APPLICATION_CREDENTIALS
.
Créez un compte de service et partagez l'accès avec Cloud Customer Care, comme décrit dans la section Autoriser l'assistance Google Cloud à afficher les instantanés de cluster importés.
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 estbmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
par défaut. Toutefois, si vous avez spécifié votre espace de travail avec l'optionWORKSPACE_DIR
, le chemin d'accès estWORKSPACE_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
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. Par exemple, pour créer un instantané du cluster d'administrateur en utilisant le scénario system
:
bmctl check cluster --snapshot --snapshot-scenario system \ --cluster=ADMIN_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Pour créer un instantané d'un cluster d'utilisateur en utilisant le scénario all
:
bmctl check cluster --snapshot --snapshot-scenario all \ --cluster=USER_CLUSTER_NAME \ --kubeconfig=ADMIN_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=ADMIN_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, par exemple, l'espace est limité dans le répertoire par défaut /tmp
.
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 ci-dessus :
- 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
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 :
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
Comment créer un instantané personnalisé lorsque le cluster d'administrateur 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 Google Distributed Cloud pour créer et gérer des machines virtuelles (VM) sur GKE sur bare metal, 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 les informations sur l'environnement d'exécution des VM sur Google Distributed Cloud et sur les ressources associées.
L'environnement d'exécution des VM sur Google Distributed Cloud est fourni avec GKE sur Bare Metal, et 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 Google Distributed Cloud, l'instantané contient toujours la description YAML de la ressource personnalisée VMRuntime
.
Si vous avez activé l'environnement d'exécution des VM sur Google Distributed Cloud, les instantanés contiennent des informations sur l'état et la configuration des ressources associées à la 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.