Diagnostiquer les problèmes de cluster

Cette page explique comment utiliser l'outil de ligne de commande actl dans le mode privé d'Anthos afin de diagnostiquer les problèmes liés aux clusters. La commande diagnose génère un fichier d'archive contenant une collection de journaux capturant l'état du cluster.

Introduction

Vous pouvez capturer l'état de vos clusters à l'aide de la commande actl diagnose. Les informations de diagnostic peuvent vous aider à détecter les problèmes et à déboguer vos déploiements plus efficacement. La commande capture tous les fichiers de configuration des clusters et de nœuds pertinents pour le champ d'application défini, puis regroupe les informations dans une archive tar unique. Les indicateurs de la commande vous permettent de choisir le champ d'application de diagnostic de la commande.

actl diagnose

Utilisez la commande actl diagnose pour résoudre les problèmes liés aux clusters. 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 capture les informations suivantes concernant votre cluster :

  • Version de Kubernetes
  • État des ressources Kubernetes dans les espaces de noms des contrôleurs kube-system et APM: 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 d'utilisateur 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 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
  • Informations du système Istio, y compris les pods, les services, les déploiements, les points de terminaison, les secrets, les ConfigMaps, les journaux actuels et précédents de tous les composants et du side-car Istio, et tous les artefacts de configuration d'Istio
  • Informations dans Config Sync, y compris les configurations dans les espaces de noms associés à config-management-system.
  • Journaux de la commande actl diagnose

Créer un instantané à partir d'un scénario

La commande actl diagnose accepte cinq scénarios. Pour spécifier un scénario, utilisez l'option --scenario pour collecter des instantanés pour l'une des configurations suivantes :

  • all : (par défaut) inclut tous les scénarios prédéfinis, y compris : auth, config-management, kubernetes, management-center et service-mesh.
  • auth
  • config-management
  • kubernetes
  • management-center
  • service-mesh

Vous pouvez utiliser chacun des cinq scénarios avec le cluster d'administrateur. Pour créer un instantané du cluster d'administrateur à l'aide du scénario "all" :

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG\
    --cluster=CLUSTER_NAME\
    --scenario=all

Remplacez les éléments suivants :

  • ADMIN_CLUSTER_KUBECONFIG : fichier kubeconfig du cluster d'administrateur.
  • (Facultatif) CLUSTER_NAME : nom du cluster d'administrateur. Si vous ne connaissez pas le nom du cluster, omettez cette option. Vous êtes alors invité à sélectionner un cluster à partir duquel effectuer un instantané.

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

Using ["all"] snapshot configuration...
? Choose a cluster (namespace/name) cluster-admin/admin
Taking snapshots throttled at 10 in-flight requests...
  kubectlCommands/anthos-management-center-operator/kubectl_get_updateitems
  kubectlCommands/kubectl_cluster-info
  kubectlCommands/kubectl_version
  kubectlCommands/anthos-management-center/kubectl_logs_git-server-0_--container_git-server_--since_24h0m0s
  kubectlCommands/anthos-management-center/kubectl_get_deployments
  ...
  nodes/10.200.0.5/files/lib/systemd/system/docker.service
  nodes/10.200.0.4/files/lib/systemd/system/docker.service
  ...
  istioCommands/istioctl_bug-report

Snapshot succeeded.
Snapshots saved in "[TAR_FILE_PATH]/[TAR_FILE_NAME].tar.gz".

Limiter un instantané à une période

Vous pouvez utiliser l'option --log-since pour limiter la collecte de journaux à une période récente. Par exemple, vous pouvez collecter les journaux des deux derniers jours ou des trois dernières heures. Par défaut, diagnose collecte les journaux des 24 dernières heures. Cette option n'est compatible qu'avec les journaux kubectl.

Pour limiter la période de collecte de journaux, procédez comme suit :

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --scenario=all \
    --log-since=DURATION

Remplacez DURATION par une valeur de temps telle que 2d ou 3h. La durée par défaut est de 24 heures.

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 effectuer une simulation de votre cluster d'administrateur, procédez comme suit :

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --dry-run

Personnaliser une configuration d'instantané

Si aucun des cinq scénarios ne répond pas à vos besoins, vous pouvez créer un instantané personnalisé. Vous pouvez soit générer une configuration, la copier et la coller dans un nouveau fichier de configuration, soit créer un fichier de configuration à partir de zéro. Vous pouvez ensuite créer l'instantané à partir du fichier de configuration personnalisé.

Option 1 : 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 d'instantané pour le scénario "all(par défaut)" d'un cluster, saisissez la commande suivante :

actl diagnose \
    --scenario=all  \
    --dry-run \

Voici un exemple de résultat :

ExcludeWords:
- certificateAuthorityData
- password
InFlightRequests: 10
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system
NodeCommands:
- Commands:
  - uptime
  - df --all --inodes
  - ip addr
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1
  - docker info
  - docker ps -a
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - conntrack --count
  Nodes: []
NodeFiles:
- Files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
  - /lib/systemd/system/kubelet.service
  - /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  - /lib/systemd/system/docker.service
  - /etc/docker/daemon.json
  Nodes: []
NomosBugReport:
  Enabled: true
IstioBugReport:
  Enabled: true

Vous pouvez copier et coller le résultat de cette commande depuis l'interface de ligne de commande dans un nouveau fichier de configuration que vous créez, par exemple myconfig.yaml. Vous pouvez modifier les valeurs suivantes:

  • InFlightRequests : nombre de threads parallèles utilisés pour prendre des instantanés.
  • excludeWords: liste de 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 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.
  • istioBugReport: option permettant d'activer l'instantané istioctl bug-report.
  • nomosBugReport: option permettant d'activer l'instantané nomos bugreport.

Option 2: Définissez manuellement un fichier de configuration d'instantané personnalisé

Créez un fichier YAML avec les paramètres d'instantané de votre choix, par exemple :

ExcludeWords:
- certificateAuthorityData
- password
InFlightRequests: 10
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system

Créer un instantané à l'aide de la configuration personnalisée

Transmettez votre fichier de configuration d'instantané personnalisé à l'aide de l'option --snapshot-config :

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

Remplacez SNAPSHOT_CONFIG_FILE par le nom de votre fichier de configuration d'instantané personnalisé, par exemple myconfig.yaml.

Examiner le contenu de l'instantané

Pour examiner le contenu du fichier tar, vous devez l'extraire en utilisant la commande suivante :

tar -zxf TAR_FILE_PATHTAR_FILENAME.tar.gz  --directory EXTRACTION_DIRECTORY_NAME

Examinez le contenu du fichier tar avant de l'envoyer en pièce jointe lors de vos interactions avec l'assistance.