Sauvegarde et restauration
La modification du plan de restauration de sauvegarde du cluster ne fonctionne pas
Versions : 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.14.7
Symptômes :
La ressource personnalisée RestorePlan ne peut pas être modifiée à l'aide de la console GDC.
Solution :
Créez un plan de restauration et supprimez l'ancien, ou modifiez le plan de restauration à l'aide de kubectl CLI.
Taille du disque source non valide
Versions : 1.14.4, 1.14.5
Symptômes : l'UI affiche de manière incorrecte une taille de disque de 0 Mo et une heure de création "Inconnue" en raison d'une modification du modèle de données backend après la migration vers l'architecture d'organisation v2.
Solution : il n'existe aucune autre méthode pour afficher ces informations dans l'UI.
Redémarrage des pods de l'agent et du plan de contrôle en raison d'un manque de mémoire
Versions : 1.14.3, 1.14.4
Symptômes : les pods de l'agent et du plan de contrôle peuvent redémarrer s'ils manquent de mémoire.
Solution : Augmentez la mémoire des pods du plan de contrôle et de l'agent en suivant les instructions du runbook BACK-R0005. Augmentez la mémoire des pods à 2 Gio.
Les SLO de sauvegarde et de restauration ne sont pas appliqués
Versions : 1.14.3, 1.14.4
Symptômes : les métriques et les alertes concernant les objectifs de niveau de service (SLO) GDC ne sont pas configurées par défaut, car la définition de ressource personnalisée nécessaire n'est pas installée. Ces alertes sont utilisées dans Grafana.
Solutions de contournement : pour activer les SLO pour la sauvegarde et la restauration dans GDC, suivez le runbook BACK-T0001.
Les règles de conservation ne sont pas appliquées aux sauvegardes importées.
Versions : toutes les versions de Google Distributed Cloud (GDC) sous air gap peuvent être concernées.
Symptômes : L'association d'un dépôt de sauvegarde au cluster synchronise toutes les métadonnées de sauvegarde et de restauration, et traite les dépôts comme des sauvegardes importées. Ces sauvegardes importées sont ignorées à tort lors de la réconciliation, ce qui signifie que les règles de conservation sont ignorées et que les sauvegardes sont conservées indéfiniment.
Solution : Les sauvegardes importées sont signalées par l'icône backup.gdc.goog/imported-repository:BACKUP_REPOSITORY_NAME. Pour autoriser le rapprochement normal et l'application des règles de conservation, supprimez le libellé des sauvegardes à l'aide des commandes kubectl suivantes :
Définissez les variables d'environnement requises :
export KUBECONFIG=KUBECONFIG export BACKUP_REPOSITORY_NAME=BACKUP_REPOSITORY_NAME export NAMESPACE=BACKUP_PLAN_NAMESPACERemplacez les éléments suivants :
KUBECONFIG: chemin d'accès au fichier kubeconfig.BACKUP_REPOSITORY_NAME: nom du dépôt de sauvegarde.NAMESPACE: espace de noms contenant le plan de sauvegarde.
Répertoriez toutes les sauvegardes importées :
kubectl get backups.backup.gdc.goog -n $NAMESPACE -l backup.gdc.goog/imported-repository=$BACKUP_REPOSITORY_NAMESupprimez les libellés si nécessaire :
Supprimez les libellés de toutes les sauvegardes :
kubectl get backups.backup.gdc.goog -l backup.gdc.goog/imported-repository=$BACKUP_REPOSITORY_NAME -n $NAMESPACE -o json | jq -r '.items[].metadata.name' | xargs -I{} kubectl label -n $NAMESPACE backups.backup.gdc.goog {} backup.gdc.goog/imported-repository-Supprimez les libellés d'une seule sauvegarde :
export BACKUP_NAME= kubectl label backups.backup.gdc.goog $BACKUP_NAME -n $NAMESPACE backup.gdc.goog/imported-repository-
Échec de la sauvegarde partielle de la VM
Versions : 1.14.3, 1.14.4
Symptômes : Si la sauvegarde d'une VM parmi plusieurs échoue, la sauvegarde de l'ensemble des VM est marquée comme ayant échoué.
Solution : Limitez le nombre de VM par plan de sauvegarde.
Nettoyer les ressources de sauvegarde orphelines après la suppression d'un cluster d'utilisateur ou de service
Versions : 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.14.7
Symptômes : lorsqu'un cluster d'utilisateur ou de service est supprimé, les ressources de l'agent de sauvegarde associé (comme StatefulSet, les pods, le secret, etc.) créées dans le cluster d'infrastructure et de gestion de l'organisation ne sont pas automatiquement nettoyées. Cela peut laisser des ressources orphelines. Si le cluster est recréé avec le même nom, le pod de l'agent de sauvegarde ne fonctionne pas.
Solution de contournement : Les ressources orphelines existent dans un espace de noms dédié du cluster d'infrastructure de l'organisation. Pour les nettoyer, vous devez supprimer cet espace de noms.
Définissez les fichiers kubeconfig pour l'infrastructure de l'organisation et les clusters de gestion.
export ORG_INFRA_KUBECONFIG=<path_to_org_infra_kubeconfig> export MGMT_KUBECONFIG=<path_to_management_kubeconfig>Identifiez l'espace de noms des ressources orphelines. L'espace de noms suit le modèle
gpc-backup-<cluster-name>-system. Exemple :gpc-backup-user-vm-1-cluster-systemgpc-backup-user-vm-2-cluster-systemgpc-backup-g-org-1-shared-service-cluster-system
Supprimez l'espace de noms. Cela supprimera toutes les ressources qu'il contient, y compris le StatefulSet et le pod de l'agent de sauvegarde dans le cluster d'infrastructure, ainsi que le secret dans le cluster de gestion.
# Replace <namespace-name> with the actual namespace kubectl delete namespace <namespace-name> --kubeconfig "${ORG_INFRA_KUBECONFIG:?}" kubectl delete namespace <namespace-name> --kubeconfig "${MGMT_KUBECONFIG:?}"Pour vérifier que le nettoyage a réussi, exécutez à nouveau la commande
get all.# Replace <namespace-name> with the actual namespace kubectl get all -n <namespace-name> --kubeconfig "${ORG_INFRA_KUBECONFIG:?}" kubectl get all -n <namespace-name> --kubeconfig "${MGMT_KUBECONFIG:?}"La commande devrait maintenant échouer, car l'espace de noms n'existe plus. Vous devriez voir une erreur semblable à
Error from server (NotFound): namespaces "<namespace-name>" not found.
La suppression de VirtualMachineRestore n'est pas compatible avec la CLI ni l'UI
Versions : 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.14.7
Problèmes constatés : le contrôleur VirtualMachineRestore ne nettoie pas automatiquement les ressources sous-jacentes (VolumeRestore, Restore) lors de la suppression d'une ressource VirtualMachineRestore. Vous devez effectuer un nettoyage manuel.
Cela s'applique que vous supprimiez des données à l'aide de kubectl delete ou de l'interface utilisateur.
Solution : La solution consiste à supprimer manuellement les ressources dépendantes dans le bon ordre, puis à supprimer le finaliseur de la ressource VirtualMachineRestore.
Définissez le fichier kubeconfig pour qu'il pointe vers le cluster de gestion.
export MGMT_KUBECONFIG=<path_to_management_kubeconfig>Identifiez le
VirtualMachineRestoreà supprimer et son espace de noms.export VM_RESTORE_NAME=<vm-restore-to_be_deleted> export NAMESPACE=<namespace-of-vm-restore>Recherchez et supprimez les ressources
VolumeRestoreassociées. Elles sont créées avec un libellé qui les associe àVirtualMachineRestore.# Find and delete all associated VolumeRestores. kubectl delete volumerestores.backup.gdc.goog --all-namespaces -l "virtualmachine.gdc.goog/virtual-machine-restore-name=${VM_RESTORE_NAME:?}" --kubeconfig "${MGMT_KUBECONFIG:?}"Recherchez et supprimez les ressources
Restoreassociées. Elles sont créées avec un libellé qui les associe àVirtualMachineRestore.# Find and delete all associated Restores. kubectl delete restores.backup.gdc.goog -n "${NAMESPACE:?}" -l "virtualmachine.gdc.goog/virtual-machine-restore-name=${VM_RESTORE_NAME:?}" --kubeconfig "${MGMT_KUBECONFIG:?}"Exécutez
kubectl deletesi ce n'est pas déjà fait, puis supprimez le finaliseur de la ressourceVirtualMachineRestore. Il s'agit de la dernière étape qui permet au garbage collector Kubernetes de supprimer la ressource.kubectl patch virtualmachinerestores.virtualmachine.gdc.goog "${VM_RESTORE_NAME:?}" -n "${NAMESPACE:?}" --type=merge -p '{"metadata":{"finalizers":null}}' --kubeconfig "${MGMT_KUBECONFIG:?}"Vérifiez la suppression.
kubectl get virtualmachinerestores.virtualmachine.gdc.goog "${VM_RESTORE_NAME:?}" -n "${NAMESPACE:?}" --kubeconfig "${MGMT_KUBECONFIG:?}"La commande doit renvoyer une erreur
NotFound, confirmant que la ressource a été supprimée.
Le pod du plan de contrôle de sauvegarde plante en raison d'une mémoire insuffisante
Versions : 1.14.4 et versions ultérieures
Symptômes : l'état du pod gpcbackup-controlplane-controller dans l'espace de noms système gpc-backup du cluster d'infrastructure de l'organisation est CrashLoopBackOff. Lorsque cette erreur se produit, les opérations de sauvegarde et de restauration échouent, cessent de répondre ou ne fonctionnent pas comme prévu.
Solution : Augmentez les limites de mémoire pour le déploiement gpcbackup-controlplane-controller en suivant BACK-R0005. Cette méthode applique un SubcomponentOverride pour ajuster les demandes et les limites de ressources de processeur et de mémoire.
La suppression de cluster d'utilisateur est bloquée.
Versions : 1.14.7 et ultérieures
Symptômes : les clusters sont bloqués à l'état "Suppression" en raison de problèmes liés aux finaliseurs.
Solution : Vérifiez si les volumes de stockage ont des relations SnapMirror avant de supprimer le cluster. Pour en savoir plus, consultez BACK-R0109.
La restauration est bloquée en raison d'une demande de volume persistant en attente
Versions : 1.14.3 et ultérieures
Symptômes : Les contrôleurs de revendication de volume persistant (PVC) ne parviennent parfois pas à communiquer avec les agents de sauvegarde dans le cluster d'infrastructure de l'organisation. Bien que ce problème n'ait pas d'incidence sur la fonctionnalité de sauvegarde, il peut entraîner le blocage d'une opération de restauration de volume à l'état Pending, qui finit par expirer. Ce problème affecte les opérations de restauration qui impliquent une restauration de volume, comme la fonctionnalité de restauration du service de base de données pour le clonage et la restauration d'une charge de travail utilisateur.
Si ce problème survient, les opérations de restauration ultérieures au sein du cluster concerné échoueront jusqu'à ce que vous redémarriez manuellement l'agent de sauvegarde correspondant.
Pour confirmer que votre problème de restauration est lié à ce problème spécifique, vous devez examiner les journaux de l'agent de sauvegarde :
Suivez IAM-R0005 pour obtenir le rôle BACK Debugger nécessaire (
back-cluster-debugger) en appliquant la ressourceExpirationClusterRoleBinding.Suivez IAM-R0004 pour générer le fichier kubeconfig du cluster d'infrastructure de l'organisation. Tous les agents de sauvegarde s'exécutent dans le cluster d'infrastructure de l'organisation.
Identifiez l'agent de sauvegarde qui facilite la restauration :
kubectl --kubeconfig ORG_INFRA_KUBECONFIG get statefulsets \ --all-namespaces | grep gpcbackup-agentRemplacez
ORG_INFRA_KUBECONFIGpar le chemin d'accès au fichier kubeconfig du cluster d'infrastructure de l'organisation.Le résultat ressemble à ce qui suit :
NAMESPACE NAME READY AGE gpc-backup-g-org-1-shared-service-cluster-system gpcbackup-agent-g-org-1-shared-service 1/1 22d gpc-backup-system gpcbackup-agent 1/1 22d gpc-backup-system gpcbackup-agent-cp 1/1 22d gpc-backup-user-vm-1-cluster-system gpcbackup-agent-user-vm-1 1/1 22d gpc-backup-user-vm-2-cluster-system gpcbackup-agent-user-vm-2 1/1 22dLisez le résultat et identifiez l'agent de sauvegarde correspondant à votre restauration. Par exemple, si l'espace de noms StatefulSet concerné dans le résultat est
gpc-backup-user-vm-1-cluster-system, l'agent de sauvegarde estgpcbackup-agent-user-vm-1.Recherchez le message d'erreur dans les journaux du StatefulSet pour confirmer le problème :
kubectl --kubeconfig=ORG_INFRA_KUBECONFIG logs statefulsets/BACKUP_AGENT \ -n NAMESPACE | grep "Failed to watch \*v1.PersistentVolumeClaim"Remplacez les éléments suivants :
ORG_INFRA_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'infrastructure de l'organisation.BACKUP_AGENT: agent de sauvegarde que vous avez identifié à l'étape précédente.NAMESPACE: espace de noms que vous avez identifié à l'étape précédente.
Si des journaux correspondants sont disponibles, vous êtes concerné par ce problème connu.
Solution de contournement : pour contourner le problème, procédez comme suit :
Redémarrez l'agent de sauvegarde :
kubectl --kubeconfig=ORG_INFRA_KUBECONFIG rollout restart \ statefulsets/BACKUP_AGENT -n NAMESPACERemplacez les éléments suivants :
ORG_INFRA_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'infrastructure de l'organisation.BACKUP_AGENT: agent de sauvegarde que vous avez identifié lors de la confirmation du problème.NAMESPACE: espace de noms que vous avez identifié lors de la confirmation du problème.
Le résultat ressemble à ce qui suit :
statefulset.apps/gpcbackup-agent-g-org-1-shared-service restartedPatientez jusqu'à 20 minutes pour que les opérations en attente reprennent automatiquement.
Vous pouvez effectuer une autre restauration pour le même cluster de destination une fois le redémarrage de l'agent de sauvegarde terminé. Une fois cette solution de contournement appliquée, il n'y aura aucun effet secondaire. Il n'est nécessaire de suivre cette solution de contournement qu'une seule fois par cluster concerné.
Gestion des clusters
Le sous-composant kub-gpu-controller ne se rapproche pas
Versions : 1.14.3
Problèmes constatés : Le sous-composant g-gdchservices-shared-service-cluster/kub-gpu-controller de l'organisation gdchservices ne se réconcilie pas. Le résultat suivant s'affiche :
│ Message: Reconciliation error: E0321 - runtime parameter: configRunner error
| (full log in oclcm-configrunner pod): rpc error: code = Unknown desc = failed
| to execute binary: exit status 1. Output:
│ <
│ I framework.go:159] "Reading input secret"
| inputSecretKey="g-gdchservices-shared-service-cluster/kub-gpu-controller-backend-parameter"
│ I framework.go:175] "Processing job" jobType=parameter
│ Error: no matched clusterName
│ >
Cet échec empêche le démarrage des machines GPU dans l'organisation gdchservices.
Solution : Passez à la version 1.14.4 ou ultérieure pour atténuer le problème.
Impossible de supprimer un pool de nœuds d'un cluster standard
Versions : 1.14.3, 1.14.4, 1.14.5
Corrigé : 1.14.6
Symptômes : la suppression des pools de nœuds obsolètes des clusters Standard échoue et les pools de nœuds ne sont pas supprimés dans le délai prévu. Les clusters standards sont en aperçu privé et ne sont peut-être pas disponibles pour tous les clients.
Solution : Supprimez manuellement les pools de nœuds obsolètes.
Cluster bloqué à l'état "Suppression en cours"
Versions : 1.14.6 et versions ultérieures
Problèmes constatés : lors de la suppression d'un cluster Kubernetes, il peut rester bloqué à l'état Deleting. Vérifiez l'état de votre cluster en exécutant la commande suivante :
kubectl get cluster CLUSTER_NAME -n platform \
--kubeconfig MANAGEMENT_API_SERVER
Le résultat ressemble à ce qui suit :
NAMESPACE NAME STATE K8S VERSION
platform test-cluster Deleting 1.28.15-gke.100
Vous pouvez également vérifier le problème en vérifiant l'état de l'espace de noms de votre cluster :
kubectl describe ns/CLUSTER_NAME-cluster \
--kubeconfig MANAGEMENT_API_SERVER
Le résultat ressemble à ce qui suit :
Name: test-cluster
Labels: kubernetes.io/metadata.name=test-cluster
Status: Terminating
Conditions:
Type Status LastTransitionTime Reason Message
---- ------ ------------------ ------ -------
NamespaceContentRemaining True DATE SomeResourcesRemain Some resources are remaining: backendservices.networking.gdc.goog has 1 resource instances, forwardingruleinternals.networking.gdc.goog has 1 resource instances
NamespaceFinalizersRemaining True DATE SomeFinalizersRemain Some content in the namespace has finalizers remaining: backendservice.finalizers.networking.gdc.goog in 2 resource instances
L'espace de noms du cluster est bloqué à l'état Terminating, et les conditions NamespaceContentRemaining et NamespaceFinalizersRemaining sont définies sur True.
Solution de contournement : pour contourner le problème, procédez comme suit :
Corrigez l'API des règles de transfert :
kubectl patch forwardingruleinternals.networking.gdc.goog -n "CLUSTER_NAME-cluster" \ cluster-control-plane-vip-fr -p '{"metadata":{"finalizers":[]}}' --type='merge'Corrigez l'API des services de backend :
kubectl patch backendservices.networking.gdc.goog -n "CLUSTER_NAME-cluster" \ cluster-control-plane-vip-bes -p '{"metadata":{"finalizers":[]}}' --type='merge'
Service de base de données
Cette section liste les problèmes connus du service de base de données.
Clonage de base de données AlloyDB Omni bloqué
Versions : 1.14.6 et antérieures
Corrigé : 1.14.7
Symptômes : lorsqu'un utilisateur clone un cluster AlloyDB Omni à partir d'un moment précis, le cluster de base de données cloné reste bloqué avec l'erreur DBSE0005 et ne peut pas devenir prêt. La ressource restore.alloydb correspondante est bloquée dans la phase "ProvisionInProgress".
Solution de contournement : Pour contourner ce problème, choisissez soigneusement le point dans le temps à partir de la COMPLETETIME des sauvegardes réussies.
Liste les sauvegardes AlloyDB Omni disponibles à partir desquelles cloner sur le serveur de l'API Management.
kubectl get backups.alloydb -n source-dbcluster-namespace
Exemples de résultats :
NAMESPACE NAME PHASE COMPLETETIME
db1 backupplan1-20240908215001 Succeeded 2024-09-08T21:37:38Z
db1 backupplan1-20240909215001 Succeeded 2024-09-09T21:16:18Z
db1 backupplan1-20240910215001 Succeeded 2024-09-10T21:09:38Z
db1 backupplan1-20240911215001 Succeeded 2024-09-11T21:50:47Z
Choisissez une valeur COMPLETETIME comme point temporel pour le clonage. Notez que l'heure est exprimée en temps UTC.
DNS
L'alerte "GlobalCustomerRootDNSServerNotReachable" est déclenchée à tort
Versions : 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.14.7, 1.14.8
Symptômes : l'alerte DNS-A0021 est déclenchée, ce qui suggère GlobalCustomerRootDNSServerNotReachable.
La CR Probe pour global-customer-root-dns dans org-mp ne contient pas egress: true dans la spécification.
Solution :
Définissez le chemin d'accès KUBECONFIG pour
org-mgmt:export MGMT_KUBECONFIG=MANAGEMENT_KUBECONFIGMettez en veille le sous-composant
core-mzqui gère le CR de la sonde :kubectl --kubeconfig "${MGMT_KUBECONFIG:?}" annotate subcomponent -n global-kube-system dns-core-mz lcm.private.gdc.goog/paused=trueModifiez le CR de vérification actuel à partir de
org-mp:kubectl --kubeconfig "${MGMT_KUBECONFIG:?}" edit probes -n dns-system global-customer-root-dnsMettez à jour la spécification pour inclure
egress: Trueet appliquez la modification. Notez queCLUSTER_NAMEetGLOBAL_CUSTOMER_ROOT_IPrestent inchangés.apiVersion: prober.private.gdc.goog/v1alpha1 kind: Probe metadata: name: global-customer-root-dns spec: egress: True matchClusters: - CLUSTER_NAME probeJobs: - moduleName: dns_udp_global_customer_root name: healthy-dns-global-customer-root targets: - GLOBAL_CUSTOMER_ROOT_IP
Cette solution de contournement corrige le testeur. Toute fausse alerte devrait disparaître au bout de 15 minutes.
Stockage de fichiers/blocs
Impossible d'installer le volume de partage de fichiers dans la VM
Versions : 1.14.6, 1.14.7
Symptômes : la mise à jour des autorisations de stockage réseau échoue lorsqu'un nouveau nœud est ajouté à un cluster, ce qui peut entraîner le refus des demandes de montage NFS.
Il est possible qu'une erreur access denied by server s'affiche lorsque vous installez un partage de fichiers NFS.
Solution : redémarrez les réconciliateurs file-share ou proxy-group, ou modifiez la ressource FileShare pour déclencher une mise à jour.
Pare-feu
Il manque une règle de stratégie de sécurité pour l'adresse dans le CR de sous-réseau.
Versions : 1.14.3
Symptômes : une organisation est inaccessible, car le groupe d'adresses du pare-feu est manquant dans la ressource personnalisée de sous-réseau global créée par le client dans le serveur d'API global de l'organisation.
Solution : Suivez les étapes du manuel de réparation FW-G0002 pour ajouter manuellement une règle de stratégie de sécurité afin d'autoriser le trafic.
Les pare-feu GDC refusent le trafic vers OIR pour le plan de gestion et le plan de données.
Versions : 1.14.3, 1.14.4
Symptômes : une fois la ressource personnalisée OCITTopology déployée, la connectivité entre OIR et le plan de gestion et le plan de données GDC est interrompue.
Solution : Suivez la procédure décrite dans le manuel d'entretien FW-G0002 pour ajouter manuellement des règles de stratégie de sécurité dans le cluster d'administrateur racine afin d'autoriser le trafic.
Les règles de stratégie de sécurité suivantes sont requises :
apiVersion: firewall.private.gdc.goog/v1alpha2
kind: SecurityPolicyRule
metadata:
labels:
firewall.private.gdc.goog/policy-org: root
firewall.private.gdc.goog/policy-type: perimeter
name: ocit-data-egress
namespace: root
spec:
action: allow
destination:
addresses:
- OCIT_CIDR
zones:
- vsys1-octransit-data
firewallVirtualSystemRef:
name: ocvsys1-root
priority: 60000
profile:
type: none
service:
option: any
source:
addresses:
- ZONE_INFRA_CIDR
zones:
- vsys1-oc-data
---
apiVersion: firewall.private.gdc.goog/v1alpha2
kind: SecurityPolicyRule
metadata:
labels:
firewall.private.gdc.goog/policy-org: root
firewall.private.gdc.goog/policy-type: perimeter
name: ocit-data-igress
namespace: root
spec:
action: allow
source:
addresses:
- OCIT_CIDR
zones:
- vsys1-octransit-data
firewallVirtualSystemRef:
name: ocvsys1-root
priority: 60000
profile:
type: none
service:
option: any
destination:
addresses:
- ZONE_INFRA_CIDR
zones:
- vsys1-oc-data
—-
apiVersion: firewall.private.gdc.goog/v1alpha2
kind: SecurityPolicyRule
metadata:
labels:
firewall.private.gdc.goog/policy-org: root
firewall.private.gdc.goog/policy-type: perimeter
name: ocit-mgmt-egress
namespace: root
spec:
action: allow
destination:
addresses:
- OCIT_CIDR
zones:
- vsys1-octransit-mgmt
firewallVirtualSystemRef:
name: ocvsys1-root
priority: 60000
profile:
type: none
service:
option: any
source:
addresses:
- MGMT_CIDR
zones:
- vsys1-oc-mgmt
---
apiVersion: firewall.private.gdc.goog/v1alpha2
kind: SecurityPolicyRule
metadata:
labels:
firewall.private.gdc.goog/policy-org: root
firewall.private.gdc.goog/policy-type: perimeter
name: ocit-mgmt-ingress
namespace: root
spec:
action: allow
source:
addresses:
- OCIT_CIDR
zones:
- vsys1-octransit-mgmt
firewallVirtualSystemRef:
name: ocvsys1-root
priority: 60000
profile:
type: none
service:
option: any
destination:
addresses:
- MGMT_CIDR
zones:
- vsys1-oc-mgmt
Remplacez les éléments suivants :
OCIT_CIDR: plages d'adresses IP dans le champocitCIDRdu questionnaire d'informations client (CIQ).MGMT_CIDR: plages d'adresses IP dans le champoobManagementCIDRsdu questionnaire d'informations client (CIQ).ZONE_INFRA_CIDR: plages d'adresses IP dans le champzoneInfraCIDRsdu questionnaire d'informations client (CIQ).
Le pare-feu GDC refuse le trafic interzone et interorganisation
Versions : 1.14.3, 1.14.4, 1.14.5
Problèmes constatés : le trafic inter-zones et inter-organisations est bloqué par défaut par les pare-feu.
Solution : Suivez les étapes du runbook pour ajouter manuellement des règles de stratégie de sécurité afin d'autoriser le trafic.
Le pare-feu n'accepte pas les AttachmentGroup dont l'identifiant est identique au nom de l'organisation
Versions : 1.14.3 et ultérieures
Symptômes : après le déploiement d'un AttachmentGroup, si le champ identifier de cet objet AttachmentGroup est identique à orgName, le pare-feu ne parvient pas à analyser cet objet et les mises à jour de la configuration du pare-feu sont bloquées. Voici un exemple de AttachmentGroup problématique :
apiVersion: system.private.gdc.goog/v1alpha1
kind: AttachmentGroup
metadata:
name: attachment-group-org-1234
namespace: gpc-system
spec:
identifier: myorg
entities:
- orgName: myorg
domainType: OrgMixed
Solution : Évitez d'utiliser le nom de l'organisation comme identifiant. Plusieurs options s'offrent à vous pour corriger le AttachmentGroup incorrect.
Choisissez l'une des options suivantes pour corriger le AttachmentGroup problématique.
Ajoutez une chaîne à la fin de l'identifiant d'origine avec un tiret :
apiVersion: system.private.gdc.goog/v1alpha1 kind: AttachmentGroup metadata: name: attachment-group-org-1234 namespace: gpc-system spec: identifier: myorg-orgdx entities: - orgName: myorg domainType: OrgMixedAjoutez une chaîne au début de l'identifiant d'origine avec un tiret :
apiVersion: system.private.gdc.goog/v1alpha1 kind: AttachmentGroup metadata: name: attachment-group-org-1234 namespace: gpc-system spec: identifier: orgdx-myorg entities: - orgName: myorg domainType: OrgMixedRemplacez l'identifiant d'origine par une autre chaîne :
apiVersion: system.private.gdc.goog/v1alpha1 kind: AttachmentGroup metadata: name: attachment-group-org-1234 namespace: gpc-system spec: identifier: dxidentifier entities: - orgName: myorg domainType: OrgMixed
Port
Le secret de la CLI Harbor devient non valide après une sauvegarde et une restauration
Versions : 1.14.3
Symptômes : après une sauvegarde et une restauration de Harbor, les secrets de CLI deviennent non valides et doivent être recréés.
Solution de contournement : pour résoudre ce problème, procédez comme suit :
- Connectez-vous à Harbor avec un compte utilisateur IAP.
- Cliquez sur votre nom d'utilisateur, puis sélectionnez Profil utilisateur.
- Cliquez sur Plus.
- Créez un autre secret CLI automatiquement ou manuellement.
Pour en savoir plus sur Harbor dans GDC, consultez la présentation de Harbor.
Le job de sauvegarde et de restauration Harbor est en concurrence pour l'autorisation
Versions : 1.14.3, 1.14.4
Problèmes constatés : lorsque plusieurs instances Harbor existent dans différents projets utilisateur, les opérations de sauvegarde et de restauration sont en concurrence pour les contrôles d'accès basés sur les rôles et présentent un taux d'échec élevé.
Solution : Pour atténuer ce problème, suivez ces étapes afin de créer manuellement une liaison de rôle pour chaque espace de noms dans lequel des instances Harbor sont créées :
Définissez les variables d'environnement requises :
INSTANCE_NAMESPACE=INSTANCE_NAMESPACE INFRA_CLUSTER_KUBECONFIG=INFRA_CLUSTER_KUBECONFIGRemplacez les éléments suivants :
INFRA_CLUSTER_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'infrastructure.INSTANCE_NAMESPACE: espace de noms dans lequel les instances Harbor de Managed Harbor Service (MHS) sont créées.
Créez la liaison de rôle pour la solution de contournement :
kubectl --kubeconfig ${INFRA_CLUSTER_KUBECONFIG:?} create \ rolebinding ${INSTANCE_NAMESPACE:?}-mhs-backup-manual-rolebinding \ --role=haas-backup-secret-access-role --serviceaccount=${INSTANCE_NAMESPACE:?}-haas-system:haas-backup-sa \ --namespace=haas-system
La taille de la sauvegarde Harbor affiche des valeurs nulles
Versions : 1.14.3, 1.14.4
Symptômes : La mesure de la taille des sauvegardes Harbor n'est pas implémentée pour le moment. Dans la console GDC, les champs SizeBytes affichent la valeur 0 et la colonne Size affiche la valeur 0 Mo. Ce comportement est normal pour le moment.
Erreur d'autorisation sur les ressources de sauvegarde sur la page de la console Harbor Registry
Versions : 1.14.3, 1.14.4
Symptômes : si vous ne disposez pas du rôle d'administrateur d'instance Harbor, une erreur d'autorisation s'affiche sur la ressource de sauvegarde lorsque vous consultez la page Harbor Container Registry dans la console GDC. Cette erreur s'affiche, car les informations de sauvegarde ont été ajoutées récemment à la page Harbor Container Registry, mais l'autorisation de lecture de la ressource de sauvegarde n'a pas été accordée aux rôles IAM autres que l'administrateur de l'instance Harbor.
Les autres éléments de la console GDC sur la page Harbor Container Registry fonctionnent toujours comme prévu. Pour en savoir plus sur les rôles dans GDC, consultez Définitions des rôles.
Page "La rotation du mot de passe de la base de données est bloquée"
Versions : 1.14.3, 1.14.4, 1.14.5, 1.14.6
Symptômes : des erreurs sont générées concernant l'authentification pour les requêtes adressées à la base de données, telles que failed SASL auth (FATAL: password authentication failed for user "dbsadmin" (SQLSTATE 28P01)), et de nombreuses requêtes de rotation générées automatiquement sont présentes pour un même secret rotatif.
Solution : Supprimez les demandes de rotation supplémentaires non prêtes pour un secret rotatif.
Définissez KUBECONFIG sur le serveur d'API mp.
Exportez l'espace de noms :
NAMESPACE=haas-systemVérifiez si des secrets rotatifs dans
haas-systemne sont pas prêts :kubectl get rotatablesecrets -n ${NAMESPACE?}Le résultat peut ressembler à l'exemple suivant :
NAME CREDENTIALID READY AGE haasdb-pw-ar-test HAAS-0002 True 109d haasdb-pw-gardener-harbor HAAS-0002 True 178d haasdb-pw-haas-alice HAAS-0002 Unknown 166d haasdb-pw-myinstance HAAS-0002 True 80d haasdb-pw-osd HAAS-0002 True 158d haasdb-pw-saptest HAAS-0002 True 91dExportez le nom du secret rotatif, par exemple :
ROTATABLE_SECRET=haasdb-pw-haas-aliceSupprimez les demandes de rotation supplémentaires qui ne sont pas prêtes :
CUR_ROTATABLE_SECRET=$(kubectl get rotatablesecret ${ROTATABLE_SECRET?} -n ${NAMESPACE?} -ojsonpath='{.status.currentRotationRequestRef.name}') kubectl get rotationrequests -n ${NAMESPACE?} -o json | jq -r --arg rotatableSecret "${ROTATABLE_SECRET?}" --arg curRotatableSecret "${CUR_ROTATABLE_SECRET?}" '.items[] | select(.metadata.ownerReferences[0]? | .name==$rotatableSecret) | select(.status.conditions[0]? | .type=="Ready" and .status=="False") | select(.metadata.name != $curRotatableSecret) | .metadata.name' | xargs -r kubectl delete rotationrequests -n ${NAMESPACE?}
Module de sécurité matérielle
Les licences d'essai HSM désactivées sont toujours détectables
Versions : 1.14.3, 1.14.4, 1.14.5
Symptômes : En raison d'un problème connu existant dans CipherTrust Manager, les licences d'essai désactivées sont toujours détectables et peuvent déclencher de fausses alertes d'expiration.
Solution de contournement : consultez HSM-R0003 pour vérifier les licences normales actives et supprimer les licences d'essai désactivées.
Fuite de descripteur de fichier du daemon hôte HSM
Versions : 1.14.x
Symptômes : si les HSM s'exécutent pendant plus de 30 jours, une fuite de descripteur de fichier peut entraîner l'arrêt de la réponse du service host-daemon, ce qui génère une erreur ServicesNotStarted.
Solution : Redémarrez le service host-daemon. Pour ce faire, demandez à votre opérateur d'infrastructure de se connecter au HSM via SSH en tant qu'utilisateur ksadmin et d'exécuter la commande suivante :
sudo systemctl restart host-daemon
Si cela ne fonctionne pas, votre IO peut redémarrer le HSM défectueux.
Les HSM échouent avec l'erreur ValidateNetworkConfig après le démarrage
Versions : 1.14.x
Symptômes : les ressources personnalisées HSM n'atteignent pas l'état Ready et échouent en raison d'une erreur ValidateNetworkConfig. Le message d'erreur suivant s'affiche : data0 interface MAC address {} is not active. Cette erreur se produit si le système est redémarré et qu'une autre interface de données principale est définie.
Solution : Suivez le runbook HSM-R0059 et réappliquez la configuration réseau du HSM pour le réseau de données. Vous pouvez suivre ce runbook même si plusieurs HSM présentent cette erreur.
SANTÉ
Alertes SLO fausses
Versions : 1.14.3
Symptômes : un SLO successRange se déclenche de manière erronée.
Solution de contournement : Demandez à l'opérateur d'infrastructure (IO) de vérifier si l'alerte correspond à un problème réel ou à une fausse alerte.
Pour ce faire, lorsqu'une alerte est déclenchée, suivez le runbook correspondant pour résoudre la cause sous-jacente de l'alerte d'objectif de niveau de service (SLO).
Cas 1 : Si le runbook résout le problème et que l'alerte cesse de se déclencher, l'IO peut clôturer l'incident associé.
Cas 2 : Si le runbook est terminé, mais que l'alerte continue de se déclencher, cela indique un faux positif potentiel. Vérifiez si le SLO est enfreint :
kubectl get servicelevelobjective {SLO_NAME} -n {SLO_NAMESPACE} -o yaml --kubeconfig root-admin-kubeconfig| awk '/successRange/ { found1 = 1 } /labelFilter/ { found2 = 1 } END { if (found1 && found2) print "Broken 1.14.3 SLO detected"; else print "SLO does not have a known 1.14.3 issue" }'En fonction du résultat : s'il confirme que l'alerte est une fausse alerte, l'IO doit alors désactiver l'alerte dans l'instance GDC isolée. Dans le cas contraire, transmettez le problème à l'assistance Cloud.
Dans les deux cas, il convient que l'IO escalade le problème à l'assistance Cloud pour vérifier que le composant opérationnel est en bon état.
Configurations de SLO basées sur des jauges non valides
Versions : 1.14.3, 1.14.4
Symptômes : en raison d'une mauvaise configuration, un sous-ensemble d'objectifs de niveau de service (SLO) ne génère pas d'événements bons, mauvais ou totaux. Les SLO en question sont basés sur des jauges Prometheus et doivent être configurés en conséquence.
Solution :
Version 1.14.3 : aucune solution n'est disponible. Par conséquent, les alertes SLO ne se déclencheront pas pour les SLO concernés.
Version 1.14.4 : une solution de contournement est disponible pour corriger le SLO. Pour résoudre ce problème, le paramètre isGauge: true doit être appliqué à la spécification du SLO.
Exemple de configuration d'un graphique pour un SLO :
```yaml
apiVersion: monitoring.private.gdc.goog/v1alpha1
kind: ServiceLevelObjective
metadata:
namespace: infra-obs
name: fw-packet-discard-errors-slo
spec:
successRange:
- resource: fw
description: Firewall packet discard rate with errors SLO
runbookURL: FW-R0006
goal: "0.995"
isGauge: true
period: 30d
metricName: fw_packet_discard_errors_ps
max: 2
```
Voici la liste des SLO connus qui sont corrigés avec ce paramètre :
- SLO de pare-feu :
- fw-packet-discard-errors-slo
- fw-packet-discard-no-error-slo
- fw-packet-discard-unknown-protocol-slo
- fw-uptime-slo
- SLO de fichier :
- file-ontap-appliance-availability-slo
- file-ipsec-networking-availability-slo
- file-ontap-networking-availability-slo
- file-iscsi-client-availability-slo
- file-multipath-client-availability-slo
- file-trident-client-availability-slo
Gestion de l'authentification et des accès
Échec de la création de la liaison de rôle IAM
Versions : 1.14.3
Symptômes : les noms des liaisons de rôle IAM sont générés par le système. Ces noms ne doivent pas comporter plus de 63 caractères et doivent respecter le format user-idp-prefix-rolename. Dans les cas où le nom généré dépasse la limite de 63 caractères, les liaisons de rôle ne peuvent pas être créées. Par conséquent, les autorisations définies à l'aide de rôles prédéfinis ou personnalisés ne seront pas attribuées aux utilisateurs.
Solution de contournement : La création de liaison de rôle peut réussir si le nom du rôle prédéfini ou personnalisé est très court (par exemple, 4 à 5 caractères).
Échec de la création de la liaison de rôle IAM pour les comptes de service du projet
Versions : 1.14.3, 1.14.4, 1.14.5, 1.14.6
Symptômes : Un compte de service de projet (PSA) avec le rôle organization-iam-admin ne peut pas utiliser la commande gdcloud projects add-iam-policy-binding pour s'attribuer un autre rôle, tel que le rôle project-iam-admin. Cette lacune empêche une PSA de gérer ses propres autorisations.
Solution : Vérifiez que vous disposez du rôle organization-iam-admin. Attribuez-vous ensuite le rôle project-iam-admin dans l'espace de noms du projet du PSA cible, et attribuez le rôle project-iam-admin au PSA. Cette configuration des autorisations permet au PSA de s'attribuer des autorisations supplémentaires ou d'en attribuer à d'autres PSA.
Retards dans la création de rôles prédéfinis pour les nouveaux projets
Versions : 1.14.3
Symptômes : lorsqu'un projet est créé, il manque des rôles par défaut, tels que project-bucket-object-admin.
Solution : Patientez entre 15 et 60 minutes, ou redémarrez manuellement le contrôleur iam-org-admin-cm-backend-controller dans l'espace de noms iam-system sur le cluster d'infrastructure de l'organisation.
La console GDC ne peut pas créer la première liaison de rôle
Versions : 1.14.4
Symptômes : lorsque vous créez la première liaison de rôle pour une nouvelle identité de service à l'aide de la console GDC, la création de la liaison de rôle est signalée comme réussie, mais elle ne fonctionne pas réellement. Toute autre action sur l'identité du service échoue et n'a aucun effet, y compris l'ajout ou la suppression de liaisons de rôle.
Solution de contournement : Utilisez la gdcloud CLI pour créer la première liaison de rôle pour une identité de service. Toutes les actions futures effectuées avec l'identité de service à l'aide de la console GDC fonctionnent correctement une fois la première liaison de rôle associée. Pour en savoir plus, consultez Attribuer une liaison de rôle à l'identité de service.
Les AO ne peuvent pas s'accorder l'accès aux rôles dans le cluster d'infrastructure.
Versions : 1.14.3. 1.14.4
Corrigé : correctif 21 de la version 1.14.3
Symptômes : les AO ne peuvent pas s'accorder à eux-mêmes ni à d'autres utilisateurs l'accès à des rôles dans le cluster d'infrastructure.
Solution : Les utilisateurs AO doivent contacter les IO pour obtenir l'accès requis. Les IO peuvent utiliser IAC pour fournir aux utilisateurs AO l'accès requis.
Le jeton de compte de service existant devient non valide
Versions : 1.14.3
Corrigé : correctif 21 de la version 1.14.3
Symptômes : le jeton de compte de service existant émis par le cluster utilisateur devient invalide, car l'argument service-account-issuer apiserver est modifié une fois que le cluster est en cours d'exécution après l'amorçage. Ce problème empêche le pod, par exemple le pod avec un conteneur side-car istio-proxy, sur le cluster utilisateur d'authentifier à l'aide du jeton de compte de service. Il faut ensuite des heures pour que le jeton de compte de service soit actualisé avec les nouvelles configurations.
Solution : Redémarrez manuellement le pod sur le cluster d'utilisateur pour que le jeton du compte de service soit renouvelé avec les nouvelles configurations.
Infrastructure as Code (IAC)
Échec de la réconciliation du sous-composant en raison d'un espace de noms manquant
Versions : 1.14.3
Problèmes constatés : un sous-composant ne parvient pas à se réconcilier. Cela se produit parce que l'espace de noms config-management-monitoring requis n'est pas créé automatiquement dans le cluster gdchservices-mp.
Solution : Créez l'espace de noms config-management-monitoring dans le cluster gdchservices-mp à l'aide du fichier manifeste suivant :
apiVersion: v1
kind: Namespace
metadata:
labels:
configmanagement.gke.io/system: "true"
name: config-management-monitoring
annotations:
lcm.private.gdc.goog/claim-by-force: "true"
helm.sh/resource-policy: keep
Échec de la collecte des métriques IAC ConfigSync
Versions : 1.14.3, 1.14.4
Symptômes : un problème dans le sous-système de surveillance ConfigSync d'IAC empêche le déploiement otel-collector de démarrer. Les métriques ConfigSync ne sont pas collectées pour la surveillance et les alertes.
Solution : procédez comme suit dans le cluster root-admin :
- Mettez en pause le sous-composant
iac-configsync-mon. - Modifiez l'objet
MetricsProxySidecar/iac-configsync-metricsdans l'espace de nomsconfig-management-monitoring. Dans le fichier YAML
MetricsProxySidecar/iac-configsync-metrics, recherchez les éléments suivants :spec: [...] destinations: - certificate: secretName: iac-configsync-mon-target-certRemplacez cette section par ce qui suit :
spec: [...] destinations: - certificate: secretName: iac-configsync-mon-mon-target-certRedémarrez le déploiement
otel-collectordans l'espace de nomsconfig-management-monitoring.
Échec de IAC RootSync
Versions : 1.14.3
Symptômes : un problème se produit lors de la synchronisation des ressources Config Sync de GitLab vers les clusters en raison d'un secret iac-creds manquant . Les iac-creds ne sont pas permutés en raison d'un problème iacmanager.
Solution : procédez comme suit dans le cluster :
- Suivez le runbook IAC-R0015 pour résoudre le problème de secret iac-creds manquant. Il effectue la rotation des identifiants du gestionnaire IaC et de Config Sync.
Inventaire
Échec de la réconciliation de l'audit d'inventaire
Versions : 1.14.3
Problèmes constatés : le sous-composant inv-audit ne parvient pas à effectuer la réconciliation, car HarborRobotAccount n'est disponible que dans le plan de gestion.
Solution : Créez un silence dans AlertManager pour couper le son de l'alerte component_reconciliation_errors pour component: inv.
Système de gestion des clés
KMS configuré pour utiliser une clé racine CTM ne bascule pas en cas d'indisponibilité d'un HSM
Versions : 1.14.x
Symptômes : Certaines requêtes adressées au KMS échouent lorsqu'un HSM n'est pas disponible et que d'autres HSM disponibles auraient pu être utilisés. Ce problème ne s'applique que lorsque le KMS est configuré pour utiliser une clé racine CTM.
Solution : Supprimez le HSM indisponible du HSMCluster en suivant le runbook HSM-P0006. Redémarrez ensuite le déploiement kms-backend :
kubectl --kubeconfig=ORG_INFRA_KUBECONFIG rollout restart deployment/kms-backend -n kms-system
Cette commande redémarre les pods kms-backend et rétablit la connexion aux HSM du HSMCluster.
Équilibreurs de charge
Échec de la création de l'équilibreur de charge global en raison de l'épuisement du CIDR du sous-réseau
Versions : 1.14.3
Symptômes : la création d'un équilibreur de charge externe ou interne global échoue en raison d'un nombre insuffisant d'adresses IP dans les sous-réseaux mondiaux. Le système ne peut pas allouer dynamiquement d'adresses IP pour les équilibreurs de charge globaux en raison d'un contrôleur qui utilise un chemin de code incorrect. L'équilibreur de charge ne fait référence qu'à un seul sous-réseau. Si ce sous-réseau ne dispose plus d'adresses IP disponibles, il n'est pas possible de passer à un autre sous-réseau. Cette limitation entraîne l'affichage de l'erreur.
Solution de contournement : Vous devez créer votre propre sous-réseau et des adresses IP statiques pour vos ressources ForwardingRule. Pour en savoir plus sur la création de sous-réseaux, consultez Configurer des sous-réseaux pour la mise en réseau des charges de travail. Lorsque vous créez une ressource ForwardingRule, vous pouvez spécifier le sous-réseau dans le champ cidrRef.
Versions : 1.14.3
Problème constaté : les objets d'équilibreur de charge n'atteignent pas l'état Ready.
Solution : Vous devez créer des ressources Backend dont le champ spec a une valeur. Les ressources Backend identifient les points de terminaison de l'équilibreur de charge. Si vous ne fournissez pas de valeur pour le champ spec, des erreurs peuvent se produire.
La modification des ressources de l'équilibreur de charge n'entraîne pas la réconciliation des services
Versions : 1.14.3
Symptômes : la modification des ressources personnalisées de l'équilibreur de charge n'entraîne pas la réconciliation des services d'équilibrage de charge.
Solution de contournement : pour atténuer ce problème, supprimez et recréez l'équilibreur de charge en supprimant les ressources BackendService et ForwardingRule de cet équilibreur de charge.
Les noms de zones incorrects ne sont pas refusés
Versions : 1.14.3
Symptômes : la ressource BackendService globale n'accepte pas les noms de zones incorrects. Si le nom de la zone est incorrect, l'équilibreur de charge échoue au lieu de valider et de refuser la configuration.
Solution de contournement : Vous devez fournir les noms corrects des zones utilisées. Si l'équilibreur de charge est mal configuré, vous devez supprimer et recréer les ressources personnalisées de l'équilibreur de charge.
Erreur de webhook d'équilibreur de charge global et zonal
Versions : 1.14.3
Symptômes : l'erreur suivante est renvoyée :
Error from server (InternalError): error when creating "STDIN": Internal error
occurred: failed calling webhook
"projectnetworkpolicies.networking.global.gdc.goog": failed to call webhook:
Post
"https://unet-global-org-cm-webhooks.unet-system.svc/validate-networking-global-gdc-goog-v1-projectnetworkpolicy?timeout=10s":
context deadline exceeded
Solution : Pour résoudre ce problème, redémarrez et supprimez le pod unet-global-cm :
root@bootstrapper-zone1:~# k8s.org get pods -n unet-system
unet-global-org-cm-backend-controller-7df58cd9db-8szkh 1/1 Running 42 (7h22m ago) 9d
root@bootstrapper-zone1:~# k8s.org delete pods -n unet-system
unet-global-org-cm-backend-controller-7df58cd9db-8szkh
Journalisation
Le pod Loki plante ou est OOMKilled lors de la relecture du WAL
Versions : 1.14.3, 1.14.4, 1.14.5
Symptômes :
Les pods audit-logs-loki-io de l'espace de noms obs-system passent à l'état CrashLoopBackOff. Cela est dû à des échecs prématurés de la vérification de l'activité ou à un arrêt pour mémoire saturée (OOM, Out Of Memory) lors de la relecture du journal WAL (Write-Ahead Log), en raison d'une valeur wal_replay_ceiling qui dépasse la limite de mémoire du pod.
Solution :
Procédez comme suit pour ajuster la configuration de Loki afin de permettre une relecture WAL réussie. Les modifications doivent être appliquées au cluster concerné (par exemple, root-admin ou org-infra).
Définissez
KUBECONFIG=/path/to/affected-cluster.kubeconfigcomme variable d'environnement.Mettez en veille le
LoggingPipelineReconcilerpour empêcher le contrôleur d'annuler les modifications manuelles. Appliquez ce fichier manifeste :apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: log-logging-pipeline-pause namespace: root spec: subComponentRef: "log-admin" backend: operableParameters: controller: disableReconcilers: "LoggingPipelineReconciler"Vérifiez que le remplacement est actif. Le résultat doit inclure
"disable-reconcilers=LoggingPipelineReconciler".kubectl get deploy -n obs-system log-admin-backend-controller -o jsonpath='{.spec.template.spec.containers[0].args}' --kubeconfig=${KUBECONFIG} | jqDéfinissez
replay_memory_ceilingsur8GBdans le fichier ConfigMapaudit-logs-loki-io-cm.kubectl edit cm audit-logs-loki-io-cm -n obs-system --kubeconfig=${KUBECONFIG}Modifiez la section
wal:[...] wal: replay_memory_ceiling: 8GB ## <-- Change to 8GB [...]Facultatif : Mettez à l'échelle le proxy d'objet. Si les pods
obj-proxysont proches de leurs limites de ressources, faites évoluer le déploiement pour gérer la charge accrue pendant la récupération.a. Vérifiez l'utilisation des ressources :
kubectl top po -n gpc-system -l name=obj-proxy-manager --kubeconfig=${KUBECONFIG}b. Si l'utilisation est élevée, faites évoluer le déploiement :
kubectl scale deployment obj-proxy -n gpc-system --replicas=7 --kubeconfig=${KUBECONFIG}c. Si nécessaire, vous pouvez également augmenter la limite de mémoire du pod (par exemple, de
12000Mià16000Mi).Augmentez la taille de la PVC pour le pod concerné (par exemple,
loki-storage-audit-logs-loki-io-0de70Già75Gi) pour éviter la pression sur le disque. Suivez la procédure interneSUPP-R001pour redimensionner le PVC. Le redémarrage à l'étape suivante applique la nouvelle taille.Ajoutez un
startupProbeau StatefulSetaudit-logs-loki-iopour laisser le temps à la relecture WAL avant le début des vérifications d'activité. L'enregistrement de la modification déclenche un redémarrage progressif des pods (5 à 10 minutes).kubectl edit sts audit-logs-loki-io -n obs-system --kubeconfig=${KUBECONFIG}Ajoutez ce
startupProbeà la spécification du conteneuraudit-logs-loki-io:startupProbe: failureThreshold: 1000 httpGet: path: /ready port: loki scheme: HTTP periodSeconds: 10 successThreshold: 1 timeoutSeconds: 10
Vérifier la solution de contournement
Vérifiez l'état du pod et du StatefulSet : assurez-vous que tous les pods
audit-logs-loki-iosontRunninget que le StatefulSet indique que tous les réplicas sont prêts.kubectl get po -n obs-system -l app=audit-logs-loki-io --kubeconfig=${KUBECONFIG} kubectl get sts -n obs-system audit-logs-loki-io --kubeconfig=${KUBECONFIG}Vérifiez que la PVC a été redimensionnée. Le résultat attendu est
75Gi.kubectl get pvc -n obs-system loki-storage-audit-logs-loki-io-0 -o jsonpath='{.status.capacity.storage}' --kubeconfig=${KUBECONFIG} ; echoVérifiez que la récupération du fichier WAL a réussi en recherchant les messages
errors=falsedans les journaux des pods.kubectl logs -n obs-system audit-logs-loki-io-0 --kubeconfig=${KUBECONFIG} | grep -i "wal"Vérifiez que l'utilisation du répertoire
/walà l'intérieur du pod est faible.kubectl exec -n obs-system audit-logs-loki-io-0 -c audit-logs-loki-io --kubeconfig=${KUBECONFIG} -- df -Ph /walVérifiez l'état de la bague Loki :
a. Transférez le port du service Loki :
DATA_IP=$(ip -br -4 a s dev bond0| awk '{print $3}' | cut -d / -f 1) kubectl port-forward -n obs-system svc/audit-logs-loki-io --address $DATA_IP 43100:3100 --kubeconfig=${KUBECONFIG}b. Vérifiez que toutes les instances sont opérationnelles sur
http://<DATA_IP>:43100/ring.
Nettoyer le remplacement et le proxy d'objet
Une fois la validation réussie, effectuez les étapes de nettoyage suivantes.
Supprimez le remplacement du sous-composant :
kubectl delete subcomponentoverride log-logging-pipeline-pause -n root --kubeconfig=${KUBECONFIG}Si vous avez augmenté la taille du déploiement
obj-proxy, ramenez-la à sa taille d'origine.
Surveillance
Les Webhooks AlertManager n'envoient pas d'alertes pour certains clusters
Version : 1.14.3
Symptômes : Les Webhooks AlertManager ne parviennent pas à envoyer de requêtes ni de notifications d'alerte à ServiceNow depuis un cluster autre que le cluster d'administrateur racine ou le cluster dans lequel réside l'instance ServiceNow. Par conséquent, aucune alerte n'est créée dans ServiceNow pour l'organisation.
Vous pouvez identifier l'échec de l'envoi d'alertes par le webhook si vous recevez des messages de journal d'erreur à plusieurs reprises. Pour rechercher les erreurs répétées, procédez comme suit :
Exportez les variables d'environnement :
export MGMT_API_KUBECONFIG=MGMT_API_KUBECONFIGRemplacez
MGMT_API_KUBECONFIGpar le chemin d'accès au fichier kubeconfig du serveur de l'API Management.Recherchez le pod :
kubectl --kubeconfig ${MGMT_API_KUBECONFIG} get pods \ -n mon-system -o name | grep mon-alertmanager-servicenow-webhook-backend-Récupérez les journaux :
kubectl --kubeconfig ${MGMT_API_KUBECONFIG} logs POD_NAME -n mon-systemRemplacez
POD_NAMEpar le nom du pod.Recherchez les erreurs répétées qui ressemblent à ce qui suit :
Errorsendingtherequest ... read: connection reset by peer
Solution de contournement : la solution de contournement recommandée pour ce problème consiste à suspendre deux sous-composants, l'un pour les alertes de métasurveillance et l'autre pour les alertes régulières. Remplacez ensuite le libellé egress.networking.gke.io/enabled: "true" par networking.private.gdc.goog/infra-access: enabled dans le déploiement mon-alertmanager-servicenow-webhook-backend du cluster concerné. Ce libellé permet au pod de communiquer avec d'autres clusters d'infrastructure sans passer par une passerelle de sortie.
Pour appliquer la solution de contournement recommandée, procédez comme suit :
Exportez les variables d'environnement :
export ROOT_KUBECONFIG=ROOT_KUBECONFIG export MGMT_API_KUBECONFIG=MGMT_API_KUBECONFIG export ORG=ORGRemplacez les éléments suivants :
ROOT_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'administrateur racine.MGMT_API_KUBECONFIG: chemin d'accès au fichier kubeconfig du serveur de l'API Management.ORG: espace de noms de l'organisation.
Mettre en veille des sous-composants :
- Mettez en veille le sous-composant
mon-alertmanager-servicenow-webhook:
kubectl --kubeconfig ${ROOT_KUBECONFIG} annotate subcomponent "mon-alertmanager-servicenow-webhook" \ -n "${ORG}" lcm.private.gdc.goog/paused=true- Mettez en veille le sous-composant
mon-meta-monitoring:
kubectl --kubeconfig ${ROOT_KUBECONFIG} annotate subcomponent "mon-meta-monitoring" \ -n "${ORG}" lcm.private.gdc.goog/paused=true- Mettez en veille le sous-composant
Mettez à jour le déploiement
mon-alertmanager-servicenow-webhook-backendqui couvre la plupart des alertes :kubectl --kubeconfig ${MGMT_API_KUBECONFIG} edit deployment \ -n mon-system mon-alertmanager-servicenow-webhook-backendRemplacez le libellé dans
spec.template.metadata.labelsen remplaçantegress.networking.gke.io/enabled: "true"parnetworking.private.gdc.goog/infra-access: "enabled".Mettez à jour le déploiement
meta-alertmanager-servicenow-webhookqui couvre les alertes liées à la pile de surveillance :kubectl --kubeconfig ${MGMT_API_KUBECONFIG} edit deployment \ -n mon-system meta-alertmanager-servicenow-webhookRemplacez le libellé dans
spec.template.metadata.labelsen remplaçantegress.networking.gke.io/enabled: "true"parnetworking.private.gdc.goog/infra-access: "enabled".
Vous pouvez également utiliser Grafana pour afficher les mêmes alertes.
Les incidents ServiceNow sont parfois dupliqués
Version : 1.14.3
Symptômes : il est possible que des incidents ServiceNow en double s'affichent pour le même pod.
Solution de contournement : vous pouvez identifier les demandes en double en comparant les empreintes digitales dans la description de l'incident.
Les métriques d'infrastructure peuvent être trop sensibles
Version : 1.14.3
Symptômes : des alarmes peuvent s'afficher pour l'alerte oclcm-reconciler-success-rate.
Solution : Vous pouvez couper le son de l'alerte en toute sécurité. Il s'agit d'une alerte trop bruyante. Nous nous efforçons d'améliorer le signal.
Les métriques de réconciliation peuvent être trop sensibles
Version : 1.14.3, 1.14.4, 1.14.5
Symptômes : des alarmes peuvent s'afficher pour l'alerte component_reconciliation_errors.
Solution : Vous pouvez couper le son de l'alerte en toute sécurité en suivant le runbook MON-R2009. Cette alerte est trop bruyante.
Deux fausses alertes sont ouvertes dans le cluster d'administrateur racine.
Version : 1.14.3
Problèmes constatés : les alertes MON-A0001_slow et MON-A0001_fast sont en état de déclenchement dans le cluster d'administrateur racine.
L'incident sur ServiceNow ressemble à l'exemple suivant :
number priority sys_created_on u_organization_id short_description active
INC004043 1 - Critical 2025-04-30 08:29:00 root MON-A0001_slow true
INC0040427 1 - Critical 2025-04-30 08:28:55 root MON-A0001_fast true
L'incident est décrit comme suit :
Description:
Message: "Blackbox monitoring metrics pipeline down"
Runbook URL: MON-R0001
Generator URL: cortex.mon-system.svc:9009/graph?g0.expr=%28mon_metrics_pipeline_error_rate1h%7B_slo_alert_id%3D%22mon-a0001-blackbox-monitoring-obs-system%2Finfra-obs-obs-system%22%7D+%3E+%2814.4+%2A+0.05%29+and+mon_metrics_pipeline_error_rate5m%7B_slo_alert_id%3D%22mon-a0001-blackbox-monitoring-obs-system%2Finfra-obs-obs-system%22%7D+%3E+%2814.4+%2A+0.05%29%29+or+%28mon_metrics_pipeline_error_rate6h%7B_slo_alert_id%3D%22mon-a0001-blackbox-monitoring-obs-system%2Finfra-obs-obs-system%22%7D+%3E+%286+%2A+0.05%29+and+mon_metrics_pipeline_error_rate30m%7B_slo_alert_id%3D%22mon-a0001-blackbox-monitoring-obs-system%2Finfra-obs-obs-system%22%7D+%3E+%286+%2A+0.05%29%29&g0.tab=1
AlertCode: MON-A0001
Severity: critical
Cluster: org-1-admin
Namespace: <no value>
Pod Name: <no value>
fingerprint: 3b386f1373178e97
Solution de contournement : suivez ces étapes pour résoudre le problème uniquement dans le cluster d'administrateur racine :
Supprimez le libellé
monitoring.gdc.goog/metamonitoring-project=mon-systemdansmon-a0001-blackbox-monitoring-obs-systemMonitoringRule.Supprimez toutes les règles d'enregistrement portant le nom
mon_metrics_pipeline_absentet la valeur du libellé de clusterORG_NAME-admindemon-a0001-blackbox-monitoring-obs-systemMonitoringRule.L'exemple suivant montre une règle d'enregistrement
mon_metrics_pipeline_absentà supprimer :Expr: absent(probe_success{job="mon-system/meta-monitoring-meta-prometheus/meta_prometheus_probe_metric",cluster="gdchservices-admin"}) OR on() vector(0) Labels: _source_project: blackbox-monitoring-obs-system Cluster: gdchservices-admin Job: mon-system/meta-monitoring-meta-prometheus/meta_prometheus_probe_metric Record: mon_metrics_pipeline_absent
Les alertes MON_A0001_slow et MON_A0001_fast reviennent à l'état Normal au bout de quelques minutes (environ 40 minutes).
Le gestionnaire du contrôleur d'administrateur racine affiche un taux d'erreur élevé
Version : 1.14.3
Symptômes : Des alarmes peuvent s'afficher pour l'alerte ControllerReconciliationErrorRateHigh. Le gestionnaire de contrôleurs affichera des journaux indiquant : ApplianceStorage.ceph.storage.private.gdc.goog \"appliance-storage\"
not found
Solution : Vous pouvez désactiver le contrôleur à l'origine de l'erreur sans risque.
Exportez les variables d'environnement :
export ROOT_KUBECONFIG=ROOT_KUBECONFIGModifiez le déploiement du gestionnaire de contrôleurs d'administrateur racine :
kubectl --kubeconfig ${ROOT_KUBECONFIG} edit deployment \ -n gpc-system root-admin-controllerDans le conteneur
manager, s'il n'existe pas encore d'argument--disable-reconcilers, ajoutez-en un avec la valeur--disable-reconcilers=ApplianceStorageTunnelReconciler. Si c'est le cas, ajoutez le réconciliateurApplianceStorageTunnelReconcileravec une virgule. Par exemple,--disable-reconcilers=ManagementSwitch,ManagementAggSwitch,TORSwitch,AggSwitch,ApplianceTORSwitch,ApplianceStorageTunnelReconciler:
Les journaux d'erreurs devraient être effacés.
Les tableaux de bord KUB n'affichent aucune donnée dans tous les panneaux PA
Versions : 1.14.3
Symptômes : les tableaux de bord KUB n'affichent aucune donnée dans tous les panneaux de Grafana pour les administrateurs de plate-forme.
Solution : Mettez en veille le sous-composant KSM et mettez à jour monitoringtarget et metricsproxysidecar :
Mettez le sous-composant en veille :
export SUBCOMPONENT_NAME=mon-kube-state-metrics export SUBCOMPONENT_NAMESPACE=ORG_NAME kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG annotate subcomponent "${SUBCOMPONENT_NAME:?}" -n "${SUBCOMPONENT_NAMESPACE:?}" lcm.private.gdc.goog/paused=trueRemplacez les éléments suivants :
- ORG_NAME : nom de l'organisation
- ROOT_ADMIN_KUBECONFIG : chemin d'accès au fichier kubeconfig
root-admin
Ajoutez les éléments suivants à la métrique
mon-kube-state-metrics-metrics-proxymetricsproxysidecar dans la section.spec.destinations:- certificate: secretName: mon-pa-kube-state-metrics-cert port: 8091Le fichier metricsproxysidecar mis à jour peut se présenter comme suit :
... spec: containerName: otel-collector destinations: - certificate: secretName: mon-io-kube-state-metrics-cert port: 8090 - certificate: secretName: mon-pa-kube-state-metrics-cert port: 8091 resources: limits: ...Supprimez la section
matchClusters:de lamon-pa-kube-state-metricsmonitoringtargetspec. Lamon-pa-kube-state-metricsmonitoringtargetspecmise à jour peut se présenter comme suit :... spec: podMetricsEndpoints: metricsRelabelings: - action: replace replacement: platform-obs targetLabel: _gdch_project path: value: /metrics port: value: 8091 scheme: value: http scrapeInterval: 60s scrapeTimeout: 45s selector: matchLabels: monitoringtarget: mon-kube-state-metrics
Autorisations mal configurées pour le rôle observability-admin-debugger
Versions : 1.14.3, 1.14.4
Symptômes : les IO ne peuvent pas redémarrer les pods Cortex ou Prometheus dans l'espace de noms mon-system.
Solution :
Pour les organisations :
- Mettez en pause le sous-composant
iam-common. Mettez à jour le roleTemplate
observability-admin-debugger/iam-systemcomme suit :apiVersion: iam.private.gdc.goog/v1alpha1 kind: RoleTemplate metadata: name: observability-admin-debugger namespace: iam-system spec: metadata: roleType: predefined hierarchyLevel: org persona: infra-operator displayName: "Observability Admin" bindingType: rolebinding roleNamespace: "mon-system" operableComponent: IAM rules: - apiGroups: - "apps" resources: - "deployments" resourceNames: - "logmon-operator" - "cortex-tenant" - "meta-blackbox-exporter" - "blackbox-exporter" verbs: - "*" - apiGroups: - "apps" resources: - "statefulsets" resourceNames: - "anthos-prometheus-k8s" - "meta-prometheus" - "mon-prober-backend-prometheus" - "primary-prometheus-shard0-replica0" - "primary-prometheus-shard0-replica1" - "primary-prometheus-shard1-replica0" - "primary-prometheus-shard1-replica1" verbs: - "*" - apiGroups: - "" resources: - "secrets" resourceNames: - "anthos-prometheus-scrape-cert" - "kube-control-plane-metrics-proxy-cert" - "metrics-consumers-ca" - "metrics-providers-ca" - "anthos-prometheus-etcd-scrape" verbs: - "*" - apiGroups: - "cert-manager.io" resources: - "certificates" resourceNames: - "anthos-prometheus-scrape" - "kube-control-plane-metrics-proxy-cert" - "metrics-consumers-ca" - "metrics-providers-ca" verbs: - "get" - "list" - "watch"
Pour l'administrateur racine :
- Mettez en pause le sous-composant
iam-common. Mettez à jour le roleTemplate
observability-admin-debugger-root/iam-systemcomme suit :apiVersion: iam.private.gdc.goog/v1alpha1 kind: RoleTemplate metadata: name: observability-admin-debugger namespace: iam-system spec: metadata: roleType: predefined hierarchyLevel: org persona: infra-operator displayName: "Observability Admin" bindingType: rolebinding roleNamespace: "mon-system" operableComponent: IAM rules: - apiGroups: - "apps" resources: - "deployments" resourceNames: - "logmon-operator" - "cortex-tenant" - "meta-blackbox-exporter" - "blackbox-exporter" verbs: - "*" - apiGroups: - "apps" resources: - "statefulsets" resourceNames: - "anthos-prometheus-k8s" - "meta-prometheus" - "mon-prober-backend-prometheus" - "primary-prometheus-shard0-replica0" - "primary-prometheus-shard0-replica1" - "primary-prometheus-shard1-replica0" - "primary-prometheus-shard1-replica1" verbs: - "*" - apiGroups: - "" resources: - "secrets" resourceNames: - "anthos-prometheus-scrape-cert" - "kube-control-plane-metrics-proxy-cert" - "metrics-consumers-ca" - "metrics-providers-ca" - "anthos-prometheus-etcd-scrape" verbs: - "*" - apiGroups: - "cert-manager.io" resources: - "certificates" resourceNames: - "anthos-prometheus-scrape" - "kube-control-plane-metrics-proxy-cert" - "metrics-consumers-ca" - "metrics-providers-ca" verbs: - "get" - "list" - "watch"
Rôle de débogueur Grafana manquant
Versions : 1.14.3, 1.14.4
Problèmes constatés : le rôle grafana-debugger-cp n'est pas présent dans les espaces de noms du projet fantôme d'observabilité (*-obs-system). Il est impossible d'accorder aux utilisateurs l'ensemble d'autorisations approprié pour déboguer les problèmes liés à Grafana.
Solution de contournement : Créez la ressource personnalisée ClusterRoleTemplate suivante dans infra-cp et utilisez le ClusterRole correspondant qui est créé pour obtenir les autorisations grafana-debugger.
apiVersion: iam.private.gdc.goog/v1alpha1
kind: ClusterRoleTemplate
metadata:
name: grafana-debugger-cp
spec:
metadata:
roleType: predefined
hierarchyLevel: infra-cp
persona: infra-operator
displayName: "Grafana Admin"
bindingType: rolebinding
operableComponent: MON
rules:
- apiGroups:
- "apps"
resources:
- "deployments"
resourceNames:
- "grafana-proxy-server"
verbs:
- "delete"
- "get"
- "list"
- "patch"
- "update"
- "watch"
- apiGroups:
- "apps"
resources:
- "statefulsets"
resourceNames:
- "grafana"
verbs:
- "delete"
- "get"
- "list"
- "patch"
- "update"
- "watch"
- apiGroups:
- ""
resources:
- "pods"
resourceNames:
- "grafana-0"
verbs:
- "delete"
- "get"
- "list"
- "patch"
- "update"
- "watch"
- apiGroups:
- ""
resources:
- "pods"
verbs:
- "get"
- "list"
- "watch"
- apiGroups:
- "monitoring.private.gdc.goog"
resources:
- "datasources"
verbs:
- "create"
- "delete"
- "get"
- "list"
- "update"
- "patch"
- "watch"
- apiGroups:
- "monitoring.global.private.gdc.goog"
resources:
- "datasourcereplicas"
verbs:
- "create"
- "delete"
- "get"
- "list"
- "update"
- "patch"
- "watch"
Les métriques et les journaux multizones ne sont pas visibles après l'ajout d'une zone
Versions : 1.14.*
Symptômes : le tableau de bord Grafana n'affiche pas les journaux ni les métriques pour la zone nouvellement ajoutée.
Solution 1 : Redémarrez le déploiement datasource-proxy :
kubectl KUBECONFIG=${KUBECONFIG_ORG} rollout restart deployment datasource-proxy -n mon-system
Les pods datasource-proxy redémarreront et la configuration du point de terminaison multizone sera mise à jour pour la zone nouvellement ajoutée.
Le finaliseur MonitoringTarget bloque la suppression de l'espace de noms.
Versions : 1.14.3, 1.14.4
Symptômes : l'espace de noms n'est pas supprimé et des clusters non opérationnels sont présents dans l'organisation concernée.
Solution de contournement : supprimez manuellement les finaliseurs des ressources personnalisées MonitoringTarget qui ont bloqué la suppression de l'espace de noms.
La suppression du projet est bloquée en raison de finaliseurs en attente pour le tableau de bord et la source de données
Versions : 1.14.3, 1.14.4
Corrigé : correctif 22 de la version 1.14.3
Symptômes : les projets ne sont pas supprimés et l'espace de noms de fin présente des erreurs comme dans l'exemple suivant :
Some resources are remaining: dashboards.observability.gdc.goog has 2 resource instances, datasources.monitoring.private.gdc.goog has 2 resource instances.
Solution : Supprimez manuellement les finaliseurs du tableau de bord et de la source de données.
Les métriques de KSM ne sont pas visibles
Versions : 1.14.3
Corrigé : correctif 22 de la version 1.14.3
Symptômes : les tableaux de bord KUB affichent No Data dans tous les panneaux.
Solution : Mettez en veille le sous-composant KSM et mettez à jour monitoringtarget et metricsproxysidecar.
Mettre en veille un sous-composant :
export SUBCOMPONENT_NAME=mon-kube-state-metrics export SUBCOMPONENT_NAMESPACE=ORG_NAME kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG annotate subcomponent "${SUBCOMPONENT_NAME:?}" -n "${SUBCOMPONENT_NAMESPACE:?}" lcm.private.gdc.goog/paused=trueRemplacez les éléments suivants :
- ORG_NAME : nom de l'organisation.
- ROOT_ADMIN_KUBECONFIG : chemin d'accès au fichier kubeconfig de l'administrateur racine.
Ajoutez le code suivant à
mon-kube-state-metrics-metrics-proxymetricsproxysidecar dans.spec.destinations:- certificate: secretName: mon-pa-kube-state-metrics-cert port: 8091La métrique
mon-kube-state-metrics-metrics-proxymise à jour ressemble à cet exemple :... spec: containerName: otel-collector destinations: - certificate: secretName: mon-io-kube-state-metrics-cert port: 8090 - certificate: secretName: mon-pa-kube-state-metrics-cert port: 8091 resources: limits: ...Supprimez la section
matchClusters:de la spécification monitoringtargetmon-pa-kube-state-metrics. La spécification monitoringtargetmon-pa-kube-state-metricsmise à jour se présente comme suit :... spec: podMetricsEndpoints: metricsRelabelings: - action: replace replacement: platform-obs targetLabel: _gdch_project path: value: /metrics port: value: 8091 scheme: value: http scrapeInterval: 60s scrapeTimeout: 45s selector: matchLabels: monitoringtarget: mon-kube-state-metrics`
Le pipeline de métriques système est en panne
Version : 1.14.3
Symptômes : L'alerte MON-A0001 est active même après avoir suivi le runbook MON-R0001.
Solution :
Si le problème se produit dans le cluster d'administrateur, créez le
SubcomponentOverridesuivant dansroot-adminà l'aide du runbook IAC-R0004. Pour les autres clusters (utilisateur, périmètre ou partagé, par exemple), créezSubcomponentOverridedans${ORG}-mp.kind: SubcomponentOverride metadata: name: mon-cortex-tenant namespace: <NAMESPACE> spec: backend: operableParameters: concurrency: 1024 resourcesLimit: cpu: "8" memory: 16Gi subComponentRef: mon-cortex-tenantTrouvez le bon
NAMESPACE:kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG get subcomponent -A | grep "mon-cortex-tenant"Voici le résultat :
org-1-mp mon-cortex-tenant 27h ReconciliationCompleted org-1 mon-cortex-tenant 46h ReconciliationCompleted root mon-cortex-tenant 47h ReconciliationCompletedL'espace de noms est la racine si le pipeline est en panne pour
root-admin, ou org-1 si le pipeline est en panne pourorg-1 admin:kubectl --kubeconfig=ORG_ADMIN_KUBECONFIG get subcomponent -A | grep "mon-cortex-tenant"Voici le résultat :
g-org-1-perimeter-cluster mon-cortex-tenant 40h ReconciliationCompleted g-org-1-shared-service-cluster mon-cortex-tenant 40h ReconciliationCompleted user-vm-1-cluster mon-cortex-tenant 40h ReconciliationCompleted user-vm-2-cluster mon-cortex-tenant 40h ReconciliationCompletedIci, l'espace de noms correct peut être
g-org-1-perimeter-cluster,g-org-1-shared-service-cluster,user-vm-1-clusterouuser-vm-2-clusterselon le cluster pour lequel le pipeline de métriques système est en panne.Après avoir appliqué le
SubcomponentOverride, redémarrez le déploiement cortex-tenant dans les clusters concernés. Vérifiez si les valeurs sont mises à jour dans le cluster concerné :kubectl --kubeconfig ${KUBECONFIG:?} get configmap cortex-tenant-config -n mon-system -o yamlMettez à jour le champ de simultanéité.
Redémarrez les déploiements cortex-tenant :
kubectl --kubeconfig ${KUBECONFIG:?} rollout restart deployment/cortex-tenant -n mon-system
Architecture mutualisée
La console n'indique pas les échecs de création de pool de nœuds
Version : 1.14.4, 1.14.5, 1.14.6
Corrigé : 1.14.7
Symptômes : dans la console GDC, lorsqu'un pool de nœuds ne peut pas être créé, l'UI affiche à tort un message creation in progress indiquant que le pool de nœuds a été créé.
Solution de contournement : utilisez la CLI gdcloud pour valider la création du pool de nœuds.
Multizone
La zone inaccessible redirige vers la page d'authentification
Version : 1.14.x
Symptômes : lorsqu'une zone est inaccessible, la console GDC redirige vers une page affichant une erreur d'authentification. Toutefois, l'inaccessibilité de la zone peut ne pas être due à un problème d'authentification, mais plutôt à une panne zonale.
Solution : utilisez l'URL zonale pour contourner le problème. Si l'URL zonale ne fonctionne pas non plus, demandez à votre opérateur d'infrastructure (IO) de vérifier si la zone pour laquelle vous rencontrez des problèmes d'authentification est hors service.
Le rôle permettant d'afficher les zones à l'aide de la gcloud CLI n'est pas appliqué
Version : 1.14.x
Symptômes : le rôle IAM requis pour utiliser la commande gdcloud zones list n'est pas appliqué à l'univers GDC par défaut. Le rôle manquant, qui n'est pas disponible en tant que rôle prédéfini, empêche l'utilisation de la gcloud CLI pour lister les zones.
Solution de contournement : Appliquez les ressources de rôle IAM global-zone-viewer et de liaison de rôle au serveur d'API global :
Créez un fichier YAML de rôle, tel que
global-zone-viewer.yaml, avec le contenu suivant :apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: global-zone-viewer namespace: mz-system rules: - apiGroups: - location.mz.global.private.gdc.goog resources: - zones verbs: - get - list --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: global-zone-viewer-binding namespace: mz-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: global-zone-viewer subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: system:authenticatedAppliquez le fichier YAML au serveur d'API global de l'organisation :
kubectl --kubeconfig ORG_GLOBAL_API_SERVER_KUBECONFIG apply -f global-zone-viewer.yaml
Cette liaison de rôle authentifie tous les utilisateurs du système pour qu'ils puissent afficher les zones à l'aide de gdcloud zones list.
Erreurs de connexion intermittentes à l'URL de la console globale
Versions : 1.14.x
Symptômes : lorsque vous vous connectez à la console GDC avec l'URL globale, vous pouvez recevoir des erreurs indiquant que votre session n'est plus valide. Cette erreur peut être due à un bug réseau sous-jacent et ne reflète pas précisément l'état de votre session.
Solution de contournement : Connectez-vous à la console GDC avec les URL zonales pour gérer les ressources globales depuis chaque zone. Pour savoir comment changer de contexte zonal depuis la console GDC, consultez Gérer les ressources dans plusieurs zones.
Mise en réseau
L'ajustement de l'ordre des zones MultiZoneNetworkConfig entraîne un échec du remplacement de la configuration
Versions : toutes les versions 1.14.x peuvent être concernées.
Symptômes :
L'état
READYdes commutateurs top-of-rack (ToR) est défini sur "False". Vous pouvez le vérifier en exécutant la commande suivante :kubectl get torswitches -ALe remplacement de la configuration du commutateur échoue avec une erreur indiquant que l'entrée existe déjà. Cela se voit dans les journaux de remplacement de la configuration du commutateur. Le message d'erreur ressemble à ceci :
% Insertion failed - entry already exists
Ce problème est dû à l'ajustement de l'ordre des zones dans MultiZoneNetworkConfig. Le système génère des numéros de séquence pour les règles de liste d'accès BGP en fonction de la position de chaque zone dans la liste de configuration. Si l'ordre des zones est modifié, le système génère de nouvelles règles avec des numéros de séquence différents qui sont en conflit avec les règles déjà présentes sur le commutateur.
Solutions :
Pour résoudre ce problème, supprimez manuellement la configuration de la liste d'accès au chemin AS BGP en conflit de chaque commutateur ToR concerné. Cela permet au système de réconcilier et d'appliquer la configuration appropriée.
- Établissez une connexion SSH à chaque commutateur ToR qui n'est pas à l'état
Ready. Passez en mode de configuration globale :
config tSupprimez la configuration de la liste d'accès en conflit :
no ip as-path access-list other-zonesQuittez le mode configuration.
Une fois cette commande exécutée sur tous les commutateurs concernés, le réconciliateur appliquera la configuration appropriée et les commutateurs passeront à l'état READY.
Expiration de l'opération de remplacement de la configuration
Versions : toutes les versions 1.14.x peuvent être concernées.
Symptômes :
Un grand nombre de listes de contrôle d'accès (LCA) provoque un délai d'expiration lors de la configuration des commutateurs réseau. La ressource personnalisée BorderLeafSwitch n'est pas dans l'état Ready. Lorsque vous établissez une connexion SSH avec le commutateur non prêt, l'état Commit expiry s'affiche.
Par exemple, la commande suivante affiche l'état :
sh config-replace log verify
Le résultat ressemble à ce qui suit :
Config-replace type: atomic .replace_tmp_11924
Start Time: Wed Jul 09 18:08:33 2025
Operation Status: Success
Commit Status: Commit expiry
Solution :
Dans les versions 1.14.3 ou 1.14.7+, modifiez la ressource personnalisée SubcomponentOverride nommée pnet-core-override dans l'espace de noms root, puis ajoutez un champ httpTimeout à .spec.operableParameters.netDevGW.
apiVersion: lcm.private.gdc.goog/v1
kind: SubcomponentOverride
metadata:
name: pnet-core-override
namespace: root
spec:
backend:
bootstrapParameters:
enableMetricsEncryption: true
operableParameters:
disableNetworkReconcilerFeatures: ""
enableOperationStoragePVC: false
netDevGW:
httpTimeout: 10m
subComponentRef: pnet-core
Patientez 15 minutes pour que l'infrastructure d'automatisation puisse envoyer les nouvelles configurations aux commutateurs. Configurez httpTimeout selon vos besoins jusqu'à ce que les messages Commit expiry disparaissent.
Dans les versions 1.14.4, 1.14.5 et 1.14.6, effectuez manuellement la configuration de remplacement et validez les modifications.
Mettez en pause le transfert :
export SWITCH_NAME=SWITCH_NAME # example: aa-aa-blsw01 export SWITCH_TYPE=SWITCH_TYPE # example: borderleafswitch kubectl -n gpc-system annotate $SWITCH_TYPE $SWITCH_NAME system.private.gdc.goog/paused="true"Suivez le runbook PNET-P0001 pour obtenir l'accès au commutateur.
Recherchez la configuration à remplacer :
switch-cli# dir | grep new_configEffectuez le remplacement de la configuration :
switch-cli# configure replace <new_config_file>Cette opération peut prendre plus de cinq minutes.
Une fois la commande config-replace exécutée, validez la modification :
switch-cli# configure replace commitRéactiver le transfert :
kubectl -n gpc-system annotate $SWITCH_TYPE $SWITCH_NAME system.private.gdc.goog/paused-
Échec du déploiement avec un ASN BGP de 4 octets
Versions : 1.14.3, 1.14.4
Symptômes : la configuration du protocole BGP (Border Gateway Protocol) avec un numéro de système autonome (ASN) de quatre octets sur les commutateurs réseau entraîne des échecs de configuration. Sans une configuration BGP correctement appliquée, le réseau de cette zone GDC peut ne pas être en mesure d'établir un routage approprié, ce qui peut entraîner des problèmes de connectivité, l'impossibilité d'annoncer des routes ou une instabilité générale du réseau. Il n'existe aucune solution pour le moment.
Trafic anycast mondial bloqué
Versions : 1.14.3
Symptômes : le trafic destiné aux points de terminaison anycast mondiaux est bloqué par les listes de contrôle d'accès (LCA).
Solution :
Pour résoudre le problème lié au blocage du trafic anycast global par les listes de contrôle d'accès (ACL), vous devez créer une ressource personnalisée SubcomponentOverride dans le cluster d'administration racine afin d'autoriser explicitement le trafic vers les blocs CIDR anycast du serveur DNS global. Procédez comme suit :
Recherchez tous les blocs CIDR anycast mondiaux. Pour trouver les blocs CIDR anycast mondiaux à mettre à jour, procédez comme suit :
Connectez-vous au serveur d'API global racine.
Répertoriez toutes les ressources personnalisées de sous-réseau dans tous les espaces de noms à l'aide de la commande suivante :
kubectl get subnet -AFiltrez la sortie pour trouver les ressources de sous-réseau où le filtre
metadata.namecontient le mot cléanycast.Pour chaque ressource de sous-réseau trouvée avec
anycastdans son nom, notez la valeur despec.subnet. Cette valeur représente un bloc CIDR anycast mondial.
Dans le cluster d'administrateur racine, créez une ressource personnalisée
SubcomponentOverridenomméepnet-trafficpolicy-dc-overridedans l'espace de noms racine. Pour chaque sous-réseau anycast que vous avez identifié à l'étape précédente, ajoutez les règles comme indiqué dans le fichier YAML :apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: pnet-trafficpolicy-dc-override namespace: root spec: backend: operableParameters: breakglassRules: default-traffic-policy-data: - IPVersions: - IPv4 L4Protocol: IP action: Accept description: INTERCONNECT_RULE_DESCRIPTION destinationEndPoint: host: hostPrefix: GLOBAL_ANYCAST_CIDR port: portType: ANY direction: Ingress enforcePoints: - enableLogging: false enforcePointType: DataInterconnect sourceEndPoint: host: hostType: ANY port: portType: ANY - IPVersions: - IPv4 L4Protocol: IP action: Accept description: HAIRPIN_RULE_DESCRIPTION destinationEndPoint: host: hostType: ANY port: portType: ANY direction: Ingress enforcePoints: - enableLogging: false enforcePointType: DataHairpin sourceEndPoint: host: hostPrefix: GLOBAL_ANYCAST_CIDR port: portType: ANY subComponentRef: pnet-trafficpolicy-dcRemplacez les éléments suivants :
INTERCONNECT_RULE_DESCRIPTION: texte descriptif de la règle de réseau d'interconnexion.GLOBAL_ANYCAST_CIDR: bloc CIDR anycast mondial, tel que 136.125.38.128/28. Pour chaque anycast trouvé à l'étape précédente, créez la règle à l'aide de ce fichier YAML.HAIRPIN_RULE_DESCRIPTION: texte descriptif de la règle de réseau en épingle.
L'échec partiel de l'ID de canal de distribution entraîne une perte de trafic
Versions : 1.14.3
Symptômes : lorsque les deux liens DCI (Data Center Interconnect) qui connectent le commutateur leaf de bordure d'une zone au commutateur de l'opérateur, ou lorsque le commutateur leaf de bordure d'une zone subit une défaillance matérielle, environ 50 % du trafic réseau interzones est perdu.
Nom de VRF trop long
Versions : 1.14.2
Symptômes : un message semblable à l'exemple suivant peut s'afficher, indiquant que les commutateurs ne sont pas en bon état lorsque vous exécutez cette commande :
sh config-replace log verify
Le résultat peut ressembler à l'exemple suivant :
Operation : Config-replace to user config
Checkpoint file name : .replace_tmp_20791
Scheme : tmp
Cfg-replace done By : admin
Cfg-replace mode : atomic
Verbose : disabled
Start Time : Fri, 20:03:38 08 Nov 2024
Start Time UTC : Fri, 20:03:38 08 Nov 2024
-------------------------------------------
Command : snmp-server context gdch-services-orginfrainternal-vrf vrf gdch-servic
es-orginfrainternal-vrf, parse error : -20, mode : /exec/configure/vrf
Failed to parse: snmp-server context gdch-services-orginfrainternal-vrf vrf gdch
-services-orginfrainternal-vrf
Configuration above is invalid or not supported via CR/rollback feature
Solution de contournement : Le nom du CR de l'organisation ne peut pas comporter plus de 19 caractères.
Échec de la communication des pods StatefulSet
Versions : 1.14.3, 1.14.4
Corrigé : correctif 23 de la version 1.14.3, version 1.14.5
Problèmes constatés : problèmes ou interruptions de connectivité dus à la suppression d'objets Cilium Endpoint (CEP) qui ne sont pas gérés correctement après le redémarrage des pods StatefulSet.
Cela peut entraîner une identité de point de terminaison non gérée, ce qui peut amener les règles réseau à abandonner à tort le trafic légitime. Vous pouvez vérifier les pods concernés en vérifiant l'absence de leur objet CEP correspondant :
kubectl get cep -A | grep [*POD_IP*]
Solution : Redémarrez les pods StatefulSet concernés pour mettre à jour leur UID et actualiser les métadonnées associées :
kubectl rollout restart statefulset [*STATEFULSET_NAME*] -n [*NAMESPACE*]
Nœud non accessible sur le réseau de données
Il s'agit d'un problème rare qui peut se produire si le pod anetd est pris dans une boucle de plantage.
Une ressource de noyau essentielle à la connectivité des nœuds peut rester bloquée dans un état corrompu.
Ce guide décrit les symptômes de ce problème, ainsi que les étapes à suivre pour le résoudre.
Versions :
Toutes les versions de Google Distributed Cloud (GDC) sous air gap peuvent être affectées.
Symptômes :
Si ce problème se produit, vous pouvez rencontrer les symptômes suivants :
- Nœuds bloqués à l'état
NotReady - La description du nœud affiche le message
kubelet:kubelet was found unhealthy; repair flag : true. - L'accès SSH au nœud n'est pas possible sur le réseau de données.
Solution :
Suivez les instructions ci-dessous pour réparer chaque nœud défaillant :
Obtenez l'adresse IP de gestion du nœud concerné :
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get -n gpc-system servers/NODE_NAME -ojsonpath='{.spec.managementNetwork.ips[0]}'Obtenez un accès SSH au nœud concerné.
Connectez-vous au nœud à l'aide de SSH en utilisant l'adresse IP de gestion du nœud.
Sur le nœud, exécutez la commande suivante, puis fermez la connexion SSH :
tc filter del dev bond0 egressRedémarrez le daemonset
anetdpour le cluster avec le nœud concerné :kubectl --kubeconfig AFFECTED_CLUSTER_KUBECONFIG rollout restart ds/anetd -n kube-system
La création d'un PNP "allow-all-egress" refuse le trafic inattendu
Versions :
Toutes les versions de Google Distributed Cloud (GDC) sous air gap peuvent être affectées.
Symptômes : la règle de réseau du projet allow-all-egress autorise le trafic vers les points de terminaison du projet et les points de terminaison externes au cluster, mais pas vers les points de terminaison système. Ce problème peut entraîner le blocage de l'accès au système et aux services propriétaires, tels que la résolution DNS et le stockage d'objets.
Le PNP allow-all-egress peut se présenter comme suit :
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT_1
name: allow-all-egress
spec:
policyType: Egress
subject:
subjectType: UserWorkload
egress:
- {}
Solution : Supprimez le PNP allow-all-egress. Par défaut, une fois la protection contre l'exfiltration de données désactivée, le trafic est autorisé vers les points de terminaison de projet et externes en dehors des points de terminaison de cluster et système.
kubectl delete pnp [*ALLOW_ALL_EGRESS_PNP_NAME*] -n [*NAMESPACE*]
Problème lié au tableau de bord Grafana du SLO de disponibilité multizone et entre zones
Versions : 1.14.3
Symptômes : dans Grafana, le tableau de bord des SLO pnet-cross-zone-availability n'affiche aucune métrique.
Solution : Suivez le runbook PNET-P0001 pour accéder au commutateur et vérifier manuellement l'état de la session BGP et de la connectivité multizones.
Échec de la réconciliation des passerelles d'entrée du plan de données et de gestion
Versions : 1.14.3
Problèmes constatés : les sous-composants asm-dataplane-ingress ou asm-management-ingress ne parviennent pas à se réconcilier avec l'erreur suivante :
message: 'Reconciliation error: E0111 - upgrade chart: cannot patch "management-ingress-gateway" with kind BackendService: BackendService.networking.gdc.goog "management-ingress-gateway" is invalid: spec.targetPorts: Invalid value: "array": TargetPorts list is immutable'
ForwardingRuleInternal et ForwardingRuleExternal sont d'autres valeurs possibles dans la chaîne d'erreur au lieu de BackendService. De même, le nom de ressource peut être dataplane-ingress-gateway, dataplane-ingress-gateway-global ou management-ingress-gateway-global au lieu de management-ingress-gateway.
Solution de contournement : Déterminez si la ressource est présente dans le serveur de l'API de gestion ou dans le serveur de l'API globale. Cela peut être déduit de la version de l'API du type de ressource dans la chaîne d'erreur. Par exemple, une ressource avec le suffixe networking.gdc.goog est présente dans le serveur de l'API Management, tandis qu'une ressource avec le suffixe networking.global.gdc.goog est présente dans le serveur de l'API globale.
Une fois le serveur d'API identifié, supprimez la ressource à l'aide du fichier kubeconfig correspondant. Exemple :
kubectl --kubeconfig API_SERVER_KUBECONFIG delete Backendservice dataplane-ingress-gateway -n istio-system
La page des règles réseau du projet n'est pas compatible avec le champ du sélecteur de projet dans l'API ProjectNetworkPolicy
Versions : 1.14.3, 1.14.4
Symptômes : lorsque vous créez une règle de réseau de projet qui inclut le champ projectSelector et que vous l'affichez dans la console GDC, l'interface utilisateur affiche tous les projets sélectionnés pour la règle au lieu des projets figurant dans le champ projectSelector.
Solution de contournement : Utilisez l'API pour créer et lire une règle de réseau de projet qui inclut le champ projectSelector.
Système d'exploitation
Échec du provisionnement du serveur
Versions : 1.14.3
Symptômes : lors du provisionnement du serveur, les erreurs 401 suivantes peuvent s'afficher sur la ressource personnalisée BaremetalHost correspondante lors du téléchargement de l'image OS à partir du registre Harbor. Le serveur est alors bloqué dans une boucle de déprovisionnement et de reprovisionnement.
Pour vérifier si ces erreurs se sont produites, décrivez la ressource personnalisée BaremetalHost :
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG describe baremetalhost SERVER_NAME -n gpc-system
Le résultat peut ressembler à l'exemple suivant :
Normal InspectionComplete 14m metal3-baremetal-controller Hardware inspection completed
Normal ProvisioningStarted 5m39s metal3-baremetal-controller Image provisioning started for https://robot%24om5hgylsfvzxs43umvwtu43boiwwc4djmv4hizloonuw63rnmjqwg23fnzsc2ylqnfsxq5dfnzzws33ofvzwk4twmvza:4usy4JXE6BAdEVU2t8LMqDPhfM4EnW73@10.129.24
.66:31714/artifacts/serve/Z3BjLXN5c3RlbS1vcy1pbWFnZXMvZ2RjaC1ub2RlLW9zOnJvY2t5LTg2LTEuMTQtdjIwMjQxMDIzLTEuMTQtcjI4MQ==
Normal ProvisioningError 5m28s metal3-baremetal-controller Image provisioning failed: Failed to prepare to deploy: Validation of image href https://robot%24om5hgylsfvzxs43umvwtu43boiwwc4djmv4hizloonuw63rnmjqwg23fnzsc2ylqnfsxq5dfnzzws33ofvzwk
4twmvza:4usy4JXE6BAdEVU2t8LMqDPhfM4EnW73@10.129.24.66:31714/artifacts/serve/Z3BjLXN5c3RlbS1vcy1pbWFnZXMvZ2RjaC1ub2RlLW9zOnJvY2t5LTg2LTEuMTQtdjIwMjQxMDIzLTEuMTQtcjI4MQ== failed, reason: Got HTTP code 401 instead of 200 in response to HEAD request.
Normal DeprovisioningStarted 5m17s metal3-baremetal-controller Image deprovisioning started
Solution :
Obtenez le nom et l'espace de noms du
nodePoolClaimauquel appartient le serveur :kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get server SERVER_NAME -n gpc-system -ojson | jq '.spec.nodePoolClaimRef'Le résultat peut ressembler à l'exemple suivant :
{ "name": "control-plane-extension-pool-o2-standard1-96-gdc-metal", "namespace": "gpu-org-lancer" }Obtenez le nom de l'image de l'OS à partir de
NodePoolClaim:kubectl get nodepoolclaim NODEPOOLCLAIM_NAME -n NODEPOOLCLAIM_NAMESPACE -o json | jq '.spec.machineSpec.osImageName'Obtenez l'URL de l'image de l'OS à partir du
OSImageMetadata:kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get osimagemetadata OS_IMAGE_NAME -o json | jq '.commonMetadata.servingURL'Mettez à jour la ressource personnalisée
Serveravec la dernière URL de l'image OS :kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG patch server SERVER_NAME -n gpc-system --type=json -p='[{"op": "replace", "path": "/spec/image/urlSpec/url", "value" : "'OS_IMAGE_URL'"}]'
La mise à niveau de l'OS du nœud peut rester bloquée à l'étape "NodeOSInPlaceUpgradePostProcessingCompleted"
Versions : 1.14.3, 1.14.4
Symptômes :
Lors de la mise à niveau d'un nœud, NodeUpgradeTask reste bloqué à l'étape NodeOSInPlaceUpgradePostProcessingCompleted avec une erreur de réconciliateur et le message failed verifying delta after upgrade.
Cette erreur indique que le processus de vérification de la mise à niveau a détecté des différences de packages inattendues sur le nœud. Plus précisément, il identifie les packages qui sont toujours à l'état "need-upgrade" (mise à niveau requise) ou qui apparaissent comme des packages "only-in-new" (nouveaux uniquement) après la tentative de mise à niveau.
Le message d'erreur liste les packages spécifiques dont la validation a échoué. Exemple d'extrait :
{"ts":1748758118826.9954,"caller":"controller/controller.go:329","msg":"Reconciler error","controller":"NodeUpgradeTask","controllerGroup":"upgrade.private.gdc.goog","controllerKind":"NodeUpgradeTask","NodeUpgradeTask":{"name":"lancer-org1-data-plane-pool-o2-standard1-96-gdc-metal-nmw2h-zx-ac-bm15","namespace":"lancer-org1"},"namespace":"lancer-org1","name":"lancer-org1-data-plane-pool-o2-standard1-96-gdc-metal-nmw2h-zx-ac-bm15","reconcileID":"26585774-7059-46b7-a0f7-0e627b2a2bb5","err":"failed verifying delta after upgrade: 2 errors occurred:\n\t* failed to make \"need-upgrade\" empty, found\n - bind-export-libs\n from: 9.11.36-16.el8_6.86ciq_lts.2\n to: 9.11.36-16.el8_6.86ciq_lts.4\n...\n- strongswan-sqlite\n from: 5.9.10-1.el8_6.ciqlts\n to: 5.9.10-2.el8\n\t* failed to make \"only-in-new\" empty, found lsof=4.93.2-1.el8\nstrace=5.13-4.el8\n\n"}
Ce symptôme peut être dû à deux problèmes. Déterminez d'abord la cause du problème :
Cause-A: la machine est inaccessible, ce qui rendOSArtifactSnapShotobsolète.Vérifiez si le nœud en cours de mise à niveau est toujours opérationnel et si le job
OSArtifactSnapShotcorrespondant échoue.Si
OSArtifactSnapShotest obsolète et que la machine n'est pas accessible pendant plus de 20 minutes, passez àMitigation-A. Sinon, continuez à rechercherCause-B.Cause-B: échec silencieux de la mise à niveau du RPMDans de rares cas, la mise à niveau du RPM sur une machine peut échouer silencieusement après une mise à niveau partielle. Deux
ConfigMapdoivent contenir la différence de package avant et après la mise à niveau :in-place-delta-<CLUSTER_NAME>-<NODE_NAME>-before-upgrade in-place-delta-<CLUSTER_NAME>-<NODE_NAME>-after-upgradeSi le fichier "after-upgrade" contient moins de packages que le fichier configmap "before-upgrade", cela signifie que la mise à niveau a été abandonnée en mode silencieux et que tous les packages n'ont pas été mis à niveau. Accédez à
Mitigation-B.
Solution :
Mitigation-A : réparer une machine inaccessible
Essayez de réparer la machine en la redémarrant. Si la machine reste inaccessible après plusieurs tentatives de redémarrage, contactez l'équipe SERV pour obtenir de l'aide.
Une fois la machine à nouveau accessible, supprimez OSArtifactSnapShot pour forcer la réconciliation. Une fois OSArtifactSnapShot réconcilié, NodeUpgradeTask doit passer à l'étape suivante.
Mitigation-B : réessayez NodeUpgradeTask
Connectez-vous en SSH à la machine en cours de mise à niveau et collectez les journaux suivants pour le dépannage ultérieur. Les fichiers suivants doivent être collectés :
- /var/log/dnf.log
- /var/log/dnf.rpm.log
- dnf history > dnf_history.log
- rpm -qa --last > rpm_last.log
Supprimez la
NodeUpgradeTaskdéfaillante. Cela déclenchera une nouvelle tentative deNodeUpgradeTasksur le nœud concerné. Le nouveauNodeUpgradeTaskdevrait terminer la mise à niveau du RPM et passer à l'étape suivante.
La mise à niveau des nœuds OS peut être bloquée lors de la création du serveur de packages
Versions : 1.14.3, 1.14.4
Symptômes :
Lorsqu'un CR NodeUpgrade est créé, que sa mise en veille est suspendue et qu'il reste à l'état in-progress pendant plus de 30 minutes, il peut échouer silencieusement lors de la création du serveur de package. Le problème est qu'un NodeUpgrade reste sur .status.upgradeStatus=in-progress, mais qu'aucun .status.tasks n'est chargé :
status:
duration: 0s
upgradeStatus: in-progress
Pour confirmer que cela échoue lors de la création du serveur de packages, lisez le journal du contrôleur de mise à niveau de l'OS :
kubectl logs deployment/os-upgrade-controller -n os-system --kubeconfig=/path/to/admin-cluster-kubeconfig-of-the-nodeupgrade-object
Si le journal du contrôleur affiche failed to create package server et failed to create package repo server DNS registration avec une raison détaillée (l'une des suivantes)
spec.fqdnPrefix already used in an existing DNS registrationname already used in an existing DNS.
Il suggère ensuite que certaines autres ressources de serveur de packages utilisées par d'autres NodeUpgrade sont toujours actives et entrent en conflit avec la ressource à créer pour le NodeUpgrade en cours de blocage.
Solution :
Pour confirmer, vous pouvez vérifier la ressource du serveur de package réel (de certaines API, telles que dnsregistration.network.private.gdc.goog dans le serveur d'API de gestion du cluster qui gère le CR NodeUpgrade) et trouver le NodeUpgrade qui possède ces ressources. Si le NodeUpgrade propriétaire du DNSRegistration est déjà terminé, mais que la ressource DNSRegistration n'est toujours pas supprimée, vous pouvez supprimer l'objet DNSRegistration si tous ses objets NodeUpgrade référencés sont terminés.
Listez tous les CR
DNSRegistrationpour le serveur de packagesNodeUpgrade:kubectl get dnsregistration.network.private.gdc.goog -n $NAMESPACE $NAME $ -ojson --kubeconfig=/path/to/mgmt-api-server-kubeconfig-of-the-nodeupgrade-object | grep nu-bmInterrogez le propriétaire du RS
NodeUpgradepour unDNSRegistrationspécifique :kubectl get dnsregistration.network.private.gdc.goog -n $NAMESPACE $NAME $ -ojson --kubeconfig=/path/to/mgmt-api-server-kubeconfig-of-the-nodeupgrade-object | jq -r '.metadata.annotations."package-server-owners"'
Les mises à niveau de l'OS des nœuds peuvent rencontrer des problèmes et s'arrêter à n'importe quelle étape du processus.
Versions : 1.14.4, 1.14.5, 1.14.6
Symptômes :
Le CR NodeUpgradeTask est toujours inférieur à in-progress depuis plus de deux heures, mais il pourra peut-être se compléter automatiquement si vous lui laissez suffisamment de temps.
La demande de modification NodeUpgradeTask est en cours depuis plus de deux heures. Bien que la saisie semi-automatique puisse finir par fonctionner, le problème sous-jacent est l'incapacité de l'os-policy-reconciler à gérer efficacement un grand volume de CR OSPolicy. Ce problème se produit lors de l'étape NodeOSInPlaceUpgradeCompleted.
Pour confirmer davantage cet échec lors de la création du serveur de packages, consultez le journal du contrôleur de mise à niveau de l'OS.
kubectl logs deployment/os-upgrade-controller -n os-system --kubeconfig=/path/to/admin-cluster-kubeconfig-of-the-nodeupgrade-object
Si le journal du contrôleur ne contient pas d'entrée OSPolicy provenant de NodeUpgradeTask, cela indique que le contrôleur est surchargé.
Solution :
Mettez en veille toutes les RS OSPolicy non essentielles pendant le processus de mise à niveau.
La commande "storage cp" d'un fichier volumineux entraîne la défaillance de l'API kube-api de gestion de l'organisation
Versions : 1.14.3 et ultérieures
Symptômes : lors d'une opération gdcloud storage cp ou gdcloud system container-registry load-oci à partir d'un poste de travail OIC, il est possible que l'accès à org-infra soit perdu, suivi de la désactivation de kube-api de org-mgmt. Il s'agit d'un problème rare. Il est utile de collecter des données pour l'équipe d'ingénieurs.
Solution de contournement : lorsque ce problème se produit, essayez la procédure suivante :
- Pour chaque nœud du plan de contrôle, exécutez
uptimepour voir si les nœuds ont été redémarrés au cours des dernières 24 heures. - Notez l'heure du redémarrage.
- Recherchez les paniques du noyau sur chaque nœud CP qui se sont produites juste avant le redémarrage en exécutant
dmesg | grep -i 'kernel panic'. - Sur chaque nœud de plan de contrôle, vérifiez si les cartes NIC Mellanox sont installées en exécutant la commande
lspci | grep -i eth | grep -i mellanox. Si aucune carte réseau Mellanox n'est présente, arrêtez de lire cet article sur les problèmes connus. Sur chaque nœud CP, vérifiez les paramètres réseau suivants sur
data0:[root@cp-node-01 ~]# ethtool -k data0 | grep -E 'generic-receive-offload|large-receive-offload|rx-checksumming|rx-gro-hw' rx-checksumming: off generic-receive-offload: on large-receive-offload: off rx-gro-hw: on # <--- Check this valueSi
rx-gro-hw(voir ci-dessus) est défini sur "off" sur tous les nœuds, arrêtez de lire ce problème connu.Rassemblez des informations pour Google afin de l'aider à diagnostiquer le problème :
k8s.org get po -n anthos-identity-service -l k8s-app=ais k8s.org get po -n management-kube-system k8s.org get po -n kube-system -l component=kube-apiserver k8s.org get nodes -l node-role.kubernetes.io/control-planeSur chaque nœud CP, exécutez les commandes suivantes :
dmesg | grep -i 'kernel panic' journalctl -u disable-rx-gro-hw.service systemctl status disable-rx-gro-hw modinfo mlx5_core | grep ^version:Pour résoudre le problème de paramètres réseau,
rx-gro-hwdoit être défini suroffen exécutant les commandes suivantes sur tous les nœuds CP :ethtool -K data0 rx off gro off lro off ethtool -K data1 rx off gro off lro off ethtool -K bond00 rx off gro off lro offVérifiez à nouveau les paramètres :
[root@cp-node-01 ~]# ethtool -k data0 | grep -E 'generic-receive-offload|large-receive-offload|rx-checksumming|rx-gro-hw' rx-checksumming: off generic-receive-offload: on large-receive-offload: off rx-gro-hw: off # <--- Check this, should be "off"Réessayez l'opération d'origine, comme
gdcloud storage cpougdcloud system container-registry load-oci. Si l'échec persiste, contactez l'équipe d'ingénieurs.
Operations Suite Infrastructure Core Services (OIC)
Performances médiocres du serveur intermédiaire
Versions : toutes les versions de Google Distributed Cloud (GDC) sous air gap peuvent être concernées.
Symptômes : les opérations du navigateur ou du système prennent trop de temps.
Solution :
Augmentez le nombre de processeurs virtuels sur les serveurs relais à l'aide du gestionnaire Hyper-V sur BM03 et BM04 :
- Sélectionnez une VM Jumphost, puis cliquez sur Paramètres dans le volet d'actions.
- Sélectionnez Processeur, puis augmentez le nombre de Processeurs virtuels à quatre ou plus, en fonction de la charge de travail.
- Répétez l'opération pour les Jumphosts restants.
Resource Manager
Impossible de supprimer des projets dans la console GDC
Versions : 1.14.3, 1.14.4
Symptômes : la console GDC fournit le bouton Supprimer pour les projets existants sur la page Détails du projet, mais ce bouton ne fonctionne pas.
Solution de contournement : Pour supprimer un projet existant, vous devez utiliser la gcloud CLI. Pour en savoir plus, consultez Supprimer un projet.
Playbooks Ansible d'organisation manquants
Versions : 1.14.3
Symptômes : lors de la création d'une organisation, le job create-ansible-playbooks qui crée les playbooks Ansible requis échoue sans message d'erreur. L'absence de playbooks Ansible entraîne des problèmes tels que le manque de machines virtuelles de périmètre et des difficultés à créer une organisation mondiale.
Solution : Suivez le runbook OS-R0009 pour créer manuellement les playbooks Ansible d'organisation manquants.
Une organisation mondiale asymétrique affiche des configurations zonales inexistantes
Versions : 1.14.4
Symptômes : lorsque vous créez une organisation mondiale v1 avec seulement un sous-ensemble de configurations d'organisation zonales, toutes les zones affichent toujours un état de réplica d'organisation. Par exemple, si vous disposez d'un univers GDC avec trois zones, mais que vous ne créez une configuration d'organisation zonale que pour deux zones, la troisième zone affiche toujours un état de réplica erroné pour la troisième organisation zonale inexistante.
Pour confirmer l'état erroné, imprimez l'état de l'organisation mondiale :
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get organization \
ORG_NAME -n gpc-system -o yaml
La sortie YAML ressemble à ceci :
...
- name: zone3
replicaStatus:
systemInfo:
cidrInfo: {}
rolloutStatus:
conditions:
- lastTransitionTime: "2025-03-12T02:09:21Z"
message: ""
observedGeneration: 1
reason: Current
status: "True"
type: Synced
- lastTransitionTime: "2025-03-12T02:09:22Z"
message: rollout succeeded
observedGeneration: 1
reason: RolloutSucceeded
status: "True"
type: Replicated
...
Notez que cela ne se produit que pour les organisations v1, car les configurations zonales asymétriques ne sont pas prises en charge pour les organisations v2.
Solution : Vous pouvez ignorer l'état erroné de l'instance répliquée, car l'organisation zonale n'existe pas, sauf si vous l'avez créée spécifiquement.
Cluster
Le pool de nœuds de calcul du cluster d'infrastructure n'est pas supprimé
Versions : 1.14.3, 1.14.4
Symptômes : lorsque vous supprimez un pool de nœuds de calcul de la spécification CR Organization, le pool de nœuds n'est pas supprimé automatiquement. En d'autres termes, la commande kubectl get nodepool data-plane-pool-{machine-class} -n {org-name} affiche toujours le pool de nœuds à supprimer.
# Organization CR example
apiVersion: resourcemanager.private.gdc.goog/v1alpha1
kind: Organization
...
spec:
resourceCapacities:
workloadServers:
o2-standard1-96-gdc-metal: 4 # worker node pool to remove
...
Solution : Après avoir supprimé le pool de nœuds de calcul de la spécification CR Organization, supprimez manuellement le CR NodePoolClaim pour ce pool de nœuds du cluster d'administrateur racine en exécutant la commande suivante :
sh
kubectl delete nodepoolclaim data-plane-pool-{machine-class} -n {org-name}
Attendez que le NodePoolClaim et ses CR NodePool associés soient complètement supprimés, c'est-à-dire que la commande kubectl get nodepool data-plane-pool-{machine-class} -n {org-name} ne génère plus le pool de nœuds de calcul.
Stockage
Échec de la suppression des buckets créés avec la commande gdcloud config set zone
Versions : 1.14.7 et ultérieures
Symptômes : Les buckets créés avec la commande gdcloud config set zone ne peuvent pas être supprimés en raison de problèmes d'autorisation, car la commande tente d'opérer dans la mauvaise zone.
Solution de contournement : Utilisez la console pour définir la zone spécifique d'un bucket ou remplacez le flag --zone par --location dans la commande gdcloud.
Déclenchement d'alertes SLO OBJ
Versions : 1.14.3, 1.14.4
Symptômes : des alertes SLO pour OBJ sont déclenchées en raison de l'erreur ErrFailedStreamingDecryptRequest dans le proxy OBJ : obj-list-object-ops-availability-slo, obj-rw-object-ops-error-rate-slo.
Solution : coupez le son de l'alerte. L'erreur est identifiée à tort comme une erreur système alors qu'elle est due à l'utilisateur qui met fin à la connexion, ce qui n'est pas pris en compte dans le SLO.
ETag vide pour S3 UploadPart
Versions : 1.14.3
Problèmes constatés : après avoir envoyé une requête UploadPart, vous obtenez un code d'état 200 Success dans le message de réponse, mais le champ ETag est vide. Cette erreur se produit lorsqu'un InternalServerError se produit en raison d'une interruption du réseau et que le code d'état n'est pas mis à jour sur 500 InternalServerError.
Solution : Réessayez la requête comme si elle avait échoué précédemment.
Échec du montage des pods en raison d'une erreur mkfs.ext4 de Trident
Versions : 1.14.3
Symptômes : après avoir tenté de monter des pods, vous constatez que tous les pods qui passent à un nœud particulier ou qui en proviennent échouent. Un message d'erreur RPC : DeadlineExceeded desc = context deadline exceeded s'affiche, indiquant que le nœud est bloqué. Lorsque ce message s'affiche, vous ne pouvez plus effectuer d'opérations Trident supplémentaires sur le nœud en question. Les volumes diffusant des données ne sont pas affectés, mais ceux qui sont déplacés vers et depuis le nœud peuvent subir une interruption.
Solution :
Inspectez les journaux Trident sur le nœud que le pod tente de monter et vérifiez que la file d'attente augmente. Les journaux peuvent se présenter comme suit :
2025-01-24T00:27:22.783599667Z time="2025-01-24T00:27:22Z" level=debug msg="Attempting to acquire shared lock (NodeUnstageVolume-pvc-0f04a9c5-00fc-4c3c-9fc1-6730598f7caa); 421 position in the queue." lock=csi_node_server logLayer=csi_frontend requestID=94c8ad12-6479-4e1c-8791-118b565d6c6b requestSource=CSI workflow="node_server=unstage"Connectez-vous au nœud et examinez le résultat de
dmesg. Les journaux peuvent se présenter comme suit :Jan 31 02:43:47 ap-ae-bm18 kernel: blk_cloned_rq_check_limits: over max size limit. (524280 > 128) Jan 31 02:43:47 ap-ae-bm18 kernel: blk_cloned_rq_check_limits: over max size limit. (524280 > 128) Jan 31 02:43:47 ap-ae-bm18 kernel: device-mapper: multipath: 253:40: Failing path 65:144. Jan 31 02:43:47 ap-ae-bm18 kernel: blk_cloned_rq_check_limits: over max size limit. (524280 > 128) Jan 31 02:43:47 ap-ae-bm18 kernel: device-mapper: multipath: 253:40: Failing path 65:160. Jan 31 02:43:47 ap-ae-bm18 kernel: blk_cloned_rq_check_limits: over max size limit. (524280 > 128)Après avoir confirmé que vous rencontrez une erreur
mkfs.ext4de Trident, redémarrez le nœud.
Trident ne parvient pas à créer un volume en raison d'une erreur existante
Versions : 1.14.3
Symptômes :
Un PVC n'est pas provisionné et affiche un événement semblable à celui-ci :
failed to create cloned volume {pvc-bab6bc52-fd37-4ead-a57b-e833e14c172a} on backend iscsi-san: volume trident_pvc_bab6bc52_fd37_4ead_a57b_e833e14c172a already exists
Lorsque cet événement se produit, le PVC n'est pas provisionné tant que vous n'avez pas effectué la solution de contournement.
Solution :
Pour résoudre le problème, procédez comme suit :
- Notez le nom du volume interne à partir de l'événement. Par exemple, l'événement échantillon affiché dans la section Symptômes indique le nom de volume interne
trident_pvc_bab6bc52_fd37_4ead_a57b_e833e14c172a. - Suivez le runbook FILE-R0105 pour accéder à ONTAP.
Supprimez le volume :
volume delete trident_pvc_bab6bc52_fd37_4ead_a57b_e833e14c172a
file_block_iscsi_sessions_unhealthy alert signale un faux positif
Versions : 1.14.3
Symptômes : dans certains environnements, l'alerte file_block_iscsi_sessions_unhealthy se déclenche, indiquant qu'un ou plusieurs nœuds rencontrent des échecs iSCSI. Le contrôleur file-observability utilise un collecteur de métriques personnalisé pour suivre l'état des sessions iSCSI sur chaque nœud Kubernetes. Toutefois, dans certains cas, le collecteur de métriques ne parvient pas à analyser la sortie de la commande iscsiadm et signale zéro session iSCSI en cours d'exécution, même si iSCSI dispose de sessions opérationnelles.
Solution :
Pour vérifier qu'iSCSI ne rencontre pas de problèmes et désactiver l'alerte si elle est en fait un faux positif :
Sur la page "Explore" de Grafana, exécutez la requête
fb_sessions_running_count{job="file-observability-backend-target.file-system"}. La requête renvoie une métrique pour chaque nœud du cluster. Si des nœuds signalent une métriquefb_sessions_running_countde0, notez le nom du nœud.Pour chaque nœud dont les métriques
fb_sessions_running_countrenvoient0, exécutez les commandes suivantes :Établissez une connexion SSH avec le nœud concerné.
Exécutez la commande
iscsiadm -m session. Plusieurs lignes doivent s'afficher. Chaque ligne correspond à une session iSCSI en cours d'exécution. Si la commande ne renvoie rien ou si des erreurs s'affichent dans le résultat, escaladez le problème à l'équipe d'ingénieurs chargée du blocage des fichiers.Si la commande précédente a renvoyé des sessions iSCSI, vous avez confirmé que l'alerte pour ce nœud est un faux positif.
Lorsque vous confirmez que tous les nœuds concernés ont des sessions iSCSI saines et que l'alerte se déclenche de manière erronée, créez un silence dans AlertManager pour désactiver l'alerte
file_block_iscsi_sessions_unhealthy.
L'alerte file_block_storage_disk_failure se déclenche pour les disques de rechange
Versions : 1.14.3
Symptômes : dans certains environnements, l'alerte file_block_storage_disk_failure se déclenche, indiquant qu'un ou plusieurs disques dans ONTAP sont défectueux. Le contrôleur file-observability utilise un collecteur de métriques personnalisé pour suivre l'état de chaque disque dans ONTAP, mais dans les versions antérieures de GDC, le collecteur ne considère pas un disque de secours comme étant en bon état et déclenche une alerte pour le disque de secours.
Solution :
Pour vérifier que les disques sont des disques de secours et désactiver l'alerte pour le disque, procédez comme suit :
Sur la page "Explore" de Grafana, exécutez la requête
disks_labels_healthy{job="file-observability-backend-target.file-system"}. La requête renverra une métrique pour chaque disque dans ONTAP. Si des disques affichent une métrique de 0 (non opérationnel), notez leur nom.Pour chaque disque dont les métriques
disks_labels_healthyrenvoient0, exécutez les commandes suivantes :Connectez-vous au cluster ONTAP via SSH et exécutez la commande
disk show -disk <disk-name> -fields stateen utilisant le nom de disque collecté à partir de la requête de métrique.Vérifiez que le résultat de la commande indique que l'état du disque est
presentouspare. Si le disque est dans un état autre quepresentouspare, escaladez le problème à l'équipe d'ingénierie chargée du blocage des fichiers.Si le disque en question indique
presentouspare, nous pouvons confirmer que l'alerte ne devrait pas se déclencher pour ce disque. Créez un silence dans AlertManager pour désactiver l'alertefile_block_storage_disk_failureavec le libellédisk_namedéfini sur le nom du disque.
Une fois les silences créés pour tous les disques de rechange, accédez à Grafana pour vérifier que les alertes ne sont plus déclenchées.
L'alerte file_block_storage_node_peer_connection_unhealthy se déclenche une fois la connexion rétablie
Versions : 1.14.3
Symptômes : dans certains environnements, l'alerte file_block_storage_node_peer_connection_unhealthy se déclenche, indiquant qu'une ou plusieurs connexions entre les nœuds ONTAP échouent. Le contrôleur file-observability utilise un collecteur de métriques personnalisé pour suivre l'état de ces connexions. Un problème connu fait que cette alerte continue de se déclencher même après le rétablissement de la connexion ayant échoué.
Solution :
Pour vérifier que les connexions entre les nœuds sont opérationnelles et désactiver l'alerte pour les nœuds :
Sur la page "Explore" de Grafana, exécutez la requête
storage_node_peer_connections{job="file-observability-backend-target.file-system"}. La requête renvoie une métrique pour chaque connexion entre les nœuds de stockage du cluster. Si des connexions signalent une métriquestorage_node_peer_connectionsde0, notez les libelléssource_node,destination_ipetstorage_cluster_namede la métrique.Pour chaque métrique
storage_node_peer_connectionsrenvoyant0, exécutez les commandes suivantes :Établissez une connexion SSH avec le cluster de stockage ONTAP à partir du libellé
storage_cluster_name.Exécutez la commande suivante sur le cluster ONTAP en utilisant les valeurs des libellés
source_nodeetdestination_ip:
ping -node <node-name> -destination <destination-ip> -verbose -show-detailSi la commande ping échoue, transmettez le problème à l'équipe d'ingénierie chargée du blocage des fichiers. Si la commande ping réussit, cela confirme que les connexions de nœuds sont opérationnelles et que l'alerte se déclenche de manière erronée.
- Créez un silence dans AlertManager pour désactiver l'alerte
file_block_storage_node_peer_connection_unhealthyavec les libelléssource_nodeetdestination_ipdéfinis sur le nœud source et l'adresse IP de destination à partir de la métrique.
Une fois les silences créés pour tous les nœuds opérationnels, accédez à Grafana pour vérifier que les alertes ne sont plus déclenchées.
L'alerte file_block_nodes_not_reachable se déclenche une fois la connexion rétablie
Versions : 1.14.3
Symptômes : dans certains environnements, l'alerte file_block_nodes_not_reachable se déclenche, indiquant qu'une ou plusieurs connexions des services IPsec sur les nœuds Kubernetes à ONTAP échouent. Le contrôleur file-observability utilise un collecteur de métriques personnalisé pour suivre l'état de ces connexions. Un problème connu fait que cette alerte continue de se déclencher même après le rétablissement de la connexion ayant échoué.
Solution :
Pour vérifier que les connexions sur les nœuds sont opérationnelles et désactiver l'alerte pour les nœuds :
Sur la page "Explore" de Grafana, exécutez la requête
fb_all_nodes_reachable{job="file-observability-backend-target.file-system"}. La requête renvoie une métrique pour chaque nœud du cluster. Si des nœuds signalent une métriquefb_all_nodes_reachablede0, notez le nom du nœud.Pour chaque nœud dont les métriques
fb_all_nodes_reachablerenvoient0, exécutez les commandes suivantes :Établissez une connexion SSH avec le nœud concerné.
Exécutez la commande suivante :
journalctl -u strongswan | grep "sending packet" | sed "s/\[/ /g" | sed "s/\]/ /g" | awk '{ print $14 }' | sort -n | uniq | awk '{print "ping -c 5 " $1}' | shLa commande tentera d'envoyer un ping à ONTAP à l'aide de toutes les connexions IPsec. Si des pings de la commande échouent, transférez le problème à l'équipe d'ingénieurs chargée du blocage des fichiers. Si les commandes ping réussissent, cela confirme que les connexions de nœuds sont opérationnelles et que l'alerte se déclenche de manière erronée.
Si tous les pings de la commande réussissent, cela signifie que les connexions sur le nœud sont saines et que l'alerte se déclenche de manière erronée. Créez un silence dans AlertManager pour désactiver l'alerte
file_block_nodes_not_reachableavec le libellénode_namedéfini sur le nom du nœud.
Une fois les silences créés pour tous les nœuds opérationnels, accédez à Grafana pour vérifier que les alertes ne sont plus déclenchées.
L'alerte file_block_storage_high_node_total_latency se déclenche en cas de charges de travail importantes.
Versions : 1.14.3
Symptômes : L'alerte file_block_storage_high_node_total_latency peut se déclencher dans certains environnements en raison de charges de travail importantes sur les nœuds de stockage. Cette alerte persiste jusqu'à ce que ces charges de travail soient entièrement traitées. Même lorsque les performances de lecture et d'écriture sur les volumes sont rapides, les nœuds de stockage peuvent toujours signaler une latence élevée pour des opérations de bloc spécifiques.
Solution :
Pour vérifier que les latences de volume sont normales et désactiver l'alerte de latence du nœud de stockage, procédez comme suit :
Vérifiez les alertes de latence des volumes :
- Dans Grafana, vérifiez que les alertes
file_block_storage_high_volume_write_latencyetfile_block_storage_high_volume_read_latencyne sont pas déclenchées et qu'elles indiquent des temps de latence optimaux pour les volumes.
- Dans Grafana, vérifiez que les alertes
Transmettre la demande si la latence du volume est élevée :
- Si les alertes de lecture ou d'écriture de volume sont déclenchées, cela indique une latence élevée dans l'ensemble du système de stockage. Faites remonter ce problème à l'équipe d'ingénierie chargée du blocage des fichiers.
Mettre en sourdine l'alerte de latence des nœuds (si les volumes sont sains) :
Si les alertes d'écriture et de lecture de volume sont saines, l'alerte de latence de nœud est probablement un faux positif.
Créez un silence dans AlertManager pour l'alerte
file_block_storage_high_node_total_latency.Après avoir créé le silence, accédez à Grafana pour vérifier que l'alerte ne se déclenche plus.
Mise à niveau de nœud bloquée
Versions : 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.14.7
Symptômes : ce blocage se produit lorsqu'un LUN (Logical Unit Number) devient en lecture seule, souvent en raison de problèmes liés aux instantanés. Dans ce cas, le nœud est mis en quarantaine pour déplacer le pod concerné vers un autre nœud. Comme le processus de mise à niveau des nœuds comporte une vérification préalable pour s'assurer que les nœuds ne sont pas mis en quarantaine, cet état empêche la mise à niveau de se poursuivre.
Solution : Désactivez manuellement le sous-composant file-read-only-lun-cleanup avant de lancer la procédure de mise à niveau :
Identifiez chaque organisation concernée.
Appliquez un
SubcomponentOverridepour chaque organisation de l'environnement.apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: file-read-only-lun-cleanup namespace: ORG_NAMESPACE spec: subComponentRef: "file-read-only-lun-cleanup" disable: trueVérifiez qu'aucun nœud des organisations concernées n'est mis en quarantaine :
Répertoriez les nœuds de l'organisation :
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get nodesLe résultat ressemble à ce qui suit :
NAME STATUS ROLES AGE VERSION admin-node0-zone1 Ready,SchedulingDisabled control-plane 14h v1.30.8-gke.200 admin-node1-zone1 Ready control-plane 14h v1.30.8-gke.200 admin-node2-zone1 Ready control-plane 14h v1.30.8-gke.200Notez les noms des nœuds dont l'état est
SchedulingDisabled. Dans cet exemple de résultat, le nœud mis en quarantaine estadmin-node0-zone1.Décordonnez les nœuds qui ont renvoyé l'état
SchedulingDisabledà l'étape précédente :kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG uncordon NODE_NAMEVérifiez que tous les nœuds sont prêts :
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get nodesLe résultat ressemble à ce qui suit :
NAME STATUS ROLES AGE VERSION admin-node0-zone1 Ready control-plane 14h v1.30.8-gke.200 admin-node1-zone1 Ready control-plane 14h v1.30.8-gke.200 admin-node2-zone1 Ready control-plane 14h v1.30.8-gke.200
L'alerte file_block_zombie_luns_present se déclenche une fois les erreurs multipath résolues.
Versions : 1.14.3 et ultérieures
Problèmes constatés : l'alerte file_block_zombie_luns_present peut se déclencher dans certains environnements, car le contrôleur file-observability ne parvient pas à analyser la sortie de la commande multipath -ll. Dans ce cas, l'alerte concernant les LUN zombies est déclenchée en permanence, même lorsque le service multipath est opérationnel sur tous les nœuds.
Solution :
Pour vérifier que les services multipath fonctionnent correctement sur les nœuds concernés, procédez comme suit :
Sur la page "Explore" de Grafana, exécutez la requête
zombie_lun_exists{job="file-observability-backend-target.file-system"}. La requête renvoie une métrique pour chaque nœud du cluster. Si des nœuds signalent une métriquezombie_lun_existsde1, notez le nom du nœud.Pour chaque nœud dont les métriques
zombie_lun_existsrenvoient1, exécutez les commandes suivantes :Établissez une connexion SSH avec le nœud concerné.
Exécutez la commande suivante :
multipath -llLa commande renvoie des informations sur tous les périphériques de bloc gérés par le service multipath. Vérifiez qu'aucun des appareils de stockage en mode bloc ne contient la chaîne
failed undef unknownou la chaînefailed faulty runningdans son état.Si des appareils affichent l'état
failed faulty running, suivez le runbook FILE-R0020 pour résoudre le problème des LUN zombies.Si des appareils affichent l'état
failed undef unknown, suivez le runbook FILE-R0021 pour résoudre le problème des LUN super zombies.
Coupez le son des alertes de LUN zombie si les nœuds sont opérationnels :
Si aucun périphérique de bloc non valide n'est trouvé sur l'un des nœuds, l'alerte de LUN zombie est un faux positif.
Créez un silence dans AlertManager pour l'alerte
file_block_zombie_luns_present.Après avoir créé le silence, accédez à ServiceNow pour vérifier que l'alerte ne se déclenche plus.
Impossible de supprimer un bucket vide depuis la console
Versions : 1.14.4 et versions ultérieures
Symptômes : Dans la console GDC, vous ne pouvez pas supprimer un bucket vide. Le bucket peut contenir des marqueurs de suppression et potentiellement d'autres versions d'objets lorsque la gestion des versions des objets est activée avec des règles de conservation. Un message d'erreur semblable à celui-ci pourrait apparaître :
can't delete bucket containing empty objects: Delete the bucket inside to delete
the object
Solution de contournement : Utilisez la commande gdcloud storage rm -a pour supprimer les objets, y compris les marqueurs de suppression, afin de rendre le bucket supprimable.
Artifact Registry système
Les tâches de réplication Harbor sont bloquées
Versions : 1.14.3
Problèmes constatés : les jobs de réplication des artefacts Harbor sont bloqués. Ce problème empêche la distribution d'artefacts à l'organisation et la création d'organisations.
Solution de contournement : pour résoudre ce problème, suivez les étapes du runbook SAR-R1010.
L'état d'erreur transitoire n'est pas effacé lors de la réconciliation de la ressource personnalisée du compte robot Harbor
Versions : 1.14.3
Problèmes constatés : une alerte CustomResourceErrorStatusAlert libellée kind=HarborRobotAccount et code=SAR2002 se déclenche de manière erronée. Par exemple, l'alerte incorrecte présente le champ message défini sur "Erreur lors de la récupération du robot : échec de la liste des robots : 503 Service Unavailable".
Solution de contournement : Demandez à l'opérateur d'infrastructure (IO) de vérifier si l'alerte correspond à un véritable problème ou à une fausse alerte, puis de la désactiver s'il s'agit d'une fausse alerte, en suivant les instructions ci-dessous.
Lorsqu'une alerte est déclenchée, suivez le runbook SAR-E2002 pour identifier et résoudre la cause sous-jacente de l'alerte.
En raison de ce problème connu, même si le runbook résout correctement la cause sous-jacente, l'alerte peut continuer à se déclencher de manière erronée. Continuez à vérifier l'état des erreurs de l'objet de ressource personnalisée (CR) HarborRobotAccount (HRD) cible pour lequel une alerte est émise :
Définissez les variables d'environnement requises :
export KUBECONFIG=KUBECONFIG export HRD_NAME=HRD_NAME export HRD_NAMESPACE=HRD_NAMESPACERemplacez les éléments suivants :
KUBECONFIG: chemin d'accès au fichier kubeconfig.HRD_NAME: nom de la ressource personnaliséeHarborRobotAccountcible.HRD_NAMESPACE: espace de noms contenant la ressource personnaliséeHarborRobotAccountcible.
Vérifiez l'état d'erreur du CR
HarborRobotAccountcible :kubectl get harborrobotaccount ${HRD_NAME?} -n ${HRD_NAMESPACE?} -ojsonpath='{.status.errorStatus} {"\n"}'
Si la valeur lastUpdateTime indique que le champ errorStatus a été mis à jour il y a plus de 30 minutes, l'alerte est une fausse alerte. Pour atténuer la fausse alerte, mettez-la en sourdine dans l'instance GDC isolée en suivant le runbook MON-R2009.
Fausse alerte SAR-R0003
Versions : 1.14.3 et ultérieures
Problèmes constatés : une alerte avec le code SAR-R0003, l'OC SAR et le niveau de gravité critical se déclenche de manière erronée.
Solution : Suivez le runbook MON-R2009 pour couper le son de l'alerte.
Système de gestion des demandes
Le serveur MID ServiceNow ne démarre pas correctement
Versions : 1.14.3
Corrigé : 1.14.4
Symptômes : le serveur MID ServiceNow, qui s'intègre à Splunk, ne parvient pas à s'enregistrer auprès de ServiceNow au démarrage en raison d'une incompatibilité de version.
Solution :
- Mettez en pause le sous-composant
ts-mid-server.
KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl annotate subcomponent ts-mid-server -n gdchservices lcm.private.gdc.goog/paused=true
- Remplacez la chaîne de version du serveur MID.
KUBECONFIG=GDCHSERVICES_ADMIN_KUBECONFIG kubectl set env statefulset/midserver-set -n support MID_CONFIG_mid__pinned__version=washingtondc-12-20-2023__patch5-06-21_06-26-2024_1335
Mettre à niveau
L'annotation du cluster de services partagés n'est pas mise à jour après une mise à niveau réussie du cluster
Versions : 1.14.4
Symptômes : les CR des clusters de périmètre et de services partagés pour clusters.baremetal.cluster.gke.io reflètent la version GKE correcte après la mise à niveau. Les CR clusters.cluster.gdc.goog affichent toujours la version GKE précédente.
Solution de contournement : Mettez à jour l'annotation upgrade.gdc.goog/version dans clusters.baremetal.cluster.gke.io avec le nouveau nom UserClusterMetadata correspondant à la version mise à niveau de GKE.
La mise à niveau du nœud d'administrateur de l'organisation est bloquée
Versions : 1.14.6
Corrigé : 1.14.7
Symptômes : le processus de mise à niveau des nœuds pour le plan de contrôle de l'administrateur de l'organisation gdchservices est bloqué. La mise à niveau du nœud échoue, car il est impossible d'établir une connexion SSH au nœud, ce qui entraîne une erreur Connection timed out.
La mise à niveau du module complémentaire est bloquée
Versions : 1.14.6
Corrigé : 1.14.7
Symptômes : la mise à niveau du module complémentaire pour le cluster d'administrateur racine est bloquée lors de la mise à niveau d'une version 1.14.x précédente vers la version 1.14.6. Un message d'état peut indiquer que la mise à niveau a dépassé le délai prévu :
message: 'UPG1401: addon upgrade expected to finish within 2h0m0s but hasn''t
after 8h8m24.00395866s, last message was: Addon upgrade for root-admin cluster
in progress'
Solution : Mettez à jour manuellement le spec.addOnSetTemplateRef de la ressource addonset root-admin pour qu'il pointe vers le bon modèle pour la nouvelle version.
Échec du rapport d'assistance
Versions : 1.14.3, 1.14.4, 1.14.5, 1.14.6
Corrigé : 1.14.7
Symptômes : la commande gdcloud resource-support get-report échoue lorsqu'elle est exécutée pour un cluster d'utilisateur en raison d'un problème d'autorisations.
Le démarrage de la VM peut être bloqué après la mise à niveau du nœud OS.
Versions : 1.14.6
Problèmes constatés : lors de la mise à niveau de la version 1.14.3 vers la version 1.14.6, les machines virtuelles des clusters de périmètre ou de services partagés ne parviennent pas à démarrer et deviennent inaccessibles après une mise à niveau de l'OS.
Par exemple, la commande suivante peut confirmer le problème :
kubectl --kubeconfig CP_KUBECONFIG logs -n VM_NAMESPACE VIRT_LAUNCHER_POD_NAME -c guest-console-log
Le résultat du journal de la console de la VM affiche un message d'erreur du noyau semblable à ce qui suit :
[ 2.005806] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 2.008100] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64 #1
[ 2.011153] Hardware name: KubeVirt None/RHEL, BIOS 1.14.0-2 04/01/2014
[ 2.013401] Call Trace:
[ 2.015365] dump_stack+0x41/0x60
[ 2.016641] panic+0xe7/0x2ac
[ 2.017864] mount_block_root+0x2be/0x2e6
[ 2.019176] ? do_early_param+0x95/0x95
[ 2.020287] prepare_namespace+0x135/0x16b
[ 2.021476] kernel_init_freeable+0x210/0x23a
[ 2.022724] ? rest_init+0xaa/0xaa
[ 2.023721] kernel_init+0xa/0x110
[ 2.024698] ret_from_fork+0x1f/0x40
[ 2.025913] Kernel Offset: 0x33c00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[ 2.028706] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
Solution de contournement : procédez comme suit pour contourner le problème :
Définissez les variables d'environnement suivantes :
export MP_KUBECONFIG=MANAGEMENT_API_KUBECONFIG export CP_KUBECONFIG=ORG_INFRA_KUBECONFIG export VM_NAMESPACE=VM_NAMESPACE export VM_NAME=FAILED_VM_NAMEArrêtez la VM en échec :
kubectl --kubeconfig=$MP_KUBECONFIG patch gvm -n $VM_NAMESPACE \ $VM_NAME --type='merge' -p='{"spec": {"runningState": "Stopped"}}'Ouvrez l'éditeur pour dissocier le disque de démarrage de la VM ayant échoué :
kubectl --kubeconfig $MP_KUBECONFIG edit gvm -n $VM_NAMESPACE $VM_NAMERemplacez le disque de démarrage par un nom d'espace réservé dans la spécification de la VM :
# Several lines of code are omitted here. spec: disks: - boot: true virtualMachineDiskRef: # This is a random placeholder name you put here. Doesn't need to exist name: VM_DISK_PLACEHOLDER_NAMECréez un secret de script de démarrage :
cat <<'EOF' > script #!/bin/bash username="newuser" password="Lime+blaze8legend" sudo useradd -m -s /bin/bash "$username" echo "$username:$password" | sudo chpasswd sudo usermod -aG sudo "$username" EOF kubectl --kubeconfig=$MP_KUBECONFIG create secret generic configure-password -n $VM_NAMESPACE --from-file=scriptCréez une VM d'assistance :
Obtenez l'image de VM pour le disque de démarrage de la VM. L'image ne doit pas appartenir à la même famille de système d'exploitation que le disque de démarrage du nœud de VM problématique. Utilisez donc
greppour trouver l'image Ubuntu :# find the latest ubuntu-20.04 OS version UBUNTU_OS_VERSION=$(kubectl --kubeconfig $MP_KUBECONFIG get vmimage -A --sort-by=.metadata.creationTimestamp | grep ubuntu-20.04 | tail -n 1 | awk '{print $2}')Créez le disque de démarrage et la VM. Créez un disque de démarrage et une VM avec un disque secondaire associé et un script de démarrage pour accéder à la console :
kubectl --kubeconfig $MP_KUBECONFIG apply -n $VM_NAMESPACE -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: HELPER_VM_BOOT_DISK_NAME spec: source: image: name: UBUNTU_OS_VERSION namespace: vm-system size: 20Gi --- apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: HELPER_VM_NAME spec: compute: virtualMachineType: n3-standard-2-gdc disks: - virtualMachineDiskRef: name: HELPER_VM_NAME-disk boot: true autoDelete: true - virtualMachineDiskRef: name: PROBLEM_VM_BOOT_DISK autoDelete: false startupScripts: - scriptSecretRef: name: configure-password name: configure-password EOFVérifiez que la VM d'assistance est en cours d'exécution :
kubectl --kubeconfig $MP_KUBECONFIG get gvm -n ${VM_NAMESPACE} HELPER_VM_NAME
Consolez la VM d'assistance et régénérez l'initramfs :
Console de la VM d'assistance :
kubectl virt console HELPER_VM_NAME -n ${VM_NAMESPACE} --kubeconfig=$CP_KUBECONFIGUtilisez les identifiants suivants :
username="newuser"
password="Lime+blaze8legend"
Installez les partitions du disque associé :
sudo mkdir /mnt/kernelpanic/ sudo mount /dev/mapper/rocky-rl--root /mnt/kernelpanic/ sudo mount /dev/mapper/rocky-rl--root /mnt/kernelpanic/ sudo mount /dev/sdb2 /mnt/kernelpanic/boot/ sudo mount /dev/sdb1 /mnt/kernelpanic/boot/efi/ sudo mount /dev/rocky/rl-home /mnt/kernelpanic/home/ sudo mount /dev/rocky/rl-var /mnt/kernelpanic/var/ sudo mount /dev/rocky/rl-var_tmp /mnt/kernelpanic/var/tmp/ sudo mount /dev/rocky/rl-var_log /mnt/kernelpanic/var/log/ sudo mount /dev/rocky/rl-var_log_audit /mnt/kernelpanic/var/log/audit/ sudo mount /dev/rocky/rl-tmp /mnt/kernelpanic/tmp/ sudo mount -t sysfs sysfs /mnt/kernelpanic/sys/ sudo mount -t proc procfs /mnt/kernelpanic/proc/ sudo mount -t devtmpfs devtmpfs /mnt/kernelpanic/dev/ sudo mount -t devpts devpts /mnt/kernelpanic/dev/pts/ sudo mount -o bind /dev/pts/ /mnt/kernelpanic/dev/pts/Établissez une connexion chroot au point d'installation et régénérez l'initramfs :
sudo chroot /mnt/kernelpanic/ dracut --regenerate-all --forceVérifiez que le nouvel initramfs pour la nouvelle version du noyau
4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64est généré :ls /boot/initramfs-* -lLa sortie ressemble à ceci :
-rw-------. 1 root root 184937778 Feb 5 2025 /boot/initramfs-0-rescue-e4d67258cb64499f98609307ac4a93e8.img -rw-------. 1 root root 119867729 Aug 7 17:35 /boot/initramfs-4.18.0-553.16.1.el8_6.ciqfips.0.6.1.x86_64.img -rw-------. 1 root root 35321114 Aug 7 17:36 /boot/initramfs-4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64.img
Arrêtez la VM d'assistance :
kubectl --kubeconfig=$MP_KUBECONFIG patch gvm -n $VM_NAMESPACE HELPER_VM_NAME --type='merge' -p='{"spec": {"runningState": "Stopped"}}'Dissociez le disque de la VM d'assistance :
Ouvrez la spécification de la VM d'assistance dans un éditeur :
kubectl --kubeconfig $MP_KUBECONFIG edit gvm -n $VM_NAMESPACE HELPER_VM_NAMESupprimez le code suivant du fichier YAML :
- virtualMachineDiskRef: name: PROBLEM_VM_BOOT_DISK autoDelete: false
Réassociez le disque de démarrage à la VM défaillante :
Ouvrez la spécification de la VM ayant échoué dans un éditeur :
kubectl --kubeconfig $MP_KUBECONFIG edit gvm -n $VM_NAMESPACE $VM_NAMEMettez à jour la spécification comme suit :
# Several lines of code are omitted here. spec: disks: - boot: true virtualMachineDiskRef: name: PROBLEM_VM_BOOT_DISK
Démarrez la VM en échec :
kubectl --kubeconfig=$MP_KUBECONFIG patch gvm -n $VM_NAMESPACE $VM_NAME --type='merge' -p='{"spec": {"runningState": "Running"}}'Vérifiez que la mise à niveau est corrigée :
Vérifiez que la ressource personnalisée
Nodepour cette VM afficheReadyet utilise la version de noyau plus récente4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64:kubectl --kubeconfig=$CP_KUBECONFIG get node NODE_NAME -owideLe résultat ressemble à ce qui suit :
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME vm-45b03137 Ready worker 139d v1.30.12-gke.300 10.204.0.7 <none> Rocky Linux 8.6 (Green Obsidian) 4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64 containerd://1.6.38-gke.0Vérifiez la version du noyau après avoir établi une connexion SSH à la VM :
uname -aLe résultat doit afficher la nouvelle version du noyau
4.18.0-553.16.1.el8_6.ciqfips.0.8.1.x86_64.
L'ingesteur n'est toujours pas opérationnel et n'est pas automatiquement oublié après la mise à niveau
Versions : 1.14.x
Problèmes constatés : le sous-composant log-infra n'est pas opérationnel après la mise à niveau. Pour vérifier, exécutez :
none
kubectl --kubeconfig ${KUBECONFIG:?} get subcomponent -n ${CLUSTER_NAMESPACE:?} log-infra
Pour vérifier l'état d'un sous-composant, vous devez utiliser le fichier kubeconfig du cluster parent pour KUBECONFIG et l'espace de noms du cluster actuel pour CLUSTER_NAMESPACE. La commande renvoie l'ÉTAT du sous-composant. Si l'ÉTAT n'est pas ReconciliationCompleted, cela signifie que le sous-composant n'est pas sain dans ce cluster.
Certains pods Loki du cluster ne sont pas en bon état. Pour lister tous les pods Loki, exécutez la commande suivante :
none
kubectl --kubeconfig ${KUBECONFIG:?} get pods -n obs-system | awk 'NR==1 || /loki/'
Cette commande affiche tous les pods Loki, y compris leurs colonnes STATUS et READY. Un pod est considéré comme non opérationnel si son ÉTAT n'est pas Running ou si certains de ses conteneurs ne sont pas prêts. La colonne READY, au format a/b, indique le nombre de conteneurs prêts a sur le total b. Un pod est opérationnel lorsque a et b sont égaux.
Vérifiez les journaux des pods Loki défectueux :
none
kubectl --kubeconfig ${KUBECONFIG:?} logs <pod-name> -n obs-system
Voici un exemple de journaux de sortie de pods non opérationnels :
level=warn ts=2024-12-21T05:01:42.331048596Z caller=ingester.go:385 component=ingester msg="autoforget have seen 2 unhealthy ingesters out of 3, network may be partitioned, skip forgeting ingesters this round"
level=warn ts=2024-12-21T05:01:45.928939929Z caller=lifecycler.go:291 component=ingester msg="found an existing instance(s) with a problem in the ring, this instance cannot become ready until this problem is resolved. The /ring http endpoint on the distributor (or single binary) provides visibility into the ring." ring=ingester err="instance 10.99.196.153:9095 past heartbeat timeout"
Solution de contournement : Pour supprimer un ingester défectueux de l'anneau Loki, consultez le runbook AL-R0031.
Vertex AI
Les demandes de traduction peuvent générer le code d'erreur RESOURCE_EXHAUSTED
Versions : 1.14.3
Symptômes : après avoir envoyé une demande de traduction, vous obtenez le code d'erreur RESOURCE_EXHAUSTED dans le message de réponse. Cette erreur se produit lorsque vous dépassez une limite de fréquence système. Une ressource a été épuisée (par exemple, un quota par utilisateur a été atteint, le nombre maximal de requêtes par seconde a été dépassé ou le système de fichiers dans son intégralité manque d'espace).
Solution : Demandez à votre opérateur d'infrastructure de redémarrer les shards de backend du service de traduction. Ensuite, renvoyez les demandes de traduction en augmentant le délai entre les demandes ou en envoyant des demandes plus courtes.
batchTranslateDocument renvoie une erreur 503
Versions : 1.14.3
Symptômes : après avoir envoyé une requête batchTranslateDocument, vous obtenez le code d'erreur 503 "Batch Document translation is not implemented" dans le message de réponse. Cette erreur se produit, car la méthode BatchTranslateDocument nécessite le service Aspose, qui n'est déployé que lorsque le paramètre opérationnel enableRAG est défini sur true dans le cluster.
Solution de contournement : Demandez à votre opérateur d'infrastructure (IO) de définir le paramètre enableRAG sur true dans le cluster d'administration de l'organisation en procédant comme suit :
Créez une ressource personnalisée
SubcomponentOverridedans un fichier YAML nommévai-translation.yamlavec le paramètreenableRAGdéfini surtrue:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: "vai-translation" namespace: SHARED_SERVICE_CLUSTER_NAMESPACE spec: subComponentRef: "vai-translation" backend: operableParameters: enableRAG: trueRemplacez
SHARED_SERVICE_CLUSTER_NAMESPACEpar l'espace de noms du cluster de services partagés.Appliquez la ressource personnalisée
SubcomponentOverrideau cluster d'administration de l'organisation :kubectl --kubeconfig ORG_MGMT_KUBECONFIG apply -f vai-translation.yamlRemplacez
ORG_MGMT_KUBECONFIGpar le chemin d'accès au fichier kubeconfig de gestion dans le cluster d'administrateur de l'organisation.
Le pod et le service de l'interface de traduction ou d'OCR ne parviennent pas à s'initialiser.
Versions : 1.11.x, 1.12.x, 1.13.x, 1.14.x
Symptômes : lors des mises à niveau, le cluster de base de données est recréé, ce qui entraîne l'obsolescence et la désynchronisation du secret ODS secret-store sur le cluster de services partagés. C'est pourquoi l'initialisation du pod et du service de l'interface de traduction ou d'OCR échoue.
Solution :
Supprimez le secret dans le cluster de service partagé :
kubectl --kubeconfig SHARED_SERVICEG_CLUSTER_KUBECONFIG delete secret postgres-secret-store -n VAI_API_NAMESPACE
Remplacez SHARED_SERVICE_CLUSTER_KUBECONFIG par le chemin d'accès au fichier kubeconfig dans le cluster de services partagés.
Si le service problématique est Translation, remplacez VAI_API_NAMESPACE par "g-vai-translation-sie". Si le service problématique est OCR, remplacez VAI_API_NAMESPACE par "g-vai-ocr-sie".
Un contrôleur recrée automatiquement le secret et le synchronise à nouveau avec le cluster de bases de données.
Vertex AI Search
Composants de recherche bloqués à l'état "Reconciling"
Versions : 1.14.6
Problèmes constatés : les sous-composants vaisearch-conversation et vaisearch-frontend sont bloqués dans un état Reconciling si aucune ressource personnalisée SearchConfig n'est créée dans l'organisation.
Solution de contournement : vous pouvez ignorer le problème. Une fois la ressource personnalisée SearchConfig créée, les sous-composants doivent terminer leur réconciliation.
Serveur
La rotation des identifiants du BIOS est bloquée à l'étape "Réinitialisation demandée"
Versions : 1.14.4
Symptômes : la rotation des identifiants du BIOS reste bloquée à l'état "Réinitialisation demandée". Pour le vérifier, consultez l'annotation gdch.cluster.gke.io/rotation-status pour le secret des identifiants BIOS du serveur :
kubectl get secret bios-credentials-SERVER_NAME -n gpc-system -o jsonpath='{.metadata.annotations.gdch\.cluster\.gke\.io/rotation-status}'
Remplacez SERVER_NAME par le nom du serveur. Si la rotation est bloquée, le résultat de la commande est "reset-requested".
Solution : Pour terminer la rotation des identifiants du BIOS, suivez le runbook SERV-R0018.
Impossible de provisionner les serveurs précédemment installés
Versions : 1.14.6
Symptômes : les serveurs ne parviennent pas à être provisionnés après avoir été déprovisionnés et reprovisionnés, en particulier en raison de problèmes liés à la gestion des clés iLO (Integrated Lights-Out) et HSM (Hardware Security Module). Les serveurs, qui faisaient auparavant partie d'une organisation désactivée, rencontrent des erreurs lors du provisionnement d'images, ce qui indique une incapacité à trouver un appareil approprié, souvent en raison de disques verrouillés à partir d'anciennes clés ou de clés supprimées. Un message d'erreur semblable à celui-ci peut s'afficher :
No suitable device was found for deployment - root device hints were not
provided and all found block devices are smaller than 4294967296B
Solution de contournement : Supprimez et réinstallez les serveurs concernés pour qu'ils passent à l'état "Provisionné". Pour en savoir plus, consultez les runbooks SERV-R0020 et SERV-R0021.
Machines virtuelles
Échec de l'importation d'image
Versions : 1.14.4. 1.14.5
Corrigé : 1.14.6
Symptômes : l'importation d'une image à l'aide de la commande gdcloud compute images import échoue avec une erreur Unauthorized en raison de délais d'expiration de session.
Solution de contournement : Utilisez l'API KRM pour l'importation d'images BYOI au lieu de la CLI gdcloud.
L'importation d'images KRM prend beaucoup de temps
Versions : 1.14.6 et versions ultérieures
Symptômes : l'importation d'une image à l'aide de l'API KRM prend beaucoup de temps.
La ressource VirtualMachineImageImport reste dans un état TranslationJobInProgress pendant une période prolongée, ce qui indique que la phase de traduction ne se termine pas comme prévu. Le pod image-translation passe à l'état CrashLoopBackOff.
Solution :
- Réessayez l'importation en créant une ressource
VirtualMachineImageImportavec un autre nom. - Surveillez l'état
VirtualMachineImageImporten vérifiant régulièrement la ressource jusqu'à ce que son état passe àWaitingForTranslationJob. Pour en savoir plus, consultez le runbook VMM R0007.