Résoudre les problèmes d'observabilité de Google Distributed Cloud

Ce document vous aide à résoudre les problèmes d'observabilité dans Google Distributed Cloud. Si vous rencontrez l'un de ces problèmes, consultez les solutions et les solutions de contournement suggérées.

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

Vous pouvez également consulter Obtenir de l'aide pour en savoir plus sur les ressources d'assistance, y compris les suivantes :

  • Conditions requises pour ouvrir une demande d'assistance.
  • Des outils pour vous aider à résoudre les problèmes, tels que les journaux et les métriques.
  • Composants, versions et fonctionnalités compatibles de Google Distributed Cloud pour VMware (logiciel uniquement).

Les journaux d'audit Cloud ne sont pas collectés

Vérifiez que Cloud Audit Logs est activé dans la section cloudAuditLogging de la configuration du cluster. Vérifiez que l'ID du projet, l'emplacement et la clé du compte de service sont correctement configurés. L'ID de projet doit être identique à celui indiqué sous gkeConnect.

Si Cloud Audit Logs est activé, les autorisations sont la raison la plus courante pour laquelle les journaux ne sont pas collectés. Dans ce scénario, des messages d'erreur d'autorisation refusée s'affichent dans le conteneur proxy Cloud Audit Logs.

Le conteneur proxy Cloud Audit Logs s'exécute de l'une des manières suivantes :

  • Un pod statique dans le cluster d'administrateur ou autonome.
  • En tant que conteneur side-car dans le pod kube-apiserver.

Si des erreurs d'autorisation s'affichent, suivez la procédure pour les résoudre.

Une autre cause possible est que votre projet a peut-être atteint la limite de comptes de service acceptée. Pour en savoir plus, consultez Compte de service Cloud Audit Logs divulgué.

Les métriques kube-state-metrics ne sont pas collectées

kube-state-metrics (KSM) s'exécute en tant que déploiement d'instance répliquée unique dans le cluster et génère des métriques sur presque toutes les ressources du cluster. Lorsque KSM et gke-metrics-agent s'exécutent sur le même nœud, le risque d'indisponibilité est plus élevé pour les agents de métriques sur tous les nœuds.

Les métriques KSM ont des noms qui suivent le modèle kube_<ResourceKind>, comme kube_pod_container_info. Les métriques qui commencent par kube_onpremusercluster_ proviennent du contrôleur de cluster sur site, et non de KSM.

Si les métriques KSM sont manquantes, consultez les étapes de dépannage suivantes :

  • Dans Cloud Monitoring, vérifiez le nombre de processeurs, de mémoire et de redémarrages de KSM à l'aide des métriques d'API récapitulatives telles que kubernetes.io/anthos/container/.... Il s'agit d'un pipeline distinct avec KSM. Vérifiez que le pod KSM n'est pas limité par un manque de ressources.
    • Si ces métriques d'API récapitulatives ne sont pas disponibles pour KSM, gke-metrics-agent sur le même nœud présente probablement le même problème.
  • Dans le cluster, vérifiez l'état et les journaux du pod KSM et du pod gke-metrics-agent sur le même nœud que KSM.

kube-state-metrics boucle de plantage

Symptôme

Aucune métrique de kube-state-metrics (KSM) n'est disponible dans Cloud Monitoring.

Cause

Ce scénario est plus susceptible de se produire dans les grands clusters ou dans les clusters disposant d'une grande quantité de ressources. KSM s'exécute en tant que déploiement à instance répliquée unique et répertorie presque toutes les ressources du cluster, telles que les pods, les déploiements, les DaemonSets, les ConfigMaps, les Secrets et les PersistentVolumes. Des métriques sont générées pour chacun de ces objets de ressources. Si l'une des ressources comporte de nombreux objets, comme un cluster avec plus de 10 000 pods, KSM peut potentiellement manquer de mémoire.

Versions concernées

Ce problème peut se produire dans n'importe quelle version de Google Distributed Cloud.

La limite de processeur et de mémoire par défaut a été augmentée dans les dernières versions de Google Distributed Cloud. Ces problèmes de ressources devraient donc être moins fréquents.

Solution et contournement

Pour vérifier si votre problème est dû à des problèmes de mémoire saturée, procédez comme suit :

  • Utilisez kubectl describe pod ou kubectl get pod -o yaml et vérifiez le message d'état d'erreur.
  • Vérifiez la métrique de consommation et d'utilisation de la mémoire pour KSM et vérifiez qu'elle atteint la limite avant d'être redémarrée.

Si vous confirmez que les problèmes de mémoire insuffisante sont le problème, utilisez l'une des solutions suivantes :

  • Augmentez la demande et la limite de mémoire pour KSM.

    Pour ajuster le processeur et la mémoire de KSM :

    • Pour les versions Google Distributed Cloud 1.16.0 ou ultérieures, Google Cloud Observability gère KSM. Pour mettre à jour KSM, consultez la section Remplacer les valeurs par défaut de processeur et les demandes de mémoire et limites pour un composant Stackdriver.

    • Pour les versions Google Distributed Cloud 1.10.7 ou ultérieure, 1.11.3 ou ultérieure, 1.12.2 ou ultérieure, et 1.13 ou ultérieure, mais antérieure à 1.16.0, créez un ConfigMap pour ajuster le processeur et la mémoire :

      1. Créez un ConfigMap nommé kube-state-metrics-resizer-config dans l'espace de noms kube-system (gke-managed-metrics-server pour la version 1.13 ou ultérieure) avec la définition suivante. Ajustez le nombre de processeurs et de mémoire selon vos besoins :

          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: kube-state-metrics-resizer-config
            namespace: kube-system
          data:
            NannyConfiguration: |-
              apiVersion: nannyconfig/v1alpha1
              kind: NannyConfiguration
              baseCPU: 200m
              baseMemory: 1Gi
              cpuPerNode: 3m
              memoryPerNode: 20Mi
          ```
        
      2. Après avoir créé le ConfigMap, redémarrez le déploiement KSM en supprimant le pod KSM à l'aide de la commande suivante :

        kubectl -n kube-system rollout restart deployment kube-state-metrics
        
    • Pour Google Distributed Cloud versions 1.9 et antérieures, 1.10.6 et antérieures, 1.11.2 et antérieures, et 1.12.1 et antérieures :

      • Aucune solution à long terme n'est disponible. Si vous modifiez la ressource associée à KSM, les modifications sont automatiquement annulées par monitoring-operator.
      • Vous pouvez réduire monitoring-operator à 0 instance répliquée, puis modifier le déploiement KSM pour ajuster sa limite de ressources. Toutefois, le cluster ne recevra pas les correctifs de sécurité fournis par les nouvelles versions de correctifs utilisant monitoring-operator. N'oubliez pas de remettre à l'échelle monitoring-operator une fois le cluster mis à niveau vers une version ultérieure avec correctif.
  • Réduisez le nombre de métriques KSM.

    Pour Google Distributed Cloud 1.13, KSM n'expose par défaut qu'un nombre limité de métriques appelées "métriques de base". Ce comportement signifie que l'utilisation des ressources est inférieure à celle des versions précédentes, mais la même procédure peut être suivie pour réduire davantage le nombre de métriques KSM.

    Pour les versions de Google Distributed Cloud antérieures à la version 1.13, KSM utilise les indicateurs par défaut. Cette configuration expose un grand nombre de métriques.

gke-metrics-agent boucle de plantage

Si gke-metrics-agent ne rencontre des problèmes de mémoire insuffisante que sur le nœud où kube-state-metrics existe, la cause est un grand nombre de métriques kube-state-metrics. Pour résoudre ce problème, réduisez stackdriver-operator et modifiez KSM afin d'exposer un petit ensemble de métriques nécessaires, comme indiqué dans la section précédente. N'oubliez pas de réaugmenter l'échelle de stackdriver-operator une fois le cluster mis à niveau vers Google Distributed Cloud 1.13, où KSM expose par défaut un plus petit nombre de métriques principales.

Pour les problèmes qui ne sont pas liés aux événements de mémoire insuffisante, consultez les journaux des pods de gke-metric-agent. Vous pouvez ajuster le processeur et la mémoire de tous les pods gke-metrics-agent en ajoutant le champ resourceAttrOverride à la ressource personnalisée Stackdriver.

stackdriver-metadata-agent boucle de plantage

Symptôme

Aucune étiquette de métadonnées système n'est disponible lorsque vous filtrez des métriques dans Cloud Monitoring.

Cause

Le cas le plus courant de boucle de plantage stackdriver-metadata-agent est dû à des événements de mémoire insuffisante. Cet événement est semblable à kube-state-metrics. Bien que stackdriver-metadata-agent ne liste pas toutes les ressources, il liste toujours tous les objets pour les types de ressources concernés, tels que les pods, les déploiements et NetworkPolicy. L'agent s'exécute en tant que déploiement d'instance répliquée unique, ce qui augmente le risque de problèmes de mémoire insuffisante si le nombre d'objets est trop important.

Version concernée

Ce problème peut se produire dans n'importe quelle version de Google Distributed Cloud.

La limite de processeur et de mémoire par défaut a été augmentée dans les dernières versions de Google Distributed Cloud. Ces problèmes de ressources devraient donc être moins fréquents.

Solution et contournement

Pour vérifier si votre problème est dû à des problèmes de mémoire saturée, procédez comme suit :

  • Utilisez kubectl describe pod ou kubectl get pod -o yaml et vérifiez le message d'état d'erreur.
  • Vérifiez la métrique de consommation et d'utilisation de la mémoire pour stackdriver-metadata-agent et vérifiez qu'elle atteint la limite avant le redémarrage.
Si vous vérifiez que les problèmes de mémoire insuffisante sont à l'origine des problèmes, augmentez la limite de mémoire dans lechamp resourceAttrOverride de la ressource personnalisée Stackdriver.

metrics-server boucle de plantage

Symptôme

L'autoscaler horizontal de pods et kubectl top ne fonctionnent pas dans votre cluster.

Cause et versions concernées

Ce problème est peu fréquent, mais il est dû à des erreurs de mémoire insuffisante dans les grands clusters ou dans les clusters à forte densité de pods.

Ce problème peut se produire dans n'importe quelle version de Google Distributed Cloud.

Solution et contournement

Augmentez les limites de ressources du serveur de métriques. Dans Google Distributed Cloud version 1.13 et versions ultérieures, l'espace de noms de metrics-server et sa configuration ont été déplacés de kube-system vers gke-managed-metrics-server.

Toutes les ressources ne sont pas supprimées lors de la suppression d'un compte de service Cloud Audit Logs

Lorsque vous supprimez un compte de service utilisé pour Cloud Audit Logs, toutes les ressources Google Cloudne sont pas supprimées. Si vous supprimez et recréez régulièrement des comptes de service utilisés pour Cloud Audit Logs, la journalisation d'audit finira par échouer.

Symptôme

Des messages d'erreur d'autorisation refusée s'affichent dans le conteneur proxy Cloud Audit Logs.

Pour confirmer que l'échec du journal d'audit est dû à ce problème, exécutez la commande suivante :

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global/features/cloudauditlogging

Remplacez PROJECT_NUMBER par votre numéro de projet.

La réponse renvoie tous les comptes de service utilisés avec Cloud Audit Logs dans le projet, y compris ceux qui ont été supprimés.

Cause et versions concernées

Lorsque vous supprimez un compte de service utilisé pour Cloud Audit Logs, toutes les ressources Google Cloud ne sont pas supprimées. Vous finissez par atteindre la limite de 1 000 comptes de service pour le projet.

Ce problème peut se produire dans n'importe quelle version de Google Distributed Cloud.

Solution et contournement

  1. Créez une variable d'environnement contenant une liste séparée par des virgules de tous les comptes de service que vous souhaitez conserver. Entourez chaque adresse e-mail de compte de service de guillemets simples, et entourez la liste entière de guillemets doubles. Vous pouvez utiliser les éléments suivants comme point de départ :

    SERVICE_ACCOUNT_EMAILS="'SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com'"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • SERVICE_ACCOUNT_NAME : nom du compte de service.

    La liste complète doit ressembler à l'exemple suivant :

    "'sa_name1@example-project-12345.iam.gserviceaccount.com','sa_name2@example-project-12345.iam.gserviceaccount.com','sa_name3@example-project-12345.iam.gserviceaccount.com'"
    
  2. Exécutez la commande suivante pour supprimer la fonctionnalité Cloud Audit Logs du projet :

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/FLEET_REGION /features/cloudauditlogging
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro du projet.
    • FLEET_REGION : emplacement de l'appartenance au parc pour vos clusters. Il peut s'agir d'une région spécifique, telle que us-central1 ou global. Vous pouvez exécuter la commande gcloud container fleet memberships list pour obtenir l'emplacement de l'appartenance.

    Cette commande supprime complètement tous les comptes de service.

  3. Recréez la fonctionnalité Cloud Audit Logs en conservant uniquement les comptes de service que vous souhaitez garder :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/FLEET_REGION/features?feature_id=cloudauditlogging \
        -d '{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":[$SERVICE_ACCOUNT_EMAILS]}}}'
    

Étapes suivantes

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

Vous pouvez également consulter Obtenir de l'aide pour en savoir plus sur les ressources d'assistance, y compris les suivantes :

  • Conditions requises pour ouvrir une demande d'assistance.
  • Des outils pour vous aider à résoudre les problèmes, tels que les journaux et les métriques.
  • Composants, versions et fonctionnalités compatibles de Google Distributed Cloud pour VMware (logiciel uniquement).