| Mises à jour | 1.32.0-1.32.600, 1.33.0-1.33.100 | Échec de la mise à jour d'un cluster d'utilisateur non HA vers un cluster avancé HA en raison du champ masterNode.replicasimmuable L'utilisation de gkectl updatepour mettre à jour un cluster d'utilisateur sans haute disponibilité (non-HA) vers un cluster avancé avec un plan de contrôle HA échoue et affiche le message d'erreur suivant : 
Failed to generate diff summary: failed to get desired onprem user cluster and node pools from seed config with dry-run webhooks:
failed to apply validating webhook to OnPremUserCluster:
masterNode.replcias: Forbidden: the field must not be mutated, diff (-before, +after): int64(- 1,+ 3)
 Solution : Utilisez la commande gkectl upgradepour mettre à niveau le cluster d'utilisateur standard vers un cluster avancé à haute disponibilité. | 
  | Mises à jour | 1.30, 1.31 | Les pods Windows restent en attente après la migration ControlPlaneV2 en raison d'un certificat TLS non valideLors d'une opération de mise à jour de Google Distributed Cloud incluant une migration ControlPlaneV2 de la version 1.30.x vers la version 1.31.x, il est possible que les pods Windows ne puissent pas être planifiés et restent à l'état Pending. Ce problème se manifeste par une erreur de validation du certificat TLS pour le webhook d'admission de mutationwindows-webhook. Ce problème se produit, car l'autre nom de l'objet (SAN) du certificat conserve de manière incorrecte une valeur valide pour l'ancienne architecture Kubeception au lieu d'être régénéré pour le nouvel point de terminaisonkube-system.svc. Le message d'erreur suivant peut s'afficher : failed calling webhook "windows.webhooks.gke.io": failed to call webhook: Post "https://windows-webhook.kube-system.svc:443/pod?timeout=10s": tls: failed to verify certificate: x509. Cette situation peut se produire lorsque le processus de migration ControlPlaneV2 copie le contenu etcd, ce qui transfère l'ancien certificat sans le régénérer correctement. Il est important de noter que les pools de nœuds Windows sont une fonctionnalité obsolète et ne seront pas disponibles dans Google Distributed Cloud 1.33 ni dans les versions ultérieures. Solution : 
      
        Sauvegardez le secret user-component-optionsdans l'espace de noms du cluster d'utilisateur :     kubectl get secret user-component-options -n USER_CLUSTER_NAME -oyaml > backup.yaml
    
        Supprimez le secret user-component-options:     kubectl delete secret user-component-options -n USER_CLUSTER_NAME
    
        Modifiez la ressource onpremuserclusterpour déclencher la réconciliation en ajoutant l'annotationonprem.cluster.gke.io/reconcile: "true":     kubectl edit onpremusercluster USER_CLUSTER_NAME -n USER_CLUSTER_MGMT_NAMESPACE
     Remplacez USER_CLUSTER_NAMEpar le nom de votre cluster d'utilisateur. | 
  | Mises à niveau, mises à jour | 1.32.0-1.32.500, 1.33.0 | 
    Lorsque vous mettez à niveau/à jour un cluster non avancé vers un cluster avancé, le processus peut cesser de répondre si Stackdriver n'est pas activé.
     Solution : 
      Si le cluster n'a pas encore été mis à niveau, vous devez suivre les étapes pour activer stackdriver:
      Ajoutez la section stackdriver au fichier de configuration de votre cluster.
      
      Exécutez gkectl updatepour activerstackdriver.Si une mise à niveau est déjà en cours, procédez comme suit :
    
      Modifiez le secret user-cluster-credsdans l'espace de nomsUSER_CLUSTER_NAME-gke-onprem-mgmtà l'aide de la commande suivante :kubectl --kubeconfig ADMIN_KUBECONFIG \
  patch secret user-cluster-creds \
  -n USER_CLUSTER_NAME-gke-onprem-mgmt \
  --type merge -p "{\"data\":{\"stackdriver-service-account-key\":\"$(cat STACKDRIVER_SERVICE_ACCOUNT_KEY_FILE | base64 | tr -d '\n')\"}}"Mettez à jour la ressource personnalisée OnPremUserClusteravec le champ stackdriver. Vous devez utiliser le même projet avec le même emplacement de projet et la même clé de compte de service que cloudauditlogging si vous avez activé la fonctionnalité.kubectl --kubeconfig ADMIN_KUBECONFIG \
    patch onpremusercluster USER_CLUSTER_NAME \
    -n USER_CLUSTER_NAME-gke-onprem-mgmt --type merge -p '
    spec:
      stackdriver:
        clusterLocation: PROJECT_LOCATIONproviderID:PROJECT_IDserviceAccountKey:
          kubernetesSecret:
            keyName: stackdriver-service-account-key
            name: user-cluster-creds
'Ajoutez la section stackdriver à votre fichier de configuration de cluster pour plus de cohérence.
       | 
  | Mises à niveau | 1.29, 1.30, 1.31, 1.32+ | Les pods ne parviennent pas à se connecter au serveur d'API Kubernetes avec Dataplane V2 et des règles de réseau restrictivesDans les clusters utilisant l'architecture Control Plane V2 (CPv2) (par défaut dans la version 1.29 et ultérieure) et Dataplane V2, il est possible que les pods ne parviennent pas à se connecter au serveur d'API Kubernetes (kubernetes.default.svc.cluster.local). Ce problème est souvent déclenché par la présence de règles de réseau, en particulier celles avec des règles de sortie par défaut. Voici quelques exemples de problèmes constatés : 
    Les tentatives de connexion TCP à l'adresse IP du cluster ou aux adresses IP des nœuds du serveur d'API génèrent un message Connection reset by peer.Échecs de handshake TLS lors de la connexion au serveur d'API.L'exécution de la commande cilium monitor -t dropsur le nœud concerné peut indiquer que les paquets destinés aux adresses IP des nœuds du plan de contrôle et au port du serveur d'API (généralement 6443) sont supprimés. CauseCe problème est dû à une interaction entre Dataplane V2 (basé sur Cilium) et les règles de réseau Kubernetes dans l'architecture CPv2, où les composants du plan de contrôle s'exécutent sur des nœuds du cluster d'utilisateur. La configuration Cilium par défaut n'interprète pas correctement les règles ipBlock dans les règles réseau qui sont censées autoriser le trafic vers les adresses IP des nœuds des membres du plan de contrôle. Ce problème est lié à un problème Cilium en amont (cilium#20550).  Solution : Pour les versions 1.29, 1.30 et 1.31, évitez d'utiliser des règles de réseau de sortie restrictives qui pourraient bloquer le trafic vers les nœuds du plan de contrôle. Si vous avez besoin d'une règle de refus par défaut, vous devrez peut-être ajouter une règle d'autorisation générale pour tout le trafic de sortie, par exemple en ne spécifiant aucune règle "to" dans la section "egress", ce qui autorise effectivement tout le trafic de sortie. Cette solution est moins sécurisée et peut ne pas convenir à tous les environnements.  Pour toutes les autres versions, activez une configuration Cilium afin de faire correspondre correctement les adresses IP des nœuds dans les champs ipBlock de la règle de réseau. Pour faire correspondre les adresses IP des nœuds dans les champs ipBlockde la règle de réseau, procédez comme suit : 
    Modifiez le fichier ConfigMap cilium-config:kubectl edit configmap -n kube-system cilium-configAjoutez ou modifiez la section de données pour inclure policy-cidr-match-mode: nodes:data:
      policy-cidr-match-mode: nodesPour appliquer la modification de configuration, redémarrez le DaemonSet anetd :
    kubectl rollout restart ds anetd -n kube-systemAssurez-vous de disposer d'une règle de réseau qui autorise explicitement le trafic de sortie de vos pods vers les adresses IP des nœuds du plan de contrôle sur le port du serveur d'API.
    Identifiez les adresses IP des nœuds du plan de contrôle de votre cluster d'utilisateur en exécutant kubectl get svc kubernetes. Le résultat ressemble à ce qui suit :    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-egress-to-kube-apiserver
      namespace: NAMESPACE_NAME
    spec:
      podSelector: {} 
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: CP_NODE_IP_1/32
        - ipBlock:
            cidr: CP_NODE_IP_2/32
        ports:
        - protocol: TCP
          port: 6443 # Kubernetes API Server port on the node
     | 
  | Installation | 1.30.200-gke.101 | Le pod de l'agent gke-connectest bloqué à l'étatPendinglors de la création du cluster d'utilisateur.Lors de la création d'un cluster d'utilisateur, le pod de l'agent gke-connectpeut rester bloqué à l'étatPending, ce qui empêche la création complète du cluster. Ce problème se produit, car le pod de l'agentgke-connecttente de planifier avant que les nœuds de calcul ne soient disponibles, ce qui entraîne un blocage. Ce problème se produit lorsque la création initiale du cluster d'utilisateur échoue en raison d'erreurs de validation préliminaire, et qu'une tentative ultérieure de création du cluster est effectuée sans supprimer d'abord les ressources partiellement créées. Lors de la tentative de création de cluster suivante, le pod de l'agent gke-connectest bloqué en raison de taints non tolérés sur les nœuds du plan de contrôle, comme indiqué par une erreur semblable à la suivante :     0/3 nodes are available: 3 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }`.
    Solution :  Si la création du cluster d'utilisateur échoue en raison d'erreurs de validation préliminaire, supprimez les ressources du cluster partiellement créé avant de tenter de recréer le cluster avec des configurations corrigées. Cela garantit que le workflow de création se déroule correctement, y compris la création de pools de nœuds avant le déploiement du pod de l'agent gke-connect. | 
    | Mettre à jour | 1.16 et versions antérieures, 1.28.0-1.28.1100, 1.29.0-1.29.700, 1.30.0-1.30.200 | Secrets toujours chiffrés après la désactivation du chiffrement permanent des secretsAprès avoir désactivé le chiffrement des secrets toujours activé avec gkectl update cluster, les secrets sont toujours stockés dansetcdavec chiffrement. Ce problème ne concerne que les clusters d'utilisateur kubeception. Si votre cluster utilise Controlplane V2, ce problème ne vous concerne pas. Pour vérifier si les secrets sont toujours chiffrés, exécutez la commande suivante, qui récupère le secret default/private-registry-credsstocké dansetcd: 
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    exec -it -n USER_CLUSTER_NAME kube-etcd-0 -c kube-etcd -- \
    /bin/sh -ec "export ETCDCTL_API=3; etcdctl \
    --endpoints=https://127.0.0.1:2379 \
    --cacert=/etcd.local.config/certificates/etcdCA.crt \
    --cert=/etcd.local.config/certificates/etcd.crt \
    --key=/etcd.local.config/certificates/etcd.key \
    get /registry/secrets/default/private-registry-creds" | hexdump -C
Si le secret est stocké avec chiffrement, le résultat ressemble à ce qui suit : 00000000  2f 72 65 67 69 73 74 72  79 2f 73 65 63 72 65 74  |/registry/secret|
00000010  73 2f 64 65 66 61 75 6c  74 2f 70 72 69 76 61 74  |s/default/privat|
00000020  65 2d 72 65 67 69 73 74  72 79 2d 63 72 65 64 73  |e-registry-creds|
00000030  0d 0a 6b 38 73 3a 65 6e  63 3a 6b 6d 73 3a 76 31  |..k8s:enc:kms:v1|
00000040  3a 67 65 6e 65 72 61 74  65 64 2d 6b 65 79 2d 6b  |:generated-key-k|
00000050  6d 73 2d 70 6c 75 67 69  6e 2d 31 3a 00 89 65 79  |ms-plugin-1:..ey|
00000060  4a 68 62 47 63 69 4f 69  4a 6b 61 58 49 69 4c 43  |JhbGciOiJkaXIiLC|
... Si le secret n'est pas stocké avec chiffrement, le résultat ressemble à ce qui suit : 00000000  2f 72 65 67 69 73 74 72  79 2f 73 65 63 72 65 74  |/registry/secret|
00000010  73 2f 64 65 66 61 75 6c  74 2f 70 72 69 76 61 74  |s/default/privat|
00000020  65 2d 72 65 67 69 73 74  72 79 2d 63 72 65 64 73  |e-registry-creds|
00000030  0d 0a 6b 38 73 00 0d 0a  0c 0d 0a 02 76 31 12 06  |..k8s.......v1..|
00000040  53 65 63 72 65 74 12 83  47 0d 0a b0 2d 0d 0a 16  |Secret..G...-...|
00000050  70 72 69 76 61 74 65 2d  72 65 67 69 73 74 72 79  |private-registry|
00000060  2d 63 72 65 64 73 12 00  1a 07 64 65 66 61 75 6c  |-creds....defaul|
... Solution : 
       Effectuez une mise à jour progressive sur un DaemonSet spécifique, comme suit :
        kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      rollout restart statefulsets kube-apiserver \
      -n USER_CLUSTER_NAME
    Obtenez les fichiers manifestes de tous les secrets du cluster utilisateur au format YAML :
        kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
      get secrets -A -o yaml > SECRETS_MANIFEST.yaml
     Réappliquez tous les secrets dans le cluster utilisateur pour que tous les secrets soient stockés dans etcden texte brut :    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
      apply -f SECRETS_MANIFEST.yaml
     | 
    | Configuration | 1.29, 1.30, 1.31 | Le champ hostgroupsest manquant dans le fichieruser-cluster.yamlgénéréLe fichier de configuration du cluster d'utilisateur, user-cluster.yaml, généré par la commandegkectl get-config, ne comporte pas le champhostgroupsdans la sectionnodePools. La commandegkectl get-configgénère le fichieruser-cluster.yamlen fonction du contenu de la ressource personnaliséeOnPremUserCluster. Toutefois, le champnodePools[i].vsphere.hostgroupsexiste dans la ressource personnaliséeOnPremNodePoolet n'est pas copié dans le fichieruser-cluster.yamllorsque vous exécutezgkectl get-config. Solution Pour résoudre ce problème, ajoutez manuellement le champ nodePools[i].vsphere.hostgroupsau fichieruser-cluster.yaml. Le fichier modifié doit ressembler à l'exemple suivant : apiVersion: v1
kind: UserCluster
...
nodePools:
- name: "worker-pool-1"
  enableLoadBalancer: true
  replicas: 3
  vsphere:
    hostgroups:
    - "hostgroup-1"
...Vous pouvez utiliser le fichier de configuration de cluster d'utilisateur modifié pour mettre à jour votre cluster d'utilisateur sans déclencher d'erreurs. Le champ hostgroupsest conservé. | 
  | Mise en réseau | 1.29.0-1.29.1000 1.30.0-1.30.500, 1.31.0-1.31.100 | L'entrée groupée n'est pas compatible avec les ressources gateway.networking.k8s.io Les pods Istiod de l'entrée groupée ne peuvent pas être prêts si les ressources gateway.networking.k8s.iosont installées dans le cluster d'utilisateur. Le message d'erreur suivant peut être trouvé dans les journaux de pods : 
    failed to list *v1beta1.Gateway: gateways.gateway.networking.k8s.io is forbidden: User \"system:serviceaccount:gke-system:istiod-service-account\" cannot list resource \"gateways\" in API group \"gateway.networking.k8s.io\" at the cluster scope"
    Solution :  Appliquez les ClusterRole et ClusterRoleBinding suivants à votre cluster d'utilisateur :  apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: istiod-gateway
rules:
- apiGroups:
  - 'gateway.networking.k8s.io'
  resources:
  - '*'
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: istiod-gateway-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: istiod-gateway
subjects:
- kind: ServiceAccount
  name: istiod-service-account
  namespace: gke-system
     | 
  | Installation | 1.29.0-1.29.1000 1.30.0-1.30.500, 1.31.0-1.31.100 | Les nœuds du plan de contrôle du cluster d'administrateur redémarrent sans cesse après l'exécution de gkectl create adminSi les noms d'hôte du champ ipblockscontiennent des lettres majuscules, les nœuds du plan de contrôle du cluster d'administrateur peuvent redémarrer sans cesse. Solution : N'utilisez que des noms d'hôte en minuscules. | 
  | Installation, mises à niveau | 1.30.0-1.30.500, 1.31.0-1.31.100 | Runtime: out of memory"error" après l'exécution degkeadm createouupgrade
Lorsque vous créez ou mettez à niveau des postes de travail administrateur avec des commandes gkeadm, vous pouvez obtenir une erreur OOM lors de la validation de l'image OS téléchargée.  Par exemple,
 
Downloading OS image
"gs://gke-on-prem-release/admin-appliance/1.30.400-gke.133/gke-on-prem-admin-appliance-vsphere-1.30.400-gke.133.ova"...
[==================================================>] 10.7GB/10.7GB
Image saved to
/anthos/gke-on-prem-admin-appliance-vsphere-1.30.400-gke.133.ova
Verifying image gke-on-prem-admin-appliance-vsphere-1.30.400-gke.133.ova...
|
runtime: out of memory
 Solution :Augmentez la taille de la mémoire de l'OS sur lequel vous exécutez la commande gkeadm. | 
  | Mises à niveau | 1.30.0-1.30.400 | Mise à niveau d'un cluster d'administrateur non HD bloquée à Creating or updating cluster control plane workloadsLors de la mise à niveau d'un cluster d'administrateur non HD, la mise à niveau peut rester bloquée au niveau de Creating or updating cluster control plane workloads. Ce problème se produit si, dans la VM maître de l'administrateur, ip a | grep calirenvoie un résultat non vide.  Par exemple,
 
ubuntu@abf8a975479b-qual-342-0afd1d9c ~ $ ip a | grep cali
4: cali2251589245f@if3:  mtu 1500 qdisc noqueue state UP group default
 Solution : 
      Réparez le maître administrateur :
gkectl repair admin-master --kubeconfig=ADMIN_KUBECONFIG \
    --config=ADMIN_CONFIG_FILE \
    --skip-validation
Sélectionnez le modèle de VM 1.30 si vous voyez une invite comme celle de l'exemple suivant :
Please select the control plane VM template to be used for re-creating the
admin cluster's control plane VM.
Reprenez la mise à niveau :
gkectl upgrade admin --kubeconfig ADMIN_KUBECONFIG \
    --config ADMIN_CONFIG_FILE
 | 
  | Configuration | 1.31.0 | Champ isControlPlaneredondant dans le fichier de configuration du cluster sousnetwork.controlPlaneIPBlock Les fichiers de configuration de cluster générés par gkectl create-configdans la version 1.31.0 contiennent un champisControlPlaneredondant sousnetwork.controlPlaneIPBlock:     controlPlaneIPBlock:
    netmask: ""
    gateway: ""
    ips:
    - ip: ""
      hostname: ""
      isControlPlane: false
    - ip: ""
      hostname: ""
      isControlPlane: false
    - ip: ""
      hostname: ""
      isControlPlane: false
     Ce champ n'est pas nécessaire et peut être supprimé du fichier de configuration sans risque.
     | 
  
  | Migration | 1.29.0-1.29.800, 1.30.0-1.30.400, 1.31.0 | Les nœuds de modules complémentaires de l'administrateur sont bloqués sur "NotReady" lors de la migration d'un cluster d'administrateur standard vers un cluster d'administrateur à haute disponibilitéLorsque vous migrez un cluster d'administrateur non HD qui utilise MetalLB vers un cluster HD, les nœuds de modules complémentaires d'administration peuvent rester bloqués à l'état NotReady, ce qui empêche la migration de se terminer. Ce problème n'affecte que les clusters d'administrateur configurés avec MetalLB, où la réparation automatique n'est pas activée. Ce problème est dû à une condition de concurrence lors de la migration, où les speakers MetalLB utilisent toujours l'ancien secret metallb-memberlist. En raison de la condition de concurrence, l'ancienne adresse IP virtuelle du plan de contrôle devient inaccessible, ce qui bloque la migration. Solution : 
      Supprimez le secret metallb-memberlistexistant :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    delete secret metallb-memberlist
Redémarrez le déploiement metallb-controllerpour qu'il puisse générer le nouveaumetallb-memberlist:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    rollout restart deployment metallb-controller
Assurez-vous que le nouveau metallb-memberlistest généré :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    get secret metallb-memberlist
Mettez à jour updateStrategy.rollingUpdate.maxUnavailabledans le DaemonSetmetallb-speakerde1à100%.Cette étape est obligatoire, car certains pods DaemonSet s'exécutent sur les nœuds NotReady. 
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    edit daemonset metallb-speaker
Redémarrez le DaemonSet metallb-speakerpour qu'il puisse récupérer la nouvelle liste des membres :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    rollout restart daemonset metallb-speaker
Au bout de quelques minutes, les nœuds de module complémentaire d'administration redeviennent Readyet la migration peut se poursuivre.Si la commande gkectlinitiale a expiré après plus de trois heures, réexécutezgkectl updatepour reprendre la migration qui a échoué. | 
  | Configuration, fonctionnement | 1.12+, 1.13+, 1.14+, 1.15+, 1.16+, 1.28+, 1.29+, 1.30+ | Échec de la sauvegarde du cluster pour un cluster d'administrateur non haute disponibilité en raison de noms de datastore et de disque de données trop longs Lorsque vous tentez de sauvegarder un cluster d'administrateur non HA, la sauvegarde échoue, car la longueur combinée des noms du datastore et du disque de données dépasse la longueur maximale autorisée.  La longueur maximale d'un nom de data store est de 80 caractères.Le chemin de sauvegarde d'un cluster d'administrateur non haute disponibilité respecte la syntaxe de nommage "__". Par conséquent, si le nom concaténé dépasse la longueur maximale, la création du dossier de sauvegarde échouera.
 Solution : Renommez le datastore ou le disque de données en lui attribuant un nom plus court.Assurez-vous que la longueur combinée des noms du datastore et du disque de données ne dépasse pas le nombre maximal de caractères.
 | 
  | Mises à niveau | 1.28, 1.29, 1.30 | Le nœud du plan de contrôle d'administrateur HA affiche une version antérieure après l'exécution de gkectl repair admin-master Après l'exécution de la commande gkectl repair admin-master, un nœud de plan de contrôle de l'administrateur peut afficher une version antérieure à celle attendue.  Ce problème se produit, car le modèle de VM sauvegardé utilisé pour la réparation du nœud du plan de contrôle administrateur HA n'est pas actualisé dans vCenter après une mise à niveau. En effet, le modèle de VM de sauvegarde n'a pas été cloné lors de la création de la machine si le nom de la machine reste inchangé. Solution : 
    Déterminez le nom de la machine qui utilise l'ancienne version de Kubernetes :
    
    kubectl get machine -o wide --kubeconfig=ADMIN_KUBECONFIG
    Supprimez l'annotation onprem.cluster.gke.io/prevented-deletion:
    kubectl edit machine MACHINE_NAME --kubeconfig=ADMIN_KUBECONFIG
    Enregistrez la modification.Exécutez la commande suivante pour supprimer la machine :
    
    kubectl delete machine MACHINE_NAME --kubeconfig=ADMIN_KUBECONFIG
    Une nouvelle machine sera créée avec la version appropriée. | 
  | Configuration | 1.30.0 |  Lorsque vous mettez à jour un cluster d'utilisateur ou un pool de nœuds à l'aide de Terraform, il est possible que Terraform tente de définir les champs vCentersur des valeurs vides.  Ce problème peut se produire si le cluster n'a pas été créé à l'origine à l'aide de Terraform. Solution : Pour éviter une mise à jour inattendue, assurez-vous que la mise à jour est sûre avant d'exécuter terraform apply, comme décrit ci-dessous : 
     Exécuter terraform planDans le résultat, vérifiez si les champs vCentersont définis surnil.Si un champ vCenterest défini sur une valeur vide dans la configuration Terraform, ajoutezvcenterà la listeignore_changesen suivant la 
    documentation Terraform. Cela empêche la mise à jour de ces champs.Exécutez à nouveau terraform planet vérifiez le résultat pour confirmer que la mise à jour est conforme à vos attentes. | 
  | Mises à jour | 1.13, 1.14, 1.15, 1.16 | Les nœuds du plan de contrôle du cluster d'utilisateur sont toujours redémarrés lors de la première opération de mise à jour du cluster d'administrateur.  Une fois les nœuds du plan de contrôle des clusters d'utilisateur kubeception créés, mis à jour ou mis à niveau, ils sont redémarrés un par un lors de la première opération du cluster d'administrateur lorsque celui-ci est créé ou mis à niveau vers l'une des versions concernées. Pour les clusters kubeception avec trois nœuds de plan de contrôle, cela ne devrait pas entraîner de temps d'arrêt du plan de contrôle. Le seul impact est que l'opération du cluster d'administrateur prend plus de temps.  | 
  
  
    | Installation, mises à niveau et mises à jour | 1.31 | Erreurs lors de la création de ressources personnaliséesDans la version 1.31 de Google Distributed Cloud, des erreurs peuvent se produire lorsque vous essayez de créer des ressources personnalisées, telles que des clusters (tous types) et des charges de travail. Ce problème est dû à une modification incompatible introduite dans Kubernetes 1.31, qui empêche le champ caBundled'une définition de ressource personnalisée de passer d'un état valide à un état non valide.
      Pour en savoir plus sur cette modification, consultez le journal des modifications de Kubernetes 1.31. Avant la version 1.31 de Kubernetes, le champ caBundleétait souvent défini sur une valeur de substitution\n, car dans les versions antérieures de Kubernetes, le serveur d'API n'autorisait pas le contenu vide du bundle d'autorité de certification. L'utilisation de\nétait une solution de contournement raisonnable pour éviter toute confusion, carcert-managermet généralement à jourcaBundleultérieurement. Si caBundlea été corrigé une fois pour passer d'un état non valide à un état valide, il ne devrait pas y avoir de problème. Toutefois, si la définition de la ressource personnalisée est réconciliée avec\n(ou une autre valeur non valide), l'erreur suivante peut se produire : 
...Invalid value: []byte{0x5c, 0x6e}: unable to load root certificates: unable to parse bytes as PEM block]
Solution Si vous disposez d'une définition de ressource personnalisée dans laquelle caBundleest défini sur une valeur non valide, vous pouvez supprimer le champcaBundleen toute sécurité. Cela devrait résoudre le problème. | 
  | OS | 1.31 | cloud-init statusrenvoie toujours une erreur
Lors de la mise à niveau d'un cluster qui utilise l'image OS Container-Optimized OS (COS) vers la version 1.31, la commande cloud-init statuséchoue, bien que cloud-init se soit terminé sans erreur. Solution : Exécutez la commande suivante pour vérifier l'état de cloud-init : 
    systemctl show -p Result cloud-final.service
    Si le résultat est semblable à ce qui suit, cela signifie que cloud-init s'est terminé correctement : 
    Result=success
     | 
  | Mises à niveau | 1.28 | Échec de la vérification préliminaire du poste de travail administrateur lors de la mise à niveau vers la version 1.28 avec une taille de disque inférieure à 100 GoLors de la mise à niveau d'un cluster vers la version 1.28, la commande gkectl prepareéchoue lors de l'exécution des vérifications préliminaires du poste de travail administrateur si la taille du disque du poste de travail administrateur est inférieure à 100 Go. Dans ce cas, la commande affiche un message d'erreur semblable à celui-ci : 
    Workstation Hardware: Workstation hardware requirements are not satisfied
    Dans la version 1.28, la taille de disque requise pour le poste de travail administrateur est passée de 50 Go à 100 Go. Solution : 
    Effectuez le rollback du poste de travail administrateur.Mettez à jour le fichier de configuration du poste de travail administrateur pour augmenter la taille du disque à au moins 100 Go.Mettez à niveau le poste de travail administrateur. | 
  | Mises à niveau | 1,30 | gkectlrenvoie une erreur "false" sur la classe de stockage NetApp
La commande gkectl upgraderenvoie une erreur incorrecte concernant la storageclass netapp. Le message d'erreur ressemble à ceci :     detected unsupported drivers:
      csi.trident.netapp.io
    Solution : Exécutez gkectl upgradeavec l'indicateur `--skip-pre-upgrade-checks`. | 
  | Identité | toutes les versions | Un certificat CA non valide après la rotation des CA du cluster dans ClientConfigempêche l'authentification du clusterAprès avoir alterné les certificats de l'autorité de certification (CA) sur un cluster d'utilisateur, le champ spec.certificateAuthorityDatadu fichierClientConfigcontient un certificat CA non valide, ce qui empêche l'authentification auprès du cluster. Solution : Avant la prochaine authentification gcloud CLI, mettez à jour manuellement le champ spec.certificateAuthorityDatadansClientConfigavec le certificat d'autorité de certification approprié. 
    Copiez le certificat CA du cluster à partir du champ certificate-authority-datadu fichier kubeconfig du cluster d'administrateur.
    Modifiez le fichier ClientConfiget collez le certificat CA dans le champspec.certificateAuthorityData.    kubectl edit clientconfig default -n kube-public --kubeconfig USER_CLUSTER_KUBECONFIG
     | 
  | Mises à jour | 1.28+ | Échec de la vérification préliminaire lors de la désactivation de l'entrée groupée Lorsque vous désactivez l'entrée groupée en supprimant le champ loadBalancer.vips.ingressVIPdans le fichier de configuration du cluster, un bug dans la vérification préliminaire MetalLB entraîne l'échec de la mise à jour du cluster avec le message d'erreur "Adresse IP virtuelle d'entrée utilisateur non valide : adresse IP non valide". Solution : Ignorez le message d'erreur.Ignorez le contrôle avant vol à l'aide de l'une des méthodes suivantes :
 
    Ajoutez le flag --skip-validation-load-balancerà la commandegkectl update cluster.Annoter l'objet .onpremuserclusteraveconprem.cluster.gke.io/server-side-preflight-skip: skip-validation-load-balancer | 
  | VMware, Mises à niveau | 1.16 | Échec de la mise à niveau du cluster en raison d'une règle de groupe d'anti-affinité manquante dans vCenterLors de la mise à niveau d'un cluster, les objets machine peuvent rester bloqués dans la phase "Création" et ne pas être associés aux objets nœud en raison d'une règle de groupe anti-affinité (AAG) manquante dans vCenter. Si vous décrivez les objets de machine problématiques, vous pouvez voir des messages récurrents tels que "La tâche de reconfiguration de la règle DRS "task-xxxx" est terminée".     kubectl --kubeconfig KUBECONFIG describe machine MACHINE_OBJECT_NAME
    Solution :  Désactivez le paramètre de groupe d'anti-affinité dans la configuration du cluster d'administrateur et la configuration du cluster d'utilisateur, puis déclenchez la commande de mise à jour forcée pour débloquer la mise à niveau du cluster :     gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --force
        gkectl update cluster --config USER_CLUSTER_CONFIG_FILE --kubeconfig USER_CLUSTER_KUBECONFIG --force
     | 
  | Migration | 1.29, 1.30 | La migration d'un cluster d'utilisateur vers Controlplane V2 échoue si le chiffrement des secrets a déjà été activé Lors de la migration d'un cluster d'utilisateur vers Controlplane V2, si le 
    chiffrement permanent des secrets a déjà été activé, le processus de migration ne parvient pas à gérer correctement la clé de chiffrement des secrets. En raison de ce problème, le nouveau cluster Controlplane V2 ne peut pas déchiffrer les secrets. Si le résultat de la commande suivante n'est pas vide, cela signifie que le chiffrement permanent des secrets a été activé à un moment donné et que le cluster est affecté par ce problème :     kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      get onpremusercluster USER_CLUSTER_NAME \
      -n USER_CLUSTER_NAME-gke-onprem-mgmt \
      -o jsonpath={.spec.secretsEncryption}
    Si vous avez déjà commencé la migration et qu'elle échoue, contactez Google pour obtenir de l'aide. Sinon, avant la migration, 
    désactivez le chiffrement permanent des secrets et déchiffrez les secrets.
     | 
  | Migration | 1.29.0-1.29.600, 1.30.0-1.30.100 | La migration d'un cluster d'administrateur de non-HD vers HD échoue si le chiffrement des secrets est activé Si le chiffrement permanent des secrets est activé dans le cluster d'administrateur à la version 1.14 ou antérieure, et que vous avez effectué une mise à niveau depuis d'anciennes versions vers les versions 1.29 et 1.30 concernées, le processus de migration du cluster d'administrateur de non-HA vers HA ne parvient pas à gérer correctement la clé de chiffrement des secrets. En raison de ce problème, le nouveau cluster d'administrateur HA ne peut pas déchiffrer les secrets.  Pour vérifier si le cluster utilise l'ancienne clé formatée :     kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secret -n kube-system admin-master-component-options -o jsonpath='{.data.data}' | base64 -d | grep -oP '"GeneratedKeys":\[.*?\]'
    Si la sortie affiche la clé vide comme suit, cela signifie que le cluster sera affecté par ce problème :     "GeneratedKeys":[{"KeyVersion":"1","Key":""}]
     Si vous avez déjà commencé la migration et qu'elle échoue, contactez Google pour obtenir de l'aide.  Sinon, avant de commencer la migration, faites pivoter la clé de chiffrement. | 
  | Mises à niveau | 1.16, 1.28, 1.29, 1.30 | credential.yamlrégénéré de manière incorrecte lors de la mise à niveau du poste de travail administrateur
Lors de la mise à niveau du poste de travail administrateur à l'aide de la commande gkeadm upgrade
       admin-workstation, le fichiercredential.yamlest régénéré de manière incorrecte. Les champs "Nom d'utilisateur" et "Mot de passe" sont vides.
       De plus, la cléprivateRegistrycontient une faute de frappe. La même faute d'orthographe pour la clé privateRegistryse trouve également dans le fichieradmin-cluster.yaml.Étant donné que le fichier
 credential.yamlest régénéré lors du processus de mise à niveau du cluster d'administrateur, la faute de frappe est toujours présente, même si vous l'avez corrigée précédemment. Solution : 
    Mettez à jour le nom de la clé de registre privé dans credential.yamlpour qu'il corresponde àprivateRegistry.credentials.fileRef.entrydansadmin-cluster.yaml.Mettez à jour le nom d'utilisateur et le mot de passe du registre privé dans le fichier credential.yaml. | 
  | Mises à niveau | 1.16+ | Échec de la mise à niveau du cluster d'utilisateur en raison du délai d'attente de la réconciliation avant la mise à niveauLors de la mise à niveau d'un cluster d'utilisateur, l'opération de réconciliation avant la mise à niveau peut prendre plus de temps que le délai d'attente défini, ce qui entraîne un échec de la mise à niveau.
       Le message d'erreur ressemble à ceci : 
Failed to reconcile the user cluster before upgrade: the pre-upgrade reconcile failed, error message:
failed to wait for reconcile to complete: error: timed out waiting for the condition,
message: Cluster reconcile hasn't finished yet, please fix that before
rerun the upgrade.
  Le délai avant expiration de l'opération de réconciliation avant mise à niveau est de cinq minutes plus une minute par pool de nœuds dans le cluster d'utilisateur. Solution : Assurez-vous que la commande gkectl diagnose clusters'exécute sans erreur.Ignorez l'opération de réconciliation avant la mise à niveau en ajoutant l'indicateur
 --skip-reconcile-before-preflightà la commandegkectl upgrade cluster. Exemple : gkectl upgrade cluster --skip-reconcile-before-preflight --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--config USER_CLUSTER_CONFIG_FILE | 
  | Mises à jour | 1.16, 1.28.0-1.28.800, 1.29.0-1.29.400, 1.30.0 | La mise à jour de ForwardMode DataplaneV2 ne déclenche pas automatiquement le redémarrage du DaemonSet anetdLorsque vous mettez à jour le champ dataplaneV2.forwardMode du cluster d'utilisateur à l'aide de gkectl update cluster, la modification n'est mise à jour que dans le ConfigMap. Le DaemonSetanetdne prendra pas en compte la modification de la configuration tant qu'il n'aura pas été redémarré, et vos modifications ne seront pas appliquées. Solution : Une fois la commande gkectl update clusterterminée, le résultatDone updating the user clusters'affiche. Une fois ce message affiché, exécutez la commande suivante pour redémarrer le DaemonSetanetdet appliquer la modification de configuration : kubectl --kubeconfig USER_CLUSTER_KUBECONFIG rollout restart daemonset anetd Vérifiez que le DaemonSet est prêt après le redémarrage : kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get daemonset anetd Dans le résultat de la commande précédente, vérifiez que le nombre de la colonne DESIREDcorrespond à celui de la colonneREADY. | 
  | Mises à niveau | 1.16 | Commande etcdctl introuvable lors de la mise à niveau du cluster au niveau de la sauvegarde du cluster d'administrateurLors de la mise à niveau d'un cluster d'utilisateur de la version 1.16 vers la version 1.28, le cluster d'administrateur est sauvegardé. Le processus de sauvegarde du cluster d'administrateur affiche le message d'erreur "etcdctl: command not found". La mise à niveau du cluster d'utilisateur réussit et le cluster d'administrateur reste opérationnel. Le seul problème est que le fichier de métadonnées du cluster d'administrateur n'est pas sauvegardé. Le problème est dû au fait que le binaire etcdctla été ajouté dans la version 1.28 et n'est pas disponible sur les nœuds 1.16. La sauvegarde du cluster d'administrateur implique plusieurs étapes, y compris la création d'un instantané etcd, puis l'écriture du fichier de métadonnées pour le cluster d'administrateur.
       La sauvegarde etcd réussit toujours, car etcdctlpeut toujours être déclenché après une exécution dans le pod etcd. Toutefois, l'écriture du fichier de métadonnées échoue, car elle repose toujours sur le binaireetcdctlà installer sur le nœud. Toutefois, la sauvegarde du fichier de métadonnées n'empêche pas la sauvegarde. Le processus de sauvegarde réussit donc, tout comme la mise à niveau du cluster d'utilisateur. Solution : Si vous souhaitez sauvegarder le fichier de métadonnées, suivez la procédure décrite dans Sauvegarder et restaurer un cluster d'administrateur à l'aide de gkectl pour déclencher une sauvegarde distincte du cluster d'administrateur à l'aide de la version de gkectlcorrespondant à la version de votre cluster d'administrateur. | 
  | Installation | 1.16-1.29 | Échec de la création du cluster d'utilisateur avec équilibrage de charge manuelLors de la création d'un cluster d'utilisateur configuré pour l'équilibrage de charge manuel, une erreur gkectl check-configse produit, indiquant que la valeuringressHTTPNodePortdoit être d'au moins 30 000, même lorsque l'entrée groupée est désactivée. Ce problème se produit, que les champs ingressHTTPNodePortetingressHTTPSNodePortsoient définis ou laissés vides. Solution : Pour contourner ce problème, ignorez le résultat renvoyé par gkectl check-config. Pour désactiver l'entrée groupée, consultez Désactiver l'entrée groupée. | 
  
  | Mises à jour | 1.29.0 | Le problème lié au PodDisruptionBudget(PDB) se produit lorsque vous utilisez des clusters d'administrateur à haute disponibilité (HA) et qu'il y a 0 ou 1 nœud de cluster d'administrateur sans rôle après la migration. Pour vérifier s'il existe des objets de nœud sans rôle, exécutez la commande suivante : kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes -o wide S'il existe deux objets de nœud ou plus sans rôle après la migration, cela signifie que le PDB n'est pas mal configuré. Symptômes : Le résultat de
      admin cluster diagnose inclut les informations suivantes 
Checking all poddisruptionbudgets...FAILURE
  Reason: 1 pod disruption budget error(s).
  Unhealthy Resources:
  PodDisruptionBudget metrics-server: gke-managed-metrics-server/metrics-server might be configured incorrectly: the total replicas(1) should be larger than spec.MinAvailable(1).
 Solution : Exécutez la commande suivante pour supprimer le PDB : kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pdb metrics-server -n gke-managed-metrics-server | 
  | Installation, mises à niveau et mises à jour | 1.28.0-1.28.600,1.29.0-1.29.100 | Le webhook d'autorisation binaire empêche le démarrage du plug-in CNI, ce qui fait qu'un des pools de nœuds ne démarre pas.Dans de rares conditions de concurrence, une séquence d'installation incorrecte du webhook autorisation binaire et du pod gke-connect peut entraîner le blocage de la création du cluster d'utilisateur, car un nœud ne parvient pas à atteindre l'état prêt. Dans les scénarios concernés, la création d'un cluster d'utilisateur peut être bloquée si un nœud ne parvient pas à atteindre l'état prêt. Dans ce cas, le message suivant s'affiche : 
     Node pool is not ready: ready condition is not true: CreateOrUpdateNodePool: 2/3 replicas are ready
    Solution : 
       Supprimez la configuration de l'autorisation binaire de votre fichier de configuration. Pour obtenir des instructions de configuration, veuillez consulter le guide d'installation de l'autorisation binaire pour GKE sur VMware.
       Pour débloquer un nœud défectueux lors du processus de création du cluster actuel, supprimez temporairement la configuration du webhook d'autorisation binaire dans le cluster d'utilisateur à l'aide de la commande suivante.
                kubectl --kubeconfig USER_KUBECONFIG delete ValidatingWebhookConfiguration binauthz-validating-webhook-configuration
        Une fois le processus d'amorçage terminé, vous pouvez rajouter la configuration de webhook suivante.apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: binauthz-validating-webhook-configuration
webhooks:
- name: "binaryauthorization.googleapis.com"
  namespaceSelector:
    matchExpressions:
    - key: control-plane
      operator: DoesNotExist
  objectSelector:
    matchExpressions:
    - key: "image-policy.k8s.io/break-glass"
      operator: NotIn
      values: ["true"]
  rules:
  - apiGroups:
    - ""
    apiVersions:
    - v1
    operations:
    - CREATE
    - UPDATE
    resources:
    - pods
    - pods/ephemeralcontainers
  admissionReviewVersions:
  - "v1beta1"
  clientConfig:
    service:
      name: binauthz
      namespace: binauthz-system
      path: /binauthz
    # CA Bundle will be updated by the cert rotator.
    caBundle: Cg==
  timeoutSeconds: 10
  # Fail Open
  failurePolicy: "Ignore"
  sideEffects: None
         | 
  | Mises à niveau | 1.16, 1.28, 1.29 | La mise à niveau du cluster d'utilisateur CPV2 est bloquée en raison d'une machine en miroir avec deletionTimestampLors de la mise à niveau d'un cluster d'utilisateur, l'opération de mise à niveau peut se bloquer si l'objet machine mis en miroir dans le cluster d'utilisateur contient un deletionTimestamp. Le message d'erreur suivant s'affiche si la mise à niveau est bloquée : 
    machine is still in the process of being drained and subsequently removed
    Ce problème peut se produire si vous avez déjà tenté de réparer le nœud du plan de contrôle utilisateur en exécutant gkectl delete machinesur la machine mise en miroir dans le cluster utilisateur. Solution : 
     Récupérez l'objet de la machine mise en miroir et enregistrez-le dans un fichier local à des fins de sauvegarde.Exécutez la commande suivante pour supprimer le finaliseur de la machine mise en miroir et attendez qu'il soit supprimé du cluster d'utilisateur.
        kubectl --kubeconfig ADMIN_KUBECONFIG patch machine/MACHINE_OBJECT_NAME -n USER_CLUSTER_NAME-gke-onprem-mgmt -p '{"metadata":{"finalizers":[]}}' --type=mergeSuivez les étapes décrites dans 
    Nœud du plan de contrôle du cluster d'utilisateur Controlplane V2 pour déclencher la réparation des nœuds du plan de contrôle. La spécification de la machine source correcte sera ainsi resynchronisée dans le cluster d'utilisateur.Exécutez à nouveau gkectl upgrade clusterpour reprendre la mise à niveau. | 
  
  | Configuration, installation | 1.15, 1.16, 1.28, 1.29 | Échec de la création du cluster en raison de l'adresse IP virtuelle du plan de contrôle dans un sous-réseau différentPour un cluster d'administrateur à haute disponibilité ou un cluster d'utilisateur Controlplane V2, l'adresse IP virtuelle du plan de contrôle doit se trouver dans le même sous-réseau que les autres nœuds du cluster. Sinon, la création du cluster échoue, car kubelet ne peut pas communiquer avec le serveur d'API à l'aide de l'adresse IP virtuelle du plan de contrôle. Solution : Avant de créer le cluster, assurez-vous que l'adresse IP virtuelle du plan de contrôle est configurée dans le même sous-réseau que les autres nœuds du cluster. | 
  | Installation, mises à niveau, mises à jour | 1.29.0 à 1.29.100 | Échec de la création/mise à niveau du cluster en raison d'un nom d'utilisateur vCenter non FQDNLa création ou la mise à niveau du cluster échoue et renvoie une erreur dans les pods CSI vSphere indiquant que le nom d'utilisateur vCenter n'est pas valide. Cela se produit, car le nom d'utilisateur utilisé n'est pas un nom de domaine complet. Message d'erreur dans le pod vsphere-csi-controller, comme indiqué ci-dessous : 
    GetCnsconfig failed with err: username is invalid, make sure it is a fully qualified domain username
    Ce problème ne se produit que dans la version 1.29 et ultérieures, car une validation a été ajoutée au pilote CSI vSphere pour forcer l'utilisation de noms d'utilisateur de domaine complets. Solution : Utilisez un nom de domaine complet pour le nom d'utilisateur vCenter dans le fichier de configuration des identifiants. Par exemple, au lieu d'utiliser "nomutilisateur1", utilisez "nomutilisateur1@example.com". | 
  | Mises à niveau, mises à jour | 1.28.0 - 1.28.500 | Échec de la mise à niveau du cluster administrateur pour les clusters créés dans la version 1.10 ou antérieureLors de la mise à niveau d'un cluster d'administrateur de la version 1.16 à la version 1.28, l'amorçage de la nouvelle machine maître d'administration peut échouer à générer le certificat du plan de contrôle. Ce problème est dû à des modifications apportées à la façon dont les certificats sont générés pour le serveur d'API Kubernetes dans la version 1.28 et les versions ultérieures. Le problème se reproduit pour les clusters créés sur les versions 1.10 et antérieures qui ont été mis à niveau vers la version 1.16 et dont le certificat feuille n'a pas été renouvelé avant la mise à niveau. Pour déterminer si l'échec de la mise à niveau du cluster d'administrateur est dû à ce problème, procédez comme suit : 
    Connectez-vous à la machine maître administrateur défaillante à l'aide de SSH.Ouvrez /var/log/startup.loget recherchez une erreur semblable à celle-ci : 
Error adding extensions from section apiserver_ext
801B3213B57F0000:error:1100007B:X509 V3 routines:v2i_AUTHORITY_KEYID:unable to get issuer keyid:../crypto/x509/v3_akid.c:177:
801B3213B57F0000:error:11000080:X509 V3 routines:X509V3_EXT_nconf_int:error in extension:../crypto/x509/v3_conf.c:48:section=apiserver_ext, name=authorityKeyIdentifier, value=keyid>
    Solution : 
   Connectez-vous à la machine maître de l'administrateur à l'aide de SSH. Pour en savoir plus, consultez Utiliser SSH pour se connecter à un nœud de cluster d'administrateur.Créez une copie de /etc/startup/pki-yaml.shet nommez-la/etc/startup/pki-yaml-copy.sh.Modifier /etc/startup/pki-yaml-copy.sh. RecherchezauthorityKeyIdentifier=keyidsetet remplacez-le parauthorityKeyIdentifier=keyid,issuerdans les sections des extensions suivantes :apiserver_ext,client_ext,etcd_server_extetkubelet_server_ext. Exemple :
      [ apiserver_ext ]
      keyUsage = critical, digitalSignature, keyEncipherment
      extendedKeyUsage=serverAuth
      basicConstraints = critical,CA:false
      authorityKeyIdentifier = keyid,issuer
      subjectAltName = @apiserver_alt_names
Enregistrez les modifications apportées à /etc/startup/pki-yaml-copy.sh.À l'aide d'un éditeur de texte, ouvrez /opt/bin/master.sh, recherchez et remplacez toutes les occurrences de/etc/startup/pki-yaml.shpar/etc/startup/pki-yaml-copy.sh, puis enregistrez les modifications.Exécutez /opt/bin/master.shpour générer le certificat et terminer le démarrage de la machine.Exécutez à nouveau gkectl upgrade adminpour mettre à niveau le cluster d'administrateur.Une fois la mise à niveau terminée, effectuez la rotation du certificat feuille pour les clusters d'administrateur et d'utilisateur, comme décrit dans Démarrer la rotation.Une fois la rotation du certificat terminée, apportez les mêmes modifications à /etc/startup/pki-yaml-copy.shque précédemment, puis exécutez/opt/bin/master.sh. | 
  
  | Configuration | 1.29.0 | Message d'avertissement incorrect pour les clusters avec Dataplane V2 activéLe message d'avertissement incorrect suivant s'affiche lorsque vous exécutez gkectlpour créer, mettre à jour ou migrer un cluster pour lequel Dataplane V2 est déjà activé : 
WARNING: Your user cluster is currently running our original architecture with
[DataPlaneV1(calico)]. To enable new and advanced features we strongly recommend
to update it to the newer architecture with [DataPlaneV2] once our migration
tool is available.
 Un bug dans gkectl l'empêche de ne pas afficher cet avertissement tant que dataplaneV2.forwardModen'est pas utilisé, même si vous avez déjà définienableDataplaneV2: truedans le fichier de configuration de votre cluster. Solution : Vous pouvez ignorer cet avertissement. | 
  
  | Configuration | 1.28.0-1.28.400, 1.29.0 | La vérification préliminaire de l'installation du cluster d'administrateur à haute disponibilité indique un nombre incorrect d'adresses IP statiques requisesLorsque vous créez un cluster d'administrateur à haute disponibilité, la vérification préliminaire affiche le message d'erreur incorrect suivant : 
- Validation Category: Network Configuration
    - [FAILURE] CIDR, VIP and static IP (availability and overlapping): needed
    at least X+1 IP addresses for admin cluster with X nodes
L'exigence est incorrecte pour les clusters d'administrateur HA en version 1.28 et ultérieure, car ils ne comportent plus de nœuds complémentaires. De plus, comme les adresses IP des trois nœuds du plan de contrôle du cluster d'administrateur sont spécifiées dans la section network.controlPlaneIPBlockdu fichier de configuration du cluster d'administrateur, les adresses IP du fichier de bloc d'adresses IP ne sont nécessaires que pour les nœuds du plan de contrôle du cluster d'utilisateur kubeception. Solution : Pour ignorer la vérification préliminaire incorrecte dans une version non corrigée, ajoutez --skip-validation-net-configà la commandegkectl. | 
  
  | Opération | 1.29.0-1.29.100 | L'agent Connect perd la connexion à Google Cloud après la migration d'un cluster d'administrateur standard vers un cluster d'administrateur à haute disponibilitéSi vous avez migré 
    d'un cluster d'administrateur non HD vers un cluster d'administrateur HD, l'agent Connect du cluster d'administrateur perd la connexion à gkeconnect.googleapis.comet l'erreur "Échec de la validation de la signature JWT" s'affiche. En effet, lors de la migration, la clé de signature KSA est modifiée. Une nouvelle inscription est donc nécessaire pour actualiser les JWK OIDC. Solution : Pour reconnecter le cluster d'administrateur à Google Cloud, procédez comme suit pour déclencher un nouvel enregistrement : Commencez par obtenir le nom du déploiement gke-connect: kubectl --kubeconfig KUBECONFIG get deployment -n gke-connect Supprimez le déploiement gke-connect: kubectl --kubeconfig KUBECONFIG delete deployment GKE_CONNECT_DEPLOYMENT -n gke-connect Déclenchez une réconciliation forcée pour onprem-admin-cluster-controlleren ajoutant une annotation "force-reconcile" à votre CRonpremadmincluster: kubectl --kubeconfig KUBECONFIG patch onpremadmincluster ADMIN_CLUSTER_NAME -n kube-system --type merge -p '
metadata:
  annotations:
    onprem.cluster.gke.io/force-reconcile: "true"
'L'idée est que onprem-admin-cluster-controllerredéploie toujours le déploiementgke-connectet réenregistre le cluster s'il ne trouve aucun déploiementgke-connectexistant. Après la solution de contournement (le contrôleur peut mettre quelques minutes à terminer la réconciliation), vous pouvez vérifier que l'erreur 400 "Échec de la validation de la signature JWT" a disparu des journaux gke-connect-agent: kubectl --kubeconfig KUBECONFIG logs GKE_CONNECT_POD_NAME -n gke-connect | 
  
  | Installation, Système d'exploitation | 1.28.0-1.28.500, 1.29.0 | L'adresse IP de liaison Docker utilise 172.17.0.1/16 pour les nœuds du plan de contrôle du cluster COSGoogle Distributed Cloud spécifie un sous-réseau dédié, --bip=169.254.123.1/24, pour l'adresse IP de la liaison Docker dans la configuration Docker afin d'éviter de réserver le sous-réseau par défaut172.17.0.1/16. Toutefois, dans les versions 1.28.0 à 1.28.500 et 1.29.0, le service Docker n'a pas été redémarré après la personnalisation de la configuration Docker par Google Distributed Cloud en raison d'une régression dans l'image de l'OS COS. En conséquence, Docker sélectionne le paramètre172.17.0.1/16par défaut comme sous-réseau d'adresse IP de liaison. Cela peut entraîner un conflit d'adresses IP si vous avez déjà une charge de travail en cours d'exécution dans cette plage d'adresses IP. Solution : Pour contourner ce problème, vous devez redémarrer le service Docker : sudo systemctl restart docker Vérifiez que Docker sélectionne l'adresse IP de liaison correcte : ip a | grep docker0 Cette solution ne persiste pas lors de la recréation des VM. Vous devez appliquer cette solution de contournement à chaque recréation de VM. | 
  
  | update | 1.28.0-1.28.400, 1.29.0-1.29.100 | L'utilisation de plusieurs interfaces réseau avec le CNI standard ne fonctionne pasLes binaires CNI standards bridge, ipvlan, vlan, macvlan, dhcp, tuning,
    host-local, ptp, portmapne sont pas inclus dans les images OS des versions concernées. Ces binaires CNI ne sont pas utilisés par le plan de données V2, mais peuvent l'être pour des interfaces réseau supplémentaires dans la fonctionnalité d'interfaces réseau multiples. Les interfaces réseau multiples ne fonctionnent pas avec ces plug-ins CNI. Solution : Si vous utilisez cette fonctionnalité, passez à la version qui corrige le problème. | 
  
  | update | 1.15, 1.16, 1.28 | Les dépendances Netapp Trident interfèrent avec le pilote CSI vSphereL'installation de multipathdsur les nœuds de cluster interfère avec le pilote CSI vSphere, ce qui empêche le démarrage des charges de travail utilisateur. Solution : | 
  
  | Mises à jour | 1.15, 1.16 | Le webhook du cluster d'administrateur peut bloquer les mises à jourSi certaines configurations requises sont vides dans le cluster d'administrateur, car des validations ont été ignorées, l'ajout de ces configurations peut être bloqué par le webhook du cluster d'administrateur. Par exemple, si le champ gkeConnectn'a pas été défini dans un cluster d'administrateur existant, l'ajout de ce champ avec la commandegkectl update adminpeut générer le message d'erreur suivant : 
admission webhook "vonpremadmincluster.onprem.cluster.gke.io" denied the request: connect: Required value: GKE connect is required for user clusters
Il peut arriver que la communication entre le serveur d'API Kubernetes et le webhook pose problème. Dans ce cas, le message d'erreur suivant peut s'afficher : 
failed to apply OnPremAdminCluster 'kube-system/gke-admin-btncc': Internal error occurred: failed calling webhook "monpremadmincluster.onprem.cluster.gke.io": failed to call webhook: Post "https://onprem-admin-cluster-controller.kube-system.svc:443/mutate-onprem-cluster-gke-io-v1alpha1-onpremadmincluster?timeout=10s": dial tcp 10.96.55.208:443: connect: connection refused
 Solution :Si vous rencontrez l'une de ces erreurs, utilisez l'une des solutions de contournement suivantes, selon votre version : 
      
        Pour les clusters d'administrateur 1.15, exécutez la commande gkectl update adminavec l'option--disable-admin-cluster-webhook. Exemple :        gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --disable-admin-cluster-webhook
        
        Pour les clusters d'administrateur 1.16, exécutez les commandes gkectl update adminavec l'option--force. Exemple :        gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --force
         | 
  
  
    | Configuration | 1.15.0-1.15.10, 1.16.0-1.16.6, 1.28.0-1.28.200 | Le champ controlPlaneNodePortest défini par défaut sur 30968 lorsque la spécificationmanualLBest vide.Si vous utilisez un équilibreur de charge manuel (loadBalancer.kindest défini sur"ManualLB"), vous n'avez pas besoin de configurer la sectionloadBalancer.manualLBdans le fichier de configuration pour un cluster d'administrateur à haute disponibilité (HA) dans les versions 1.16 et ultérieures. Toutefois, lorsque cette section est vide, Google Distributed Cloud attribue des valeurs par défaut à tous les NodePorts, y comprismanualLB.controlPlaneNodePort, ce qui entraîne l'échec de la création du cluster avec le message d'erreur suivant : - Validation Category: Manual LB
  - [FAILURE] NodePort configuration: manualLB.controlPlaneNodePort must
   not be set when using HA admin cluster, got: 30968 Solution : Spécifiez manualLB.controlPlaneNodePort: 0dans la configuration de votre cluster d'administrateur pour le cluster d'administrateur à haute disponibilité : loadBalancer:
  ...
  kind: ManualLB
  manualLB:
    controlPlaneNodePort: 0
  ... | 
  
  
    | Stockage | 1.28.0-1.28.100 | nfs-common est manquant dans l'image de l'OS UbuntuSi le journal contient une entrée semblable à la suivante après la mise à niveau vers la version 1.28, vous êtes concerné par ce problème :nfs-commonest manquant dans l'image de l'OS Ubuntu, ce qui peut entraîner des problèmes pour les clients utilisant des pilotes dépendants de NFS tels que NetApp.
 Warning FailedMount 63s (x8 over 2m28s) kubelet MountVolume.SetUp failed for volume "pvc-xxx-yyy-zzz" : rpc error: code = Internal desc = error mounting NFS volume 10.0.0.2:/trident_pvc_xxx-yyy-zzz on mountpoint /var/lib/kubelet/pods/aaa-bbb-ccc/volumes/kubernetes.io~csi/pvc-xxx-yyy-zzz/mount: exit status 32".
      Solution : Assurez-vous que vos nœuds peuvent télécharger des packages depuis Canonical. Appliquez ensuite le DaemonSet suivant à votre cluster pour installer nfs-common: apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: install-nfs-common
  labels:
    name: install-nfs-common
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: install-nfs-common
  minReadySeconds: 0
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 100%
  template:
    metadata:
      labels:
        name: install-nfs-common
    spec:
      hostPID: true
      hostIPC: true
      hostNetwork: true
      initContainers:
      - name: install-nfs-common
        image: ubuntu
        imagePullPolicy: IfNotPresent
        securityContext:
          privileged: true
        command:
        - chroot
        - /host
        - bash
        - -c
        args:
        - |
          apt install -y nfs-common
        volumeMounts:
        - name: host
          mountPath: /host
      containers:
      - name: pause
        image: gcr.io/gke-on-prem-release/pause-amd64:3.1-gke.5
        imagePullPolicy: IfNotPresent
      volumes:
      - name: host
        hostPath:
          path: /
       | 
  
  
    | Stockage | 1.28.0-1.28.100 | Le champ "Règles de stockage" est manquant dans le modèle de configuration du cluster d'administrateurSPBM dans les clusters d'administrateur est compatible avec la version 1.28.0 et les versions ultérieures. Toutefois, le champ vCenter.storagePolicyNameest manquant dans le modèle de fichier de configuration. Solution : Ajoutez le champ "vCenter.storagePolicyName" dans le fichier de configuration de votre cluster d'administrateur si vous souhaitez configurer la règle de stockage pour le cluster d'administrateur. Veuillez consulter les instructions. | 
  
  
    | Journalisation et surveillance | 1.28.0-1.28.100 | L'API kubernetesmetadata.googleapis.com récemment ajoutée n'est pas compatible avec VPC-SC. Par conséquent, l'agent de collecte de métadonnées ne pourra pas accéder à cette API sous VPC-SC. Les libellés de métadonnées des métriques seront alors manquants.  Solution : Dans l'espace de noms `kube-system`, définissez le champ `featureGates.disableExperimentalMetadataAgent` du CR `stackdriver` sur `true` en exécutant la commande   `kubectl -n kube-system patch stackdriver stackdriver -p '{"spec":{"featureGates":{"disableExperimentalMetadataAgent":true}}}'`   Exécutez ensuite   `kubectl -n kube-system patch deployment stackdriver-operator -p '{"spec":{"template":{"spec":{"containers":[{"name":"stackdriver-operator","env":[{"name":"ENABLE_LEGACY_METADATA_AGENT","value":"true"}]}]}}}}'`  | 
  
  | Mises à niveau, mises à jour | 1.15.0-1.15.7, 1.16.0-1.16.4, 1.28.0 | Le clusterapi-controller peut planter lorsque le cluster d'administrateur et un cluster d'utilisateur avec ControlPlane V2 activé utilisent des identifiants vSphere différents.Lorsqu'un cluster d'administrateur et un cluster d'utilisateur avec ControlPlane V2 activé utilisent des identifiants vSphere différents (par exemple, après la mise à jour des identifiants vSphere pour le cluster d'administrateur), il est possible que clusterapi-controller ne parvienne pas à se connecter à vCenter après le redémarrage. Affichez le journal du clusterapi-controller exécuté dans l'espace de noms `kube-system` du cluster d'administrateur. kubectl logs -f -l component=clusterapi-controllers -c vsphere-controller-manager \
    -n kube-system --kubeconfig KUBECONFIGSi le journal contient une entrée comme celle ci-dessous, vous êtes concerné par ce problème :E1214 00:02:54.095668       1 machine_controller.go:165] Error checking existence of machine instance for machine object gke-admin-node-77f48c4f7f-s8wj2: Failed to check if machine gke-admin-node-77f48c4f7f-s8wj2 exists: failed to find datacenter "VSPHERE_DATACENTER": datacenter 'VSPHERE_DATACENTER' not found Solution : Mettez à jour les identifiants vSphere afin que le cluster d'administrateur et tous les clusters d'utilisateur avec Controlplane V2 activé utilisent les mêmes identifiants vSphere.  | 
  
  
    | Journalisation et surveillance | 1,14 | Nombre élevé de requêtes GRPC ayant échoué dans Prometheus Alert ManagerPrometheus peut signaler des alertes semblables à l'exemple suivant : Alert Name: cluster:gke-admin-test1: Etcd cluster kube-system/kube-etcd: 100% of requests for Watch failed on etcd instance etcd-test-xx-n001. Pour vérifier si cette alerte est un faux positif qui peut être ignoré, procédez comme suit : 
        Comparez la métrique grpc_server_handled_totalbrute à la valeurgrpc_methodindiquée dans le message d'alerte. Dans cet exemple, vérifiez le libellégrpc_codepourWatch.
 Vous pouvez vérifier cette métrique à l'aide de Cloud Monitoring avec la requête MQL suivante :
 fetch
    k8s_container | metric 'kubernetes.io/anthos/grpc_server_handled_total' | align rate(1m) | every 1mVous pouvez ignorer les alertes concernant tous les codes autres que OKsi le code n'est pas l'un des suivants :Unknown|FailedPrecondition|ResourceExhausted|Internal|Unavailable|DataLoss|DeadlineExceeded 
 Solution : Pour configurer Prometheus afin qu'il ignore ces fausses alertes positives, examinez les options suivantes : 
        Coupez le son de l'alerte depuis l'interface utilisateur Alert Manager.Si vous ne pouvez pas désactiver l'alerte, suivez les étapes ci-dessous pour supprimer les faux positifs :
        
          Réduisez la capacité de l'opérateur de surveillance à 0réplicas pour que les modifications puissent persister.Modifiez la configmap prometheus-configet ajoutezgrpc_method!="Watch"à la configuration d'alerteetcdHighNumberOfFailedGRPCRequests, comme indiqué dans l'exemple suivant :
              Original :
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code!="OK",job=~".*etcd.*"}[5m])Modifié :
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code=~"Unknown|FailedPrecondition|ResourceExhausted|Internal|Unavailable|DataLoss|DeadlineExceeded",grpc_method!="Watch",job=~".*etcd.*"}[5m])RemplacezCLUSTER_NAMEpar le nom de votre cluster.Redémarrez le StatefulSet Prometheus et Alertmanager pour récupérer la nouvelle configuration.Si le code fait partie de l'un des cas problématiques, consultez le journal etcd et le journal kube-apiserverpour en savoir plus. | 
  
  
    | Mise en réseau | 1.16.0-1.16.2, 1.28.0 | Les connexions NAT de sortie de longue durée sont abandonnéesLes connexions NAT de sortie peuvent être abandonnées après 5 à 10 minutes d'établissement d'une connexion s'il n'y a pas de trafic. Étant donné que le suivi des connexions n'a d'importance que dans le sens entrant (connexions externes au cluster), ce problème ne se produit que si la connexion ne transmet aucune information pendant un certain temps, puis que le côté de destination transmet quelque chose. Si le pod NAT de sortie instancie toujours la messagerie, ce problème ne se produira pas. Ce problème se produit, car le garbage collector anetd supprime par inadvertance les entrées conntrack que le daemon pense inutilisées.
      Un correctif en amont a récemment été intégré à anetd pour corriger le comportement. 
 Solution : Il n'existe aucune solution de contournement simple, et nous n'avons pas constaté de problèmes dans la version 1.16 liés à ce comportement. Si vous constatez que des connexions de longue durée sont abandonnées en raison de ce problème, vous pouvez utiliser une charge de travail sur le même nœud que l'adresse IP de sortie ou envoyer des messages de manière cohérente sur la connexion TCP. | 
  
  
    | Opération | 1.14, 1.15, 1.16 | Le signataire de la CSR ignore spec.expirationSecondslors de la signature des certificats.Si vous créez une demande de signature de certificat (CSR) avec expirationSecondsdéfini,expirationSecondsest ignoré. Solution : Si vous êtes concerné par ce problème, vous pouvez mettre à jour votre cluster d'utilisateur en ajoutant disableNodeIDVerificationCSRSigning: truedans le fichier de configuration du cluster d'utilisateur et en exécutant la commandegkectl update clusterpour mettre à jour le cluster avec cette configuration. | 
  
  
    | Mise en réseau, mises à niveau, mises à jour | 1.16.0-1.16.3 | Échec de la validation de l'équilibreur de charge du cluster d'utilisateur pour disable_bundled_ingressSi vous essayez de désactiver l'entrée groupée pour un cluster existant, la commande gkectl update clusteréchoue et affiche une erreur semblable à l'exemple suivant : 
[FAILURE] Config: ingress IP is required in user cluster spec
 Cette erreur se produit, car gkectlrecherche une adresse IP d'entrée d'équilibreur de charge lors des vérifications préliminaires. Bien que cette vérification ne soit pas requise lors de la désactivation de l'entrée groupée, la vérification préliminairegkectléchoue lorsquedisableBundledIngressest défini surtrue. 
 Solution : Utilisez le paramètre --skip-validation-load-balancerlorsque vous mettez à jour le cluster, comme indiqué dans l'exemple suivant : gkectl update cluster \
  --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG  \
  --skip-validation-load-balancer Pour en savoir plus, découvrez comment désactiver l'entrée groupée pour un cluster existant. | 
  
  
    | Mises à niveau, mises à jour | 1.13, 1.14, 1.15.0-1.15.6 | Échec des mises à jour du cluster d'administrateur après la rotation de l'autorité de certificationSi vous faites tourner les certificats de l'autorité de certification (CA) du cluster d'administrateur, les tentatives ultérieures d'exécution de la commande gkectl update adminéchouent.
    L'erreur renvoyée ressemble à ce qui suit : 
failed to get last CARotationStage: configmaps "ca-rotation-stage" not found
 
 Solution : Si vous êtes concerné par ce problème, vous pouvez mettre à jour votre cluster d'administrateur en utilisant l'indicateur --disable-update-from-checkpointavec la commandegkectl update admin: gkectl update admin --config ADMIN_CONFIG_file \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --disable-update-from-checkpointLorsque vous utilisez l'indicateur --disable-update-from-checkpoint, la commande update n'utilise pas le fichier de point de contrôle comme source de vérité lors de la mise à jour du cluster. Le fichier de point de contrôle est toujours mis à jour pour une utilisation ultérieure. | 
  
  
    | Stockage | 1.15.0-1.15.6, 1.16.0-1.16.2 | Échec de la vérification préliminaire de la charge de travail CSI en raison de l'échec du démarrage du podLors des vérifications préalables, la vérification de la validation de la charge de travail CSI installe un pod dans l'espace de noms default. Le pod de charge de travail CSI valide que le pilote CSI vSphere est installé et peut provisionner des volumes de manière dynamique. Si ce pod ne démarre pas, le contrôle de validation de la charge de travail CSI échoue. 
      Plusieurs problèmes connus peuvent empêcher le démarrage de ce pod :
       
      Si aucune limite de ressources n'est spécifiée pour le pod (ce qui est le cas pour certains clusters avec des webhooks d'admission installés), le pod ne démarre pas.Si Cloud Service Mesh est installé dans le cluster avec l'injection side-car Istio automatique activée dans l'espace de noms default, le pod de charge de travail CSI ne démarre pas. Si le pod de charge de travail CSI ne démarre pas, une erreur de délai avant expiration semblable à celle-ci s'affiche lors des validations préliminaires : - [FAILURE] CSI Workload: failure in CSIWorkload validation: failed to create writer Job to verify the write functionality using CSI: Job default/anthos-csi-workload-writer-<run-id> replicas are not in Succeeded phase: timed out waiting for the condition Pour vérifier si l'échec est dû à un manque de ressources de pod définies, exécutez la commande suivante pour vérifier l'état du job anthos-csi-workload-writer-<run-id>: kubectl describe job anthos-csi-workload-writer-<run-id> Si les limites de ressources ne sont pas correctement définies pour le pod de charge de travail CSI, l'état du job contient un message d'erreur semblable à celui-ci : CPU and memory resource limits is invalid, as it are not defined for container: volume-tester Si le pod de charge de travail CSI ne démarre pas en raison de l'injection side-car Istio, vous pouvez désactiver temporairement l'injection side-car Istio automatique dans l'espace de noms default. Vérifiez les libellés de l'espace de noms et utilisez la commande suivante pour supprimer le libellé qui commence paristio.io/rev: kubectl label namespace default istio.io/rev- Si le pod est mal configuré, vérifiez manuellement que le provisionnement dynamique de volumes avec le pilote CSI vSphere fonctionne : 
      Créez un PVC qui utilise la StorageClass standard-rwo.Créez un pod qui utilise le PVC.Vérifiez que le pod peut lire/écrire des données dans le volume.Supprimez le pod et le PVC une fois que vous avez vérifié que l'opération s'est déroulée correctement. Si le provisionnement dynamique de volumes avec le pilote CSI vSphere fonctionne, exécutez gkectl diagnoseougkectl upgradeavec l'indicateur--skip-validation-csi-workloadpour ignorer la vérification de la charge de travail CSI. | 
    
  
    | Opération | 1.16.0-1.16.2 | Délai d'expiration de la mise à jour du cluster d'utilisateur lorsque la version du cluster d'administrateur est 1.15Lorsque vous êtes connecté à un 
      poste de travail administrateur géré par l'utilisateur, la commande gkectl update clusterpeut expirer et ne pas mettre à jour le cluster d'utilisateur. Cela se produit si la version du cluster d'administrateur est 1.15 et que vous exécutezgkectl update adminavant d'exécutergkectl update cluster.
      En cas d'échec, l'erreur suivante s'affiche lorsque vous essayez de mettre à jour le cluster : 
      Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
      Lors de la mise à jour d'un cluster d'administrateur 1.15, le validation-controllerqui déclenche les vérifications préliminaires est supprimé du cluster. Si vous essayez ensuite de mettre à jour le cluster d'utilisateur, la vérification préliminaire se bloque jusqu'à ce que le délai d'expiration soit atteint. Solution : 
      Exécutez la commande suivante pour redéployer validation-controller:
      gkectl prepare --kubeconfig ADMIN_KUBECONFIG --bundle-path BUNDLE_PATH --upgrade-platform
      
      Une fois la préparation terminée, exécutez à nouveau gkectl update clusterpour mettre à jour le cluster d'utilisateur. | 
  
  
    | Opération | 1.16.0-1.16.2 | Délai d'expiration de la création du cluster d'utilisateur lorsque la version du cluster d'administrateur est 1.15Lorsque vous êtes connecté à un 
      poste de travail administrateur géré par l'utilisateur, la commande gkectl create clusterpeut expirer et échouer à créer le cluster d'utilisateur. Cela se produit si la version du cluster d'administrateur est 1.15.
      Lorsque cet échec se produit, l'erreur suivante s'affiche lorsque vous essayez de créer le cluster : 
      Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
      Étant donné que validation-controllera été ajouté dans la version 1.16, lorsque vous utilisez un cluster d'administrateur 1.15, levalidation-controllerresponsable du déclenchement des vérifications préalables est manquant. Par conséquent, lorsque vous essayez de créer un cluster d'utilisateur, les vérifications préliminaires se bloquent jusqu'à ce que le délai d'attente soit atteint. Solution : 
      Exécutez la commande suivante pour déployer validation-controller:
      gkectl prepare --kubeconfig ADMIN_KUBECONFIG --bundle-path BUNDLE_PATH --upgrade-platform
      
      Une fois la préparation terminée, exécutez à nouveau gkectl create clusterpour créer le cluster d'utilisateur. | 
  
  
    | Mises à niveau, mises à jour | 1.16.0-1.16.2 | La mise à jour ou la mise à niveau du cluster d'administrateur échoue si les projets ou les emplacements des services de complément ne correspondent pas.Lorsque vous mettez à niveau un cluster d'administrateur de la version 1.15.x vers la version 1.16.x, ou que vous ajoutez une configuration connect,stackdriver,cloudAuditLoggingougkeOnPremAPIlorsque vous mettez à jour un cluster d'administrateur, l'opération peut être refusée par le webhook du cluster d'administrateur. L'un des messages d'erreur suivants peut s'afficher : 
        "projects for connect, stackdriver and cloudAuditLogging must be the
        same when specified during cluster creation.""locations for connect, gkeOnPremAPI, stackdriver and
        cloudAuditLogging must be in the same region when specified during
        cluster creation.""locations for stackdriver and cloudAuditLogging must be the same
        when specified during cluster creation." Une mise à jour ou une mise à niveau du cluster d'administrateur nécessite que onprem-admin-cluster-controllerréconcilie le cluster d'administrateur dans un cluster kind. Lorsque l'état du cluster d'administrateur est restauré dans le cluster Kind, le webhook du cluster d'administrateur ne peut pas déterminer si l'objetOnPremAdminClusterconcerne la création d'un cluster d'administrateur ou la reprise des opérations pour une mise à jour ou une mise à niveau. Certaines validations de création uniquement sont appelées de manière inattendue lors de la mise à jour et de la mise à niveau. 
 Solution : Ajoutez l'annotation
      onprem.cluster.gke.io/skip-project-location-sameness-validation: trueà l'objetOnPremAdminCluster: 
        Modifiez la ressource de cluster onpremadminclusters:kubectl edit onpremadminclusters ADMIN_CLUSTER_NAME -n kube-system –kubeconfig ADMIN_CLUSTER_KUBECONFIGRemplacez les éléments suivants : 
            ADMIN_CLUSTER_NAME: nom du cluster d'administrateur.ADMIN_CLUSTER_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'administrateur.Ajoutez l'annotation
        onprem.cluster.gke.io/skip-project-location-sameness-validation: trueet enregistrez la ressource personnalisée.Selon le type de clusters d'administrateur, effectuez l'une des opérations suivantes :
          
            Pour les clusters d'administrateur non HD avec un fichier de point de contrôle : ajoutez le paramètre disable-update-from-checkpointdans la commande update, ou ajoutez le paramètre "disable-upgrade-from-checkpoint" dans la commande upgrade. Ces paramètres ne sont nécessaires que la prochaine fois que vous exécuterez la commandeupdateouupgrade:
              
gkectl update admin --config ADMIN_CONFIG_file --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
  --disable-update-from-checkpoint
gkectl upgrade admin --config ADMIN_CONFIG_file --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
  --disable-upgrade-from-checkpointPour les clusters d'administrateur HD ou si le fichier de point de contrôle est désactivé :
            mettez à jour ou migrez le cluster d'administrateur comme d'habitude. Aucun paramètre supplémentaire n'est nécessaire pour les commandes de mise à jour ou de mise à niveau. | 
  
  
    | Opération | 1.16.0-1.16.2 | Échec de la suppression d'un cluster d'utilisateur lors de l'utilisation d'un poste de travail administrateur géré par l'utilisateurLorsque vous êtes connecté à un 
      poste de travail administrateur géré par l'utilisateur, la commande gkectl delete clusterpeut expirer et ne pas supprimer le cluster d'utilisateur. Cela se produit si vous avez d'abord exécutégkectlsur le poste de travail géré par l'utilisateur pour créer, mettre à jour ou mettre à niveau le cluster d'utilisateur. Lorsque cet échec se produit, l'erreur suivante s'affiche lorsque vous essayez de supprimer le cluster : 
      failed to wait for user cluster management namespace "USER_CLUSTER_NAME-gke-onprem-mgmt"
      to be deleted: timed out waiting for the condition
      Lors de la suppression, un cluster supprime d'abord tous ses objets. La suppression des objets de validation (créés lors de la création, de la mise à jour ou de la mise à niveau) est bloquée à la phase de suppression. Cela se produit parce qu'un finaliseur bloque la suppression de l'objet, ce qui entraîne l'échec de la suppression du cluster.
       Solution : 
      Obtenez les noms de tous les objets de validation :
        
         kubectl  --kubeconfig ADMIN_KUBECONFIG get validations \
           -n USER_CLUSTER_NAME-gke-onprem-mgmt
        
      Pour chaque objet Validation, exécutez la commande suivante afin de supprimer le finaliseur de l'objet Validation :
      
      kubectl --kubeconfig ADMIN_KUBECONFIG patch validation/VALIDATION_OBJECT_NAME \
        -n USER_CLUSTER_NAME-gke-onprem-mgmt -p '{"metadata":{"finalizers":[]}}' --type=merge
      
      Une fois le finaliseur supprimé de tous les objets de validation, les objets sont supprimés et l'opération de suppression du cluster utilisateur se termine automatiquement. Aucune action supplémentaire n'est requise de votre part.
       | 
  
  
    | Mise en réseau | 1.15, 1.16 | Échec du trafic de la passerelle NAT de sortie vers un serveur externeSi le pod source et le pod de passerelle NAT de sortie se trouvent sur deux nœuds de calcul différents, le trafic provenant du pod source ne peut pas atteindre les services externes. Si les pods sont situés sur le même hôte, la connexion au service ou à l'application externes est établie. Ce problème est dû à la suppression des paquets VXLAN par vSphere lorsque l'agrégation de tunnels est activée. Il existe un problème connu avec NSX et VMware qui n'envoie que le trafic agrégé sur les ports VXLAN connus (4789). 
 Solution : Modifiez le port VXLAN utilisé par Cilium sur 4789: 
        Modifiez le fichier ConfigMap cilium-config:kubectl edit cm -n kube-system cilium-config --kubeconfig USER_CLUSTER_KUBECONFIGAjoutez ce qui suit au fichier ConfigMap cilium-config:tunnel-port: 4789Redémarrez le DaemonSet anetd :
kubectl rollout restart ds anetd -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG Cette solution de contournement est annulée chaque fois que le cluster est mis à niveau. Vous devez reconfigurer après chaque mise à niveau. VMware doit résoudre le problème dans vSphere pour une correction permanente. | 
  
  
    | Mises à niveau | 1.15.0-1.15.4 | Échec de la mise à niveau d'un cluster d'administrateur avec le chiffrement permanent des secrets activéLa mise à niveau du cluster d'administrateur de la version 1.14.x vers la version 1.15.x avec le  chiffrement des secrets toujours activé échoue en raison d'une incompatibilité entre la clé de chiffrement générée par le contrôleur et celle qui persiste sur le disque de données du maître administrateur. Le résultat de gkectl upgrade
        admincontient le message d'erreur suivant : 
      E0926 14:42:21.796444   40110 console.go:93] Exit with error:
      E0926 14:42:21.796491   40110 console.go:93] Failed to upgrade the admin cluster: failed to create admin cluster: failed to wait for OnPremAdminCluster "admin-cluster-name" to become ready: failed to wait for OnPremAdminCluster "admin-cluster-name" to be ready: error: timed out waiting for the condition, message: failed to wait for OnPremAdminCluster "admin-cluster-name" to stay in ready status for duration "2m0s": OnPremAdminCluster "non-prod-admin" is not ready: ready condition is not true: CreateOrUpdateControlPlane: Creating or updating credentials for cluster control plane
      L'exécution de kubectl get secrets -A --kubeconfig KUBECONFIG`échoue avec l'erreur suivante : 
      Internal error occurred: unable to transform key "/registry/secrets/anthos-identity-service/ais-secret": rpc error: code = Internal desc = failed to decrypt: unknown jwk
      SolutionSi vous disposez d'une sauvegarde du cluster d'administrateur, procédez comme suit pour contourner l'échec de la mise à niveau : 
        
          
          Désactivez secretsEncryptiondans le fichier de configuration du cluster d'administrateur, puis mettez à jour le cluster à l'aide de la commande suivante :gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG
        Une fois la nouvelle VM maître de l'administrateur créée, connectez-vous en SSH à la VM maître de l'administrateur, puis remplacez la nouvelle clé sur le disque de données par l'ancienne clé de la sauvegarde. La clé se trouve à l'adresse /opt/data/gke-k8s-kms-plugin/generatedkeyssur le système maître administrateur.
        Mettez à jour le fichier manifeste Pod statique kms-plugin.yaml dans /etc/kubernetes/manifestspour mettre à jour--kek-idafin qu'il corresponde au champkidde la clé de chiffrement d'origine.
        Redémarrez le pod statique kms-plugin en déplaçant le fichier
        /etc/kubernetes/manifests/kms-plugin.yamlvers un autre
        répertoire, puis en le replaçant.
        Reprenez la mise à niveau pour les administrateurs en exécutant à nouveau gkectl upgrade admin. Éviter l'échec de la mise à niveauSi vous ne l'avez pas encore fait, nous vous recommandons de ne pas passer à la version 1.15.0-1.15.4. Si vous devez passer à une version concernée, procédez comme suit avant de mettre à niveau le cluster d'administrateur :
       
        
          
          Sauvegardez le cluster d'administrateur.
        
          
          Désactivez secretsEncryptiondans le fichier de configuration du cluster d'administrateur, puis mettez à jour le cluster à l'aide de la commande suivante :gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIGMettez à niveau le cluster d'administrateur.
            Réactivez le chiffrement permanent des secrets. | 
  
  
    | Stockage | 1.11-1.16 | Erreurs de disque et échecs d'association lors de l'utilisation du suivi des blocs modifiés (CBT)Google Distributed Cloud n'est pas compatible avec le suivi des blocs modifiés (CBT) sur les disques. Certains logiciels de sauvegarde utilisent la fonctionnalité CBT pour suivre l'état du disque et effectuer des sauvegardes, ce qui empêche le disque de se connecter à une VM exécutant Google Distributed Cloud. Pour en savoir plus, consultez l'article de la base de connaissances VMware. 
 Solution : Ne sauvegardez pas les VM Google Distributed Cloud, car un logiciel de sauvegarde tiers peut activer le CBT sur leurs disques. Il n'est pas nécessaire de sauvegarder ces VM. N'activez pas CBT sur le nœud, car cette modification ne sera pas conservée lors des mises à jour ou des mises à niveau. Si vous disposez déjà de disques avec CBT activé, suivez les étapes de la section Résolution de l'article de la base de connaissances VMware pour désactiver CBT sur le disque First Class. | 
  
  
    | Stockage | 1.14, 1.15, 1.16 | Corruption de données sur NFSv3 lorsque des ajouts parallèles à un fichier partagé sont effectués à partir de plusieurs hôtesSi vous utilisez des baies de stockage Nutanix pour fournir des partages NFSv3 à vos hôtes, vous risquez de rencontrer des problèmes de corruption de données ou d'impossibilité d'exécuter correctement les pods. Ce problème est dû à un problème de compatibilité connu entre certaines versions de VMware et de Nutanix. Pour en savoir plus, consultez l'article de la base de connaissances VMware associé. 
 Solution : L'article de la base de connaissances VMware est obsolète, car il indique qu'il n'existe aucune solution actuelle. Pour résoudre ce problème, installez la dernière version d'ESXi sur vos hôtes et la dernière version de Nutanix sur vos baies de stockage. | 
  | Système d'exploitation | 1.13.10, 1.14.6, 1.15.3 | Incompatibilité de version entre le kubelet et le plan de contrôle KubernetesPour certaines versions de Google Distributed Cloud, le kubelet exécuté sur les nœuds utilise une version différente de celle du plan de contrôle Kubernetes. Il existe une incompatibilité, car le binaire kubelet préchargé sur l'image OS utilise une version différente.
     Le tableau suivant répertorie les différences de version identifiées : 
      
        | Version de Google Distributed Cloud | Version du kubelet | Version de Kubernetes |  
        | 1.13.10 | v1.24.11-gke.1200 | v1.24.14-gke.2100 |  
        | 1.14.6 | v1.25.8-gke.1500 | v1.25.10-gke.1200 |  
        | 1.15.3 | v1.26.2-gke.1001 | v1.26.5-gke.2100 |  Solution : Aucune action n'est requise de votre part. L'incohérence ne concerne que les versions correctives de Kubernetes. Ce décalage de version n'a causé aucun problème.
      | 
  | Mises à niveau, mises à jour | 1.15.0-1.15.4 | Échec de la mise à niveau ou de la mise à jour d'un cluster d'administrateur avec une version d'autorité de certification supérieure à 1Lorsqu'un cluster d'administrateur possède une version d'autorité de certification supérieure à 1, une mise à jour ou une mise à niveau échoue en raison de la validation de la version de l'autorité de certification dans le webhook. Le résultat de la mise à niveau/mise à jour gkectlcontient le message d'erreur suivant :     CAVersion must start from 1
    Solution : 
      
        Réduisez le déploiement auto-resize-controllerdans le cluster d'administrateur pour désactiver le redimensionnement automatique des nœuds. Cela est nécessaire, car un nouveau champ introduit dans la ressource personnalisée du cluster d'administrateur dans la version 1.15 peut entraîner une erreur de pointeur nul dansauto-resize-controller. kubectl scale deployment auto-resize-controller -n kube-system --replicas=0 --kubeconfig KUBECONFIG
      
         Exécutez les commandes gkectlavec l'option--disable-admin-cluster-webhook.Par exemple :        gkectl upgrade admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG --disable-admin-cluster-webhook
         | 
  | Opération | 1.13, 1.14.0-1.14.8, 1.15.0-1.15.4, 1.16.0-1.16.1 | La suppression d'un cluster Controlplane V2 sans haute disponibilité est bloquée jusqu'à expiration du délaiLorsqu'un cluster Controlplane V2 sans haute disponibilité est supprimé, il reste bloqué au niveau de la suppression des nœuds jusqu'à ce qu'il expire. Solution : Si le cluster contient un StatefulSet avec des données critiques, contactez Cloud Customer Care pour résoudre ce problème. Sinon, procédez comme suit :
       
     Supprimez toutes les VM du cluster de vSphere. Vous pouvez supprimer les VM via l'interface utilisateur vSphere ou exécuter la commande suivante :
            govc vm.destroy.Forcez à nouveau la suppression du cluster :
          gkectl delete cluster --cluster USER_CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG --force
      | 
  | Stockage | 1.15.0+, 1.16.0+ | Des tâches de volume de pièce jointe CNS constantes apparaissent toutes les minutes pour les PVC/PV intégrés après la mise à niveau vers la version 1.15 ou ultérieure.Lorsqu'un cluster contient des volumes persistants vSphere "in-tree" (par exemple, des PVC créés avec la StorageClass standard), vous verrez des tâches com.vmware.cns.tasks.attachvolume déclenchées toutes les minutes à partir de vCenter. 
 Solution : Modifiez le fichier ConfigMap de la fonctionnalité vSphere CSI et définissez list-volumes sur "false" :      kubectl edit configmap internal-feature-states.csi.vsphere.vmware.com -n kube-system --kubeconfig KUBECONFIG
     Redémarrez les pods du contrôleur CSI vSphere :      kubectl rollout restart deployment vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
     | 
  | Stockage | 1.16.0 | Faux avertissements concernant les PVCLorsqu'un cluster contient des volumes persistants vSphere intégrés, les commandes gkectl diagnoseetgkectl upgradepeuvent générer de faux avertissements concernant leurs demandes de volume persistant (PVC) lors de la validation des paramètres de stockage du cluster. Le message d'avertissement se présente comme suit :     CSIPrerequisites pvc/pvc-name: PersistentVolumeClaim pvc-name bounds to an in-tree vSphere volume created before CSI migration enabled, but it doesn't have the annotation pv.kubernetes.io/migrated-to set to csi.vsphere.vmware.com after CSI migration is enabled
    
 Solution : Exécutez la commande suivante pour vérifier les annotations d'un PVC avec l'avertissement ci-dessus :     kubectl get pvc PVC_NAME -n PVC_NAMESPACE -oyaml --kubeconfig KUBECONFIG
    Si le champ annotationsdu résultat contient les éléments suivants, vous pouvez ignorer l'avertissement :       pv.kubernetes.io/bind-completed: "yes"
      pv.kubernetes.io/bound-by-controller: "yes"
      volume.beta.kubernetes.io/storage-provisioner: csi.vsphere.vmware.com
     | 
  
  
    | Mises à niveau, mises à jour | 1.15.0+, 1.16.0+ | Échec de la rotation des clés de compte de service lorsque plusieurs clés ont expiréSi votre cluster n'utilise pas de registre privé et que les clés de compte de service d'accès aux composants et de compte de service Logging-monitoring (ou Connect-register) ont expiré, lorsque vous faites pivoter les clés de compte de service, gkectl update credentialséchoue et affiche une erreur semblable à la suivante : Error: reconciliation failed: failed to update platform: ... Solution : Commencez par alterner la clé du compte de service d'accès aux composants. Bien que le même message d'erreur s'affiche, vous devriez pouvoir alterner les autres clés après la rotation des clés du compte de service d'accès aux composants.
       Si la mise à jour ne fonctionne toujours pas, contactez l'assistance Cloud Customer Care pour résoudre ce problème. | 
  | Mises à niveau | 1.16.0-1.16.5 | 1.15 : La machine maître utilisateur rencontre une recréation inattendue lorsque le contrôleur de cluster d'utilisateur est mis à niveau vers la version 1.16Lors de la mise à niveau d'un cluster d'utilisateur, une fois le contrôleur de cluster d'utilisateur mis à niveau vers la version 1.16, si vous avez d'autres clusters d'utilisateur 1.15 gérés par le même cluster d'administrateur, leur machine maître utilisateur peut être recréée de manière inattendue. Un bug dans le contrôleur de cluster d'utilisateur 1.16 peut déclencher la recréation de la machine maître utilisateur 1.15. La solution de contournement dépend de la manière dont vous rencontrez ce problème. Solution de contournement lors de la mise à niveau du cluster d'utilisateur à l'aide de la console Google Cloud  : Option 1 : Utilisez une version 1.16.6 ou ultérieure de GKE sur VMware avec le correctif. Option 2 : Procédez comme suit : 
    Ajoutez manuellement l'annotation de réexécution à l'aide de la commande suivante :
    kubectl edit onpremuserclusters USER_CLUSTER_NAME -n USER_CLUSTER_NAME-gke-onprem-mgmt --kubeconfig ADMIN_KUBECONFIG L'annotation de rediffusion est la suivante : onprem.cluster.gke.io/server-side-preflight-rerun: trueSurveillez la progression de la mise à niveau en vérifiant le champ statusde OnPremUserCluster. Solution de contournement pour mettre à niveau le cluster d'utilisateur à l'aide de votre propre poste de travail administrateur : Option 1 : Utilisez une version 1.16.6 ou ultérieure de GKE sur VMware avec le correctif. Option 2 : Procédez comme suit : 
      Ajoutez le fichier d'informations sur la compilation /etc/cloud/build.infoavec le contenu suivant. Les vérifications préliminaires sont alors exécutées localement sur votre poste de travail administrateur plutôt que sur le serveur.gke_on_prem_version: GKE_ON_PREM_VERSIONPar exemple : gke_on_prem_version: 1.16.0-gke.669Réexécutez la commande de mise à niveau.Une fois la mise à niveau terminée, supprimez le fichier build.info. | 
  | Créer | 1.16.0-1.16.5, 1.28.0-1.28.100 | La vérification préliminaire échoue lorsque le nom d'hôte ne figure pas dans le fichier de bloc d'adresses IP.Lors de la création du cluster, si vous ne spécifiez pas de nom d'hôte pour chaque adresse IP du fichier de bloc d'adresses IP, la vérification préliminaire échoue et le message d'erreur suivant s'affiche :
     multiple VMs found by DNS name  in xxx datacenter. Anthos Onprem doesn't support duplicate hostname in the same vCenter and you may want to rename/delete the existing VM.`
    Un bug dans la vérification préliminaire considère un nom d'hôte vide comme un doublon. Solution : Option 1 : Utilisez une version contenant le correctif. Option 2 : Contournez cette vérification préliminaire en ajoutant l'indicateur --skip-validation-net-config. Option 3 : Spécifiez un nom d'hôte unique pour chaque adresse IP dans le fichier de bloc d'adresses IP. | 
| Mises à niveau, mises à jour | 1.16 | Échec du montage du volume lors de la mise à niveau/mise à jour du cluster d'administrateur si vous utilisez un cluster d'administrateur sans haute disponibilité et un cluster d'utilisateur avec plan de contrôle V1Pour un cluster d'administrateur non HA et un cluster d'utilisateur de plan de contrôle v1, lorsque vous mettez à niveau ou à jour le cluster d'administrateur, la recréation de la machine maître du cluster d'administrateur peut se produire en même temps que le redémarrage de la machine maître du cluster d'utilisateur, ce qui peut entraîner une condition de concurrence.
Cela empêche les pods du plan de contrôle du cluster d'utilisateur de communiquer avec le plan de contrôle du cluster d'administrateur, ce qui entraîne des problèmes d'association de volumes pour kube-etcd et kube-apiserver sur le plan de contrôle du cluster d'utilisateur. Pour vérifier le problème, exécutez les commandes suivantes pour le pod concerné : kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace USER_CLUSTER_NAME describe pod IMPACTED_POD_NAMELes événements s'affichent comme suit : 
Events:
  Type     Reason       Age                  From               Message
  ----     ------       ----                 ----               -------
  Warning  FailedMount  101s                 kubelet            Unable to attach or mount volumes: unmounted volumes=[kube-audit], unattached volumes=[], failed to process volumes=[]: timed out waiting for the condition
  Warning  FailedMount  86s (x2 over 3m28s)  kubelet            MountVolume.SetUp failed for volume "pvc-77cd0635-57c2-4392-b191-463a45c503cb" : rpc error: code = FailedPrecondition desc = volume ID: "bd313c62-d29b-4ecd-aeda-216648b0f7dc" does not appear staged to "/var/lib/kubelet/plugins/kubernetes.io/csi/csi.vsphere.vmware.com/92435c96eca83817e70ceb8ab994707257059734826fedf0c0228db6a1929024/globalmount"
 Solution : 
    
    Connectez-vous en SSH au nœud du plan de contrôle de l'utilisateur. Étant donné qu'il s'agit d'un cluster d'utilisateur Controlplane V1, le nœud du plan de contrôle de l'utilisateur se trouve dans le cluster d'administrateur.
    
    Redémarrez kubelet à l'aide de la commande suivante :
        sudo systemctl restart kubelet
    Après le redémarrage, le kubelet peut reconstruire correctement le montage global de l'étape. | 
  | Mises à niveau, mises à jour | 1.16.0 | Échec de la création du nœud du plan de contrôleLors de la mise à niveau ou de la mise à jour d'un cluster d'administrateur, une condition de concurrence peut entraîner la suppression inattendue d'un nouveau nœud de plan de contrôle par le gestionnaire de contrôleur cloud vSphere. Cela entraîne le blocage de clusterapi-controller en attente de la création du nœud, et la mise à niveau/mise à jour finit par expirer. Dans ce cas, le résultat de la commande de mise à niveau/mise à jour gkectlressemble à ce qui suit :     controlplane 'default/gke-admin-hfzdg' is not ready: condition "Ready": condition is not ready with reason "MachineInitializing", message "Wait for the control plane machine "gke-admin-hfzdg-6598459f9zb647c8-0\" to be rebooted"...
    Pour identifier le symptôme, exécutez la commande ci-dessous afin d'obtenir le journal du gestionnaire de contrôleur cloud vSphere dans le cluster d'administrateur :     kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
    kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n kube-system
    Voici un exemple de message d'erreur généré par la commande ci-dessus : 
         node name: 81ff17e25ec6-qual-335-1500f723 has a different uuid. Skip deleting this node from cache.
    Solution : 
      
      Redémarrez la machine ayant échoué pour recréer l'objet nœud supprimé.
      
      Connectez-vous en SSH à chaque nœud du plan de contrôle et redémarrez le pod statique du gestionnaire de contrôleur cloud vSphere :
            sudo crictl ps | grep vsphere-cloud-controller-manager | awk '{print $1}'
      sudo crictl stop PREVIOUS_COMMAND_OUTPUT
      
      Réexécutez la commande de mise à niveau/mise à jour.
       | 
  | Opération | 1.16 | Un nom d'hôte en double dans le même centre de données entraîne l'échec de la mise à niveau ou de la création du clusterLa mise à niveau d'un cluster 1.15 ou la création d'un cluster 1.16 avec des adresses IP statiques échouent si des noms d'hôte en double existent dans le même centre de données. Cet échec se produit, car le gestionnaire de contrôleur de cloud vSphere ne parvient pas à ajouter une adresse IP externe et un ID de fournisseur dans l'objet de nœud. Cela entraîne l'expiration du délai d'attente pour la mise à niveau ou la création du cluster. Pour identifier le problème, obtenez les journaux du pod du gestionnaire de contrôleur cloud vSphere pour le cluster. La commande que vous utilisez dépend du type de cluster, comme suit : 
      Cluster d'administrateur :
            kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
      kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n kube-system
      Cluster d'utilisateur avec enableControlplaneV2false:      kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAME | grep vsphere-cloud-controller-manager
      kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAME
      Cluster d'utilisateur avec enableControlplaneV2true:      kubectl get pods --kubeconfig USER_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
      kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig USER_KUBECONFIG -n kube-system
       Voici un exemple de message d'erreur :     I1003 17:17:46.769676       1 search.go:152] Finding node admin-vm-2 in vc=vcsa-53598.e5c235a1.asia-northeast1.gve.goog and datacenter=Datacenter
    E1003 17:17:46.771717       1 datacenter.go:111] Multiple vms found VM by DNS Name. DNS Name: admin-vm-2
    Vérifiez si le nom d'hôte est en double dans le centre de données :Vous pouvez utiliser l'approche suivante pour vérifier si le nom d'hôte est dupliqué et trouver une solution de contournement si nécessaire.           export GOVC_DATACENTER=GOVC_DATACENTER
          export GOVC_URL=GOVC_URL
          export GOVC_USERNAME=GOVC_USERNAME
          export GOVC_PASSWORD=GOVC_PASSWORD
          export GOVC_INSECURE=true
          govc find . -type m -guest.hostName HOSTNAME
          Exemples de commandes et de résultats :          export GOVC_DATACENTER=mtv-lifecycle-vc01
          export GOVC_URL=https://mtv-lifecycle-vc01.anthos/sdk
          export GOVC_USERNAME=xxx
          export GOVC_PASSWORD=yyy
          export GOVC_INSECURE=true
          govc find . -type m -guest.hostName f8c3cd333432-lifecycle-337-xxxxxxxz
          ./vm/gke-admin-node-6b7788cd76-wkt8g
          ./vm/gke-admin-node-6b7788cd76-99sg2
          ./vm/gke-admin-master-5m2jb
          La solution de contournement à appliquer dépend de l'opération qui a échoué. Solution de contournement pour les mises à niveau : Appliquez la solution de contournement pour le type de cluster concerné. 
        Cluster d'utilisateur :
          
          
          Remplacez le nom d'hôte de la machine concernée dans user-ip-block.yaml par un nom unique, puis déclenchez une mise à jour forcée :
           gkectl update cluster --kubeconfig ADMIN_KUBECONFIG --config NEW_USER_CLUSTER_CONFIG --force
          
          Réexécuter gkectl upgrade clusterCluster d'administrateur :
          
          Modifiez le nom d'hôte de la machine concernée dans admin-ip-block.yaml en lui attribuant un nom unique, puis déclenchez une mise à jour forcée :
           gkectl update admin --kubeconfig ADMIN_KUBECONFIG --config NEW_ADMIN_CLUSTER_CONFIG --force --skip-cluster-ready-check
          S'il s'agit d'un cluster d'administrateur non haute disponibilité et que vous constatez que la VM maître d'administrateur utilise un nom d'hôte en double, vous devez également :Obtenir le nom de la machine maître d'administrateur
           kubectl get machine --kubeconfig ADMIN_KUBECONFIG -owide -A
          Mettez à jour l'objet de la machine maître de l'administrateur.Remarque : NEW_ADMIN_MASTER_HOSTNAME doit être identique à ce que vous avez défini dans admin-ip-block.yaml à l'étape 1.
 
           kubectl patch machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG --type='json' -p '[{"op": "replace", "path": "/spec/providerSpec/value/networkSpec/address/hostname", "value":"NEW_ADMIN_MASTER_HOSTNAME"}]'
          Vérifiez que le nom d'hôte est mis à jour dans l'objet de la machine maître de l'administrateur :
           kubectl get machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG -oyaml
          kubectl get machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG -o jsonpath='{.spec.providerSpec.value.networkSpec.address.hostname}'
          Relancez la mise à niveau du cluster d'administrateur avec le point de contrôle désactivé :
           gkectl upgrade admin --kubeconfig ADMIN_KUBECONFIG --config ADMIN_CLUSTER_CONFIG --disable-upgrade-from-checkpoint
           Solution de contournement pour les installations : Appliquez la solution de contournement pour le type de cluster concerné. | 
  | Opération | 1.16.0, 1.16.1, 1.16.2, 1.16.3 | $et`ne sont pas acceptés dans le nom d'utilisateur ni le mot de passe vSphere.
Les opérations suivantes échouent lorsque le nom d'utilisateur ou le mot de passe vSphere contiennent $ou`: 
        Mettre à niveau un cluster d'utilisateur 1.15 avec Controlplane V2 activé vers la version 1.16Mettre à niveau un cluster d'administrateur haute disponibilité (HD) 1.15 vers la version 1.16Créer un cluster d'utilisateur 1.16 avec Controlplane V2 activéCréer un cluster d'administrateur haute disponibilité 1.16 Utilisez une version 1.16.4 ou ultérieure de Google Distributed Cloud avec le correctif ou appliquez la solution de contournement ci-dessous. La solution de contournement à appliquer dépend de l'opération qui a échoué. Solution de contournement pour les mises à niveau : 
      Modifiez le nom d'utilisateur ou le mot de passe vCenter côté vCenter pour supprimer $et`.Mettez à jour le nom d'utilisateur ou le mot de passe vCenter dans votre fichier de configuration des identifiants.
      Déclenchez une mise à jour forcée du cluster.
        Cluster d'utilisateur :
                gkectl update cluster --kubeconfig ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG --force
        Cluster d'administrateur :
                gkectl update admin --kubeconfig ADMIN_KUBECONFIG --config ADMIN_CLUSTER_CONFIG --force --skip-cluster-ready-check
         Solution de contournement pour les installations : 
      Modifiez le nom d'utilisateur ou le mot de passe vCenter côté vCenter pour supprimer $et`.Mettez à jour le nom d'utilisateur ou le mot de passe vCenter dans votre fichier de configuration des identifiants.
      Appliquez la solution de contournement pour le type de cluster concerné. | 
  | Stockage | 1.11+, 1.12+, 1.13+, 1.14+, 1.15+, 1.16 | Échec de la création de PVC après la recréation du nœud avec le même nomAprès la suppression d'un nœud, puis sa recréation avec le même nom, il est possible qu'une création ultérieure de PersistentVolumeClaim (PVC) échoue avec une erreur semblable à la suivante :     The object 'vim.VirtualMachine:vm-988369' has already been deleted or has not been completely created Cela est dû à une condition de concurrence dans laquelle le contrôleur CSI vSphere ne supprime pas une machine supprimée de son cache. 
 Solution : Redémarrez les pods du contrôleur CSI vSphere :     kubectl rollout restart deployment vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
     | 
  
  
    | Opération | 1.16.0 | gkectl repair admin-master renvoie une erreur de désérialisation kubeconfigLorsque vous exécutez la commande gkectl repair admin-mastersur un cluster d'administrateur HA,gkectlrenvoie le message d'erreur suivant :   Exit with error: Failed to repair: failed to select the template: failed to get cluster name from kubeconfig, please contact Google support. failed to decode kubeconfig data: yaml: unmarshal errors:
    line 3: cannot unmarshal !!seq into map[string]*api.Cluster
    line 8: cannot unmarshal !!seq into map[string]*api.Context
  
 Solution : Ajoutez l'indicateur --admin-master-vm-template=à la commande et fournissez le modèle de VM de la machine à réparer :   gkectl repair admin-master --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
      --config ADMIN_CLUSTER_CONFIG_FILE \
      --admin-master-vm-template=/DATA_CENTER/vm/VM_TEMPLATE_NAME
  Pour trouver le modèle de VM de la machine : 
        Accédez à la page Hôtes et clusters dans le client vSphere.Cliquez sur Modèles de VM et filtrez par nom de cluster d'administrateur.
        Vous devriez voir les trois modèles de VM pour le cluster d'administrateur.Copiez le nom du modèle de VM qui correspond au nom de la machine que vous réparez, puis utilisez ce nom dans la commande de réparation.   gkectl repair admin-master \
      --config=/home/ubuntu/admin-cluster.yaml \
      --kubeconfig=/home/ubuntu/kubeconfig \
      --admin-master-vm-template=/atl-qual-vc07/vm/gke-admin-98g94-zx...7vx-0-tmpl | 
  | Mise en réseau | 1.10.0+, 1.11.0+, 1.12.0+, 1.13.0+, 1.14.0-1.14.7, 1.15.0-1.15.3, 1.16.0 | VM Seesaw défectueuse en raison d'un espace disque insuffisantSi vous utilisez Seesaw comme type d'équilibreur de charge pour votre cluster et que vous constatez qu'une VM Seesaw est hors service ou ne cesse d'échouer au démarrage, le message d'erreur suivant peut s'afficher dans la console vSphere :     GRUB_FORCE_PARTUUID set, initrdless boot failed. Attempting with initrd
    Cette erreur indique que l'espace disque est faible sur la VM, car fluent-bit exécuté sur la VM Seesaw n'est pas configuré avec la rotation des journaux appropriée. 
 Solution : Localisez les fichiers journaux qui consomment le plus d'espace disque à l'aide de du -sh -- /var/lib/docker/containers/* | sort -rh. Nettoyez le fichier journal le plus volumineux et redémarrez la VM. Remarque : Si la VM est complètement inaccessible, associez le disque à une VM fonctionnelle (par exemple, une station de travail d'administrateur), supprimez le fichier du disque associé, puis réassociez le disque à la VM Seesaw d'origine. Pour éviter que ce problème ne se reproduise, connectez-vous à la VM et modifiez le fichier /etc/systemd/system/docker.fluent-bit.service. Ajoutez--log-opt max-size=10m --log-opt max-file=5dans la commande Docker, puis exécutezsystemctl restart docker.fluent-bit.service. | 
  | Opération | 1.13, 1.14.0-1.14.6, 1.15 | Erreur de clé publique SSH de l'administrateur après la mise à niveau ou la mise à jour du cluster d'administrateurLorsque vous essayez de mettre à niveau (gkectl upgrade admin) ou de mettre à jour (gkectl update admin) un cluster d'administrateur non haute disponibilité avec le point de contrôle activé, la mise à niveau ou la mise à jour peuvent échouer et générer des erreurs telles que les suivantes : Checking admin cluster certificates...FAILURE
    Reason: 20 admin cluster certificates error(s).
Unhealthy Resources:
    AdminMaster clusterCA bundle: failed to get clusterCA bundle on admin master, command [ssh -o IdentitiesOnly=yes -i admin-ssh-key -o StrictHostKeyChecking=no -o ConnectTimeout=30 ubuntu@AdminMasterIP -- sudo cat /etc/kubernetes/pki/ca-bundle.crt] failed with error: exit status 255, stderr: Authorized uses only. All activity may be monitored and reported.
    ubuntu@AdminMasterIP: Permission denied (publickey).failed to ssh AdminMasterIP, failed with error: exit status 255, stderr: Authorized uses only. All activity may be monitored and reported.
    ubuntu@AdminMasterIP: Permission denied (publickey)error dialing ubuntu@AdminMasterIP: failed to establish an authenticated SSH connection: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey]... 
 Solution : Si vous ne parvenez pas à passer à une version corrective de Google Distributed Cloud contenant le correctif, contactez l'assistance Google pour obtenir de l'aide. | 
  | Mises à niveau | 1.13.0-1.13.9, 1.14.0-1.14.6, 1.15.1-1.15.2 | La mise à niveau d'un cluster d'administrateur enregistré dans l'API GKE On-Prem peut échouerLorsqu'un cluster d'administrateur est enregistré dans l'API GKE On-Prem, la mise à niveau du cluster d'administrateur vers les versions concernées peut échouer, car l'appartenance au parc n'a pas pu être mise à jour. Lorsque cet échec se produit, l'erreur suivante s'affiche lorsque vous essayez de mettre à niveau le cluster :     failed to register cluster: failed to apply Hub Membership: Membership API request failed: rpc error: code = InvalidArgument desc = InvalidFieldError for field endpoint.on_prem_cluster.resource_link: field cannot be updated
    Un cluster d'administrateur est enregistré dans l'API lorsque vous enregistrez explicitement le cluster ou lorsque vous mettez à niveau un cluster d'utilisateur à l'aide d'un client API GKE On-Prem. 
 Solution :Désinscrivez le cluster d'administrateur :     gcloud alpha container vmware admin-clusters unenroll ADMIN_CLUSTER_NAME --project CLUSTER_PROJECT --location=CLUSTER_LOCATION --allow-missing
    et  reprenez la mise à niveau du cluster d'administrateur. Il est possible que l'erreur obsolète "Échec de l'enregistrement du cluster" s'affiche temporairement. Au bout d'un certain temps, il devrait se mettre à jour automatiquement. | 
  | Mises à niveau, mises à jour | 1.13.0-1.13.9, 1.14.0-1.14.4, 1.15.0 | L'annotation du lien vers la ressource du cluster d'administrateur enregistré n'est pas conservéeLorsqu'un cluster d'administrateur est enregistré dans l'API GKE On-Prem, son annotation de lien de ressource est appliquée à la ressource personnalisée OnPremAdminCluster, qui n'est pas conservée lors des mises à jour ultérieures du cluster d'administrateur en raison de la clé d'annotation incorrecte utilisée. Cela peut entraîner l'enregistrement du cluster d'administrateur dans l'API GKE On-Prem par erreur. Un cluster d'administrateur est enregistré dans l'API lorsque vous enregistrez explicitement le cluster ou lorsque vous mettez à niveau un cluster d'utilisateur à l'aide d'un client API GKE On-Prem. 
 Solution :Désinscrivez le cluster d'administrateur :     gcloud alpha container vmware admin-clusters unenroll ADMIN_CLUSTER_NAME --project CLUSTER_PROJECT --location=CLUSTER_LOCATION --allow-missing
    et réenregistrez
    le cluster d'administrateur. | 
  
  
    | Mise en réseau | 1.15.0-1.15.2 | CoreDNS orderPolicynon reconnuOrderPolicyn'est pas reconnu comme paramètre et n'est pas utilisé. Google Distributed Cloud utilise toujoursRandom.
 Ce problème se produit, car le modèle CoreDNS n'a pas été mis à jour, ce qui entraîne l'ignorance de orderPolicy. 
 Solution : Mettez à jour le modèle CoreDNS et appliquez le correctif. Ce correctif est conservé jusqu'à une mise à niveau. 
        Modifiez le modèle existant :
kubectl edit cm -n kube-system coredns-templateRemplacez le contenu du modèle par le code suivant : coredns-template: |-
  .:53 {
    errors
    health {
      lameduck 5s
    }
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa {
      pods insecure
      fallthrough in-addr.arpa ip6.arpa
    }
{{- if .PrivateGoogleAccess }}
    import zones/private.Corefile
{{- end }}
{{- if .RestrictedGoogleAccess }}
    import zones/restricted.Corefile
{{- end }}
    prometheus :9153
    forward . {{ .UpstreamNameservers }} {
      max_concurrent 1000
      {{- if ne .OrderPolicy "" }}
      policy {{ .OrderPolicy }}
      {{- end }}
    }
    cache 30
{{- if .DefaultDomainQueryLogging }}
    log
{{- end }}
    loop
    reload
    loadbalance
}{{ range $i, $stubdomain := .StubDomains }}
{{ $stubdomain.Domain }}:53 {
  errors
{{- if $stubdomain.QueryLogging }}
  log
{{- end }}
  cache 30
  forward . {{ $stubdomain.Nameservers }} {
    max_concurrent 1000
    {{- if ne $.OrderPolicy "" }}
    policy {{ $.OrderPolicy }}
    {{- end }}
  }
}
{{- end }} | 
  | Mises à niveau, mises à jour | 1.10, 1.11, 1.12, 1.13.0-1.13.7, 1.14.0-1.14.3 | L'état OnPremAdminCluster est incohérent entre le point de contrôle et le CR réel Certaines conditions de concurrence peuvent entraîner une incohérence de l'état OnPremAdminClusterentre le point de contrôle et le taux de couverture réel. Lorsque le problème se produit, l'erreur suivante peut s'afficher lorsque vous mettez à jour le cluster d'administrateur après l'avoir mis à niveau : Exit with error:
E0321 10:20:53.515562  961695 console.go:93] Failed to update the admin cluster: OnPremAdminCluster "gke-admin-rj8jr" is in the middle of a create/upgrade ("" -> "1.15.0-gke.123"), which must be completed before it can be updated
Failed to update the admin cluster: OnPremAdminCluster "gke-admin-rj8jr" is in the middle of a create/upgrade ("" -> "1.15.0-gke.123"), which must be completed before it can be updatedPour résoudre ce problème, vous devez modifier ou désactiver le point de contrôle pour la mise à niveau/mise à jour. Veuillez contacter notre équipe d'assistance pour procéder à la résolution. | 
  | Opération | 1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 | Le processus de réconciliation modifie les certificats d'administrateur sur les clusters d'administrateurGoogle Distributed Cloud modifie les certificats d'administrateur sur les plans de contrôle du cluster d'administrateur à chaque processus de réconciliation, par exemple lors d'une mise à niveau du cluster. Ce comportement augmente le risque d'obtenir des certificats non valides pour votre cluster d'administrateur, en particulier pour les clusters de version 1.15. Si vous êtes concerné par ce problème, vous pouvez rencontrer les problèmes suivants : 
 Solution : Passez à une version de Google Distributed Cloud contenant le correctif : 1.13.10+, 1.14.6+ ou 1.15.2+. Si la mise à niveau n'est pas possible pour vous, contactez l'Cloud Customer Care pour résoudre ce problème. | 
  
  
    | Mise en réseau, fonctionnement | 1.10, 1.11, 1.12, 1.13, 1.14 | Composants Anthos Network Gateway évincés ou en attente en raison d'une classe de priorité manquanteLes pods de passerelle réseau à l'état kube-systempeuvent afficher l'étatPendingouEvicted, comme illustré dans l'exemple de résultat condensé suivant : $ kubectl -n kube-system get pods | grep ang-node
ang-node-bjkkc     2/2     Running     0     5d2h
ang-node-mw8cq     0/2     Evicted     0     6m5s
ang-node-zsmq7     0/2     Pending     0     7h Ces erreurs indiquent des événements d'éviction ou l'impossibilité de planifier des pods en raison des ressources des nœuds. Comme les pods Anthos Network Gateway n'ont pas de PriorityClass, ils ont la même priorité par défaut que les autres charges de travail.
      Lorsque les ressources des nœuds sont limitées, les pods de passerelle réseau peuvent être évincés. Ce comportement est particulièrement problématique pour le DaemonSet ang-node, car ces pods doivent être planifiés sur un nœud spécifique et ne peuvent pas migrer. 
 Solution : Effectuez une mise à niveau vers la version 1.15 ou ultérieure. Pour résoudre le problème à court terme, vous pouvez attribuer manuellement une PriorityClass aux composants Anthos Network Gateway. Le contrôleur Google Distributed Cloud écrase ces modifications manuelles lors d'un processus de réconciliation, par exemple lors d'une mise à niveau du cluster. 
        Attribuez la PriorityClass system-cluster-criticalaux déploiements de contrôleurs de clustersang-controller-manageretautoscaler.Attribuez la PriorityClass system-node-criticalau DaemonSet de nœudang-daemon. | 
  | Mises à niveau, mises à jour | 1.12, 1.13, 1.14, 1.15.0-1.15.2 | Échec de la mise à niveau du cluster d'administrateur après l'enregistrement du cluster avec gcloud Après avoir utilisé gcloudpour enregistrer un cluster d'administrateur avec une sectiongkeConnectnon vide, l'erreur suivante peut s'afficher lorsque vous essayez de mettre à niveau le cluster : failed to register cluster: failed to apply Hub Mem\
bership: Membership API request failed: rpc error: code = InvalidArgument desc = InvalidFieldError for field endpoint.o\
n_prem_cluster.admin_cluster: field cannot be updated Supprimez l'espace de noms gke-connect: kubectl delete ns gke-connect --kubeconfig=ADMIN_KUBECONFIGObtenez le nom du cluster d'administrateur : kubectl get onpremadmincluster -n kube-system --kubeconfig=ADMIN_KUBECONFIGSupprimez l'appartenance au parc : gcloud container fleet memberships delete ADMIN_CLUSTER_NAMEet  reprenez la mise à niveau du cluster d'administrateur. | 
  | Opération | 1.13.0-1.13.8, 1.14.0-1.14.5, 1.15.0-1.15.1 | gkectl diagnose snapshot --log-sincen'a pas réussi à limiter la période pour les commandesjournalctlexécutées sur les nœuds du cluster.
Cela n'affecte pas la fonctionnalité de création d'un instantané du cluster, car l'instantané inclut toujours tous les journaux collectés par défaut en exécutant journalctlsur les nœuds du cluster. Par conséquent, aucune information de débogage n'est manquée. | 
  | Installation, mises à niveau, mises à jour | 1.9+, 1.10+, 1.11+, 1.12+ | Échec de gkectl prepare windowsgkectl prepare windowsne parvient pas à installer Docker sur les versions de Google Distributed Cloud antérieures à 1.13, carMicrosoftDockerProviderest obsolète.
 
 Solution : L'idée générale pour contourner ce problème est de passer à Google Distributed Cloud 1.13 et d'utiliser gkectl1.13 pour créer un modèle de VM Windows, puis de créer des pools de nœuds Windows. Il existe deux façons de passer de votre version actuelle à Google Distributed Cloud 1.13, comme indiqué ci-dessous. Remarque : Il existe des solutions pour contourner ce problème dans votre version actuelle sans avoir à passer à la version 1.13, mais elles nécessitent plus d'étapes manuelles. Veuillez contacter notre équipe d'assistance si vous souhaitez envisager cette option. 
 Option 1 : Mise à niveau bleu-vert Vous pouvez créer un cluster à l'aide de Google Distributed Cloud version 1.13 ou ultérieure avec des pools de nœuds Windows, migrer vos charges de travail vers le nouveau cluster, puis supprimer le cluster actuel. Nous vous recommandons d'utiliser la dernière version mineure de Google Distributed Cloud. Remarque : Cela nécessitera des ressources supplémentaires pour provisionner le nouveau cluster, mais entraînera moins de temps d'arrêt et d'interruption pour les charges de travail existantes. 
 Option 2 : Supprimer les pools de nœuds Windows et les rajouter lors de la mise à niveau vers Google Distributed Cloud 1.13 Remarque : Avec cette option, les charges de travail Windows ne pourront pas s'exécuter tant que le cluster n'aura pas été mis à niveau vers la version 1.13 et que les pools de nœuds Windows n'auront pas été ajoutés. 
      Supprimez les pools de nœuds Windows existants en supprimant la configuration des pools de nœuds Windows du fichier user-cluster.yaml, puis exécutez la commande suivante :
      gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILEMettez à niveau les clusters d'administrateur et d'utilisateur Linux uniquement vers la version 1.12 en suivant le 
      guide de mise à niveau pour la version mineure cible correspondante.(Veillez à effectuer cette étape avant de passer à la version 1.13.) Assurez-vous que enableWindowsDataplaneV2: trueest configuré dans le CROnPremUserCluster. Sinon, le cluster continuera d'utiliser Docker pour les pools de nœuds Windows, ce qui ne sera pas compatible avec le modèle de VM Windows 1.13 nouvellement créé et sur lequel Docker n'est pas installé. Si elle n'est pas configurée ou si elle est définie sur "false", mettez à jour votre cluster pour la définir sur "true" dans user-cluster.yaml, puis exécutez la commande suivante :gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILEMettez à niveau les clusters d'administrateur et d'utilisateur Linux uniquement vers la version 1.13 en suivant le 
      guide de mise à niveau.Préparez le modèle de VM Windows à l'aide de gkectl 1.13 :
      gkectl prepare windows --base-vm-template BASE_WINDOWS_VM_TEMPLATE_NAME --bundle-path 1.13_BUNDLE_PATH --kubeconfig=ADMIN_KUBECONFIGAjoutez à nouveau la configuration du pool de nœuds Windows à user-cluster.yaml, en définissant le champ OSImagesur le modèle de VM Windows que vous venez de créer.Mettre à jour le cluster pour ajouter des pools de nœuds Windows
      gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE | 
  | Installation, mises à niveau, mises à jour | 1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 | La configuration RootDistanceMaxSecne prend pas effet pour les nœudsubuntuLa valeur par défaut de 5 secondes pour RootDistanceMaxSecsera utilisée sur les nœuds, au lieu de 20 secondes, qui devrait être la configuration attendue. Si vous vérifiez le journal de démarrage du nœud en vous connectant à la VM via SSH, qui se trouve à l'adresse `/var/log/startup.log`, vous pouvez trouver l'erreur suivante : + has_systemd_unit systemd-timesyncd
/opt/bin/master.sh: line 635: has_systemd_unit: command not found L'utilisation d'un RootDistanceMaxSecde cinq secondes peut entraîner une désynchronisation de l'horloge système avec le serveur NTP lorsque la dérive de l'horloge est supérieure à cinq secondes. 
 Solution : Appliquez le DaemonSet suivant à votre cluster pour configurer RootDistanceMaxSec: apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: change-root-distance
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: change-root-distance
  template:
    metadata:
      labels:
        app: change-root-distance
    spec:
      hostIPC: true
      hostPID: true
      tolerations:
      # Make sure pods gets scheduled on all nodes.
      - effect: NoSchedule
        operator: Exists
      - effect: NoExecute
        operator: Exists
      containers:
      - name: change-root-distance
        image: ubuntu
        command: ["chroot", "/host", "bash", "-c"]
        args:
        - |
          while true; do
            conf_file="/etc/systemd/timesyncd.conf.d/90-gke.conf"
            if [ -f $conf_file ] && $(grep -q "RootDistanceMaxSec=20" $conf_file); then
              echo "timesyncd has the expected RootDistanceMaxSec, skip update"
            else
              echo "updating timesyncd config to RootDistanceMaxSec=20"
              mkdir -p /etc/systemd/timesyncd.conf.d
              cat > $conf_file << EOF
          [Time]
          RootDistanceMaxSec=20
          EOF
              systemctl restart systemd-timesyncd
            fi
            sleep 600
          done
        volumeMounts:
        - name: host
          mountPath: /host
        securityContext:
          privileged: true
      volumes:
      - name: host
        hostPath:
          path: / | 
  | Mises à niveau, mises à jour | 1.12.0-1.12.6, 1.13.0-1.13.6, 1.14.0-1.14.2 | Échec de gkectl update adminen raison d'un champosImageTypevideLorsque vous utilisez la version 1.13 de gkectlpour mettre à jour un cluster d'administrateur en version 1.12, l'erreur suivante peut s'afficher : Failed to update the admin cluster: updating OS image type in admin cluster
is not supported in "1.12.x-gke.x" Lorsque vous utilisez gkectl update adminpour les clusters des versions 1.13 ou 1.14, le message suivant peut s'afficher dans la réponse : Exit with error:
Failed to update the cluster: the update contains multiple changes. Please
update only one feature at a time Si vous consultez le journal gkectl, vous verrez peut-être que les modifications multiples incluent la définition deosImageType, qui passe d'une chaîne vide àubuntu_containerd. Ces erreurs de mise à jour sont dues à un remplissage incorrect du champ osImageTypedans la configuration du cluster d'administrateur, car il a été introduit dans la version 1.9. 
 Solution : Passez à une version de Google Distributed Cloud incluant le correctif. Si vous ne pouvez pas effectuer la mise à niveau, contactez Cloud Customer Care pour résoudre ce problème. | 
  | Installation, Sécurité | 1.13, 1.14, 1.15, 1.16 | Le SNI ne fonctionne pas sur les clusters d'utilisateur avec Controlplane V2La possibilité de fournir un certificat de diffusion supplémentaire pour le serveur d'API Kubernetes d'un cluster d'utilisateur avec 
    authentication.snine fonctionne pas lorsque Controlplane V2 est activé (enableControlplaneV2: true). 
 Solution : En attendant qu'un correctif Google Distributed Cloud soit disponible, si vous devez utiliser SNI, désactivez Controlplane V2 (enableControlplaneV2: false). | 
  | Installation | 1.0-1.11, 1.12, 1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 | $dans le nom d'utilisateur du registre privé entraîne l'échec du démarrage de la machine du plan de contrôle administrateur
La machine du plan de contrôle de l'administrateur ne parvient pas à démarrer lorsque le nom d'utilisateur du registre privé contient $.
    Lorsque vous vérifiez/var/log/startup.logsur la machine du plan de contrôle de l'administrateur, l'erreur suivante s'affiche : ++ REGISTRY_CA_CERT=xxx
++ REGISTRY_SERVER=xxx
/etc/startup/startup.conf: line 7: anthos: unbound variable 
 Solution : Utilisez un nom d'utilisateur de registre privé sans $ou utilisez une version de Google Distributed Cloud avec le correctif. | 
  | Mises à niveau, mises à jour | 1.12.0-1.12.4 | Faux positifs concernant les modifications non compatibles lors de la mise à jour du cluster d'administrateurLorsque vous 
    mettez à jour des clusters d'administrateur, les faux positifs suivants s'affichent dans le journal. Vous pouvez les ignorer.      console.go:47] detected unsupported changes: &v1alpha1.OnPremAdminCluster{
      ...
      -         CARotation:        &v1alpha1.CARotationConfig{Generated: &v1alpha1.CARotationGenerated{CAVersion: 1}},
      +         CARotation:        nil,
      ...
    } | 
  | Mises à niveau, mises à jour | 1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 | Échec de la mise à jour du cluster d'utilisateur après la rotation des clés de signature KSAAprès avoir fait pivoter les clés de signature KSA et 
    mis à jour un cluster d'utilisateur, gkectl updatepeut échouer et afficher le message d'erreur suivant : Failed to apply OnPremUserCluster 'USER_CLUSTER_NAME-gke-onprem-mgmt/USER_CLUSTER_NAME':
admission webhook "vonpremusercluster.onprem.cluster.gke.io" denied the request:
requests must not decrement *v1alpha1.KSASigningKeyRotationConfig Version, old version: 2, new version: 1" 
 Solution :Repassez à la version 1 de votre clé de signature KSA, mais conservez les dernières données de clé : 
      Vérifiez le secret dans le cluster d'administrateur sous l'espace de noms USER_CLUSTER_NAMEet obtenez le nom du secret ksa-signing-key :kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME get secrets | grep ksa-signing-keyCopiez le secret ksa-signing-key et renommez-le service-account-cert :
      kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME get secret KSA-KEY-SECRET-NAME -oyaml | \
sed 's/ name: .*/ name: service-account-cert/' | \
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME apply -f -Supprimez le secret ksa-signing-key précédent :
      kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME delete secret KSA-KEY-SECRET-NAMEMettez à jour le champ data.datadans le fichier de configuration ksa-signing-key-rotation-stage sur'{"tokenVersion":1,"privateKeyVersion":1,"publicKeyVersions":[1]}':kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME \
edit configmap ksa-signing-key-rotation-stageDésactivez le webhook de validation pour modifier les informations sur la version dans la ressource personnalisée OnPremUserCluster :
      kubectl --kubeconfig=ADMIN_KUBECONFIG patch validatingwebhookconfiguration onprem-user-cluster-controller -p '
webhooks:
- name: vonpremnodepool.onprem.cluster.gke.io
  rules:
  - apiGroups:
    - onprem.cluster.gke.io
    apiVersions:
    - v1alpha1
    operations:
    - CREATE
    resources:
    - onpremnodepools
- name: vonpremusercluster.onprem.cluster.gke.io
  rules:
  - apiGroups:
    - onprem.cluster.gke.io
    apiVersions:
    - v1alpha1
    operations:
    - CREATE
    resources:
    - onpremuserclusters
'Mettez à jour le champ spec.ksaSigningKeyRotation.generated.ksaSigningKeyRotationsur1dans votre ressource personnalisée OnPremUserCluster :kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
edit onpremusercluster USER_CLUSTER_NAMEAttendez que le cluster d'utilisateur cible soit prêt. Vous pouvez vérifier son état en saisissant :
      kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
get onpremuserclusterRestaurez le webhook de validation pour le cluster d'utilisateur :
      kubectl --kubeconfig=ADMIN_KUBECONFIG patch validatingwebhookconfiguration onprem-user-cluster-controller -p '
webhooks:
- name: vonpremnodepool.onprem.cluster.gke.io
  rules:
  - apiGroups:
    - onprem.cluster.gke.io
    apiVersions:
    - v1alpha1
    operations:
    - CREATE
    - UPDATE
    resources:
    - onpremnodepools
- name: vonpremusercluster.onprem.cluster.gke.io
  rules:
  - apiGroups:
    - onprem.cluster.gke.io
    apiVersions:
    - v1alpha1
    operations:
    - CREATE
    - UPDATE
    resources:
    - onpremuserclusters
'Évitez une autre rotation des clés de signature KSA tant que le cluster n'est pas mis à niveau vers la version contenant le correctif. | 
  | Opération | 1.13.1+, 1.14, 1., 1.16 | Lorsque vous utilisez Terraform pour supprimer un cluster d'utilisateur avec un équilibreur de charge F5 BIG-IP, les serveurs virtuels F5 BIG-IP ne sont pas supprimés après la suppression du cluster. 
 Solution : Pour supprimer les ressources F5, suivez la procédure permettant de nettoyer la partition F5 d'un cluster d'utilisateur
  . | 
  | Installation, mises à niveau, mises à jour | 1.13.8, 1.14.4 | Le cluster Kind extrait les images de conteneur de docker.io.Si vous créez un cluster d'administrateur version 1.13.8 ou 1.14.4, ou si vous mettez à niveau un cluster d'administrateur vers la version 1.13.8 ou 1.14.4, le cluster kind extrait les images de conteneur suivantes de docker.io: docker.io/kindest/kindnetddocker.io/kindest/local-path-provisionerdocker.io/kindest/local-path-helperSi docker.ion'est pas accessible depuis votre poste de travail administrateur, la création ou la mise à niveau du cluster d'administrateur ne permet pas de lancer le cluster de genre.
    L'exécution de la commande suivante sur le poste de travail administrateur affiche les conteneurs correspondants en attente avecErrImagePull: docker exec gkectl-control-plane kubectl get pods -A La réponse contient des entrées comme celles-ci : ...
kube-system         kindnet-xlhmr                             0/1
    ErrImagePull  0    3m12s
...
local-path-storage  local-path-provisioner-86666ffff6-zzqtp   0/1
    Pending       0    3m12s
...Ces images de conteneur doivent être préchargées dans l'image de conteneur du cluster Kind. Toutefois, kind v0.18.0 présente un problème avec les images de conteneurs préchargées, qui entraîne leur extraction à tort depuis Internet. 
 Solution : Exécutez les commandes suivantes sur le poste de travail administrateur pendant que votre cluster d'administrateur est en attente de création ou de mise à niveau : docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/kindnetd:v20230330-48f316cd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af docker.io/kindest/kindnetd:v20230330-48f316cd
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/kindnetd:v20230330-48f316cd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af docker.io/kindest/kindnetd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-helper:v20230330-48f316cd@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270 docker.io/kindest/local-path-helper:v20230330-48f316cd
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-helper:v20230330-48f316cd@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270 docker.io/kindest/local-path-helper@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-provisioner:v0.0.23-kind.0@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 docker.io/kindest/local-path-provisioner:v0.0.23-kind.0
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-provisioner:v0.0.23-kind.0@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 docker.io/kindest/local-path-provisioner@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 | 
  | Opération | 1.13.0-1.13.7, 1.14.0-1.14.4, 1.15.0 | Échec du basculement sur un cluster d'utilisateur et un cluster d'administrateur Controlplane V2 à haute disponibilité lorsque le réseau filtre les requêtes GARP en doubleSi les VM de votre cluster sont connectées à un commutateur qui filtre les requêtes GARP (gratuitous ARP) en double, l'élection du leader keepalived peut rencontrer une condition de concurrence, ce qui entraîne des entrées de table ARP incorrectes pour certains nœuds. Les nœuds concernés peuvent pingl'adresse IP virtuelle du plan de contrôle, mais une connexion TCP à l'adresse IP virtuelle du plan de contrôle expirera. 
 Solution :Exécutez la commande suivante sur chaque nœud du plan de contrôle du cluster concerné :     iptables -I FORWARD -i ens192 --destination CONTROL_PLANE_VIP -j DROP
     | 
  | Mises à niveau, mises à jour | 1.13.0-1.13.7, 1.14.0-1.14.4, 1.15.0 | vsphere-csi-controllerdoit être redémarré après la rotation du certificat vCenter
vsphere-csi-controllerdoit actualiser son secret vCenter après la rotation du certificat vCenter. Toutefois, le système actuel ne redémarre pas correctement les pods devsphere-csi-controller, ce qui entraîne le plantage devsphere-csi-controlleraprès la rotation.
 Solution : Pour les clusters créés avec la version 1.13 ou ultérieure, suivez les instructions ci-dessous pour redémarrer vsphere-csi-controller. kubectl --kubeconfig=ADMIN_KUBECONFIG rollout restart deployment vsphere-csi-controller -n kube-system | 
  | Installation | 1.10.3-1.10.7, 1.11, 1.12, 1.13.0-1.13.1 | La création du cluster d'administrateur n'échoue pas en cas d'erreurs d'enregistrement du cluster.Même lorsque l'enregistrement du cluster échoue lors de la création du cluster d'administrateur, la commande Pour identifier le symptôme, vous pouvez rechercher les messages d'erreur suivants dans le journal de `gkectl create admin`.gkectl create adminne génère pas d'erreur et peut réussir. En d'autres termes, la création du cluster d'administrateur peut "réussir" sans qu'il soit enregistré dans un parc. 
Failed to register admin cluster Vous pouvez également vérifier si vous trouvez le cluster parmi les clusters enregistrés dans la console Cloud.
    
 Solution : Pour les clusters créés avec la version 1.12 ou ultérieure, suivez les instructions pour réessayer l'enregistrement du cluster d'administrateur après la création du cluster. Pour les clusters créés avec des versions antérieures,
       
        
        Ajoutez une fausse paire clé/valeur, comme "foo: bar", à votre fichier de clé SA connect-register.
        
        Exécutez gkectl update adminpour réenregistrer le cluster d'administrateur. | 
  | Mises à niveau, mises à jour | 1.10, 1.11, 1.12, 1.13.0-1.13.1 | Il est possible que la réinscription du cluster d'administrateur soit ignorée lors de la mise à niveau du cluster d'administrateur.Si la mise à niveau des nœuds du plan de contrôle de l'utilisateur expire lors de la mise à niveau du cluster d'administrateur, le cluster d'administrateur ne sera pas réenregistré avec la version mise à jour de l'agent Connect. 
 Solution :Vérifiez si le cluster figure parmi les clusters enregistrés.
      Vous pouvez également vous connecter au cluster après avoir configuré l'authentification. Si le cluster est toujours enregistré, vous pouvez ignorer les instructions suivantes pour réessayer l'enregistrement.
      Pour les clusters mis à niveau vers la version 1.12 ou ultérieure, suivez les instructions pour réessayer l'enregistrement du cluster d'administrateur après la création du cluster. Pour les clusters mis à niveau vers des versions antérieures, 
        
        Ajoutez une fausse paire clé/valeur, comme "foo: bar", à votre fichier de clé SA connect-register.
        
        Exécutez gkectl update adminpour réenregistrer le cluster d'administrateur. | 
  | Configuration | 1.15.0 | Message d'erreur incorrect concernant vCenter.dataDiskPour un cluster d'administrateur à haute disponibilité, gkectl prepareaffiche le faux message d'erreur suivant : 
vCenter.dataDisk must be present in the AdminCluster spec 
 Solution : Vous pouvez ignorer ce message d'erreur. | 
  | VMware | 1.15.0 | Échec de la création du pool de nœuds en raison de règles d'affinité VM-hôte redondantesLors de la création d'un pool de nœuds utilisant l'affinité VM-hôte, une condition de course peut entraîner la création de plusieurs règles d'affinité VM-hôte portant le même nom. Cela peut entraîner l'échec de la création du pool de nœuds. 
 Solution : Supprimez les anciennes règles redondantes pour que la création du pool de nœuds puisse se poursuivre.
    Ces règles sont nommées [USER_CLUSTER_NAME]-[HASH]. | 
  
  
    | Opération | 1.15.0 | gkectl repair admin-masterpeut échouer en raison defailed
      to delete the admin master node object and reboot the admin master VM
      
La commande gkectl repair admin-masterpeut échouer en raison d'une condition de concurrence avec l'erreur suivante. Failed to repair: failed to delete the admin master node object and reboot the admin master VM 
 Solution : Cette commande est idempotente. Elle peut être réexécutée sans risque jusqu'à ce que la commande aboutisse. | 
| Mises à niveau, mises à jour | 1.15.0 | Les pods restent à l'état "Échec" après la recréation ou la mise à jour d'un nœud du plan de contrôleAprès avoir recréé ou mis à jour un nœud de plan de contrôle, certains pods peuvent rester à l'état Faileden raison d'un échec du prédicat NodeAffinity. Ces pods en échec n'ont aucune incidence sur le fonctionnement ni l'état du cluster. 
 Solution : Vous pouvez ignorer les pods en échec ou les supprimer manuellement. | 
  | Sécurité, configuration | 1.15.0-1.15.1 | Le cluster d'utilisateur OnPremUserCluster n'est pas prêt en raison des identifiants du registre privéSi vous utilisez des identifiants préparés et un registre privé, mais que vous n'avez pas configuré d'identifiants préparés pour votre registre privé, il est possible que l'OnPremUserCluster ne soit pas prêt et que le message d'erreur suivant s'affiche :
     
failed to check secret reference for private registry … 
 Solution : Préparez les identifiants du registre privé pour le cluster d'utilisateur en suivant les instructions de la section Configurer des identifiants préparés.
     | 
  
  
    | Mises à niveau, mises à jour | 1.15.0 | 
        Lors de gkectl upgrade admin, la vérification préliminaire du stockage pour la migration CSI vérifie que les StorageClass ne comportent pas de paramètres ignorés après la migration CSI.
        Par exemple, s'il existe une StorageClass avec le paramètrediskformat,gkectl upgrade adminsignale la StorageClass et indique un échec de la validation avant vol.
        Les clusters d'administrateur créés dans Google Distributed Cloud 1.10 et versions antérieures disposent d'une StorageClass avecdiskformat: thin, ce qui entraînera l'échec de cette validation. Toutefois, cette StorageClass fonctionnera toujours correctement après la migration CSI. Ces échecs doivent plutôt être interprétés comme des avertissements. 
        Pour en savoir plus, consultez la section sur les paramètres StorageClass dans  Migrer les volumes vSphere dans l'arborescence vers le plug-in vSphere Container Storage.
       
 Solution : Après avoir confirmé que votre cluster dispose d'une StorageClass avec des paramètres ignorés après la migration CSI, exécutez gkectl upgrade adminavec l'indicateur--skip-validation-cluster-health. | 
  | Stockage | 1.15, 1.16 | Les volumes vSphere "in-tree" migrés à l'aide du système de fichiers Windows ne peuvent pas être utilisés avec le pilote CSI vSphere.Dans certaines conditions, les disques peuvent être associés en lecture seule aux nœuds Windows. Le volume correspondant est alors en lecture seule dans un pod.
    Ce problème est plus susceptible de se produire lorsqu'un nouvel ensemble de nœuds remplace un ancien ensemble de nœuds (par exemple, lors de la mise à niveau d'un cluster ou de la mise à jour d'un pool de nœuds). Les charges de travail avec état qui fonctionnaient auparavant correctement peuvent ne pas pouvoir écrire dans leurs volumes sur le nouvel ensemble de nœuds. 
 Solution : 
       
        
          Obtenez l'UID du pod qui ne parvient pas à écrire sur son volume :
          kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pod \
    POD_NAME --namespace POD_NAMESPACE \
    -o=jsonpath='{.metadata.uid}{"\n"}'
          Utilisez PersistentVolumeClaim pour obtenir le nom de PersistentVolume :
          kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pvc \
    PVC_NAME --namespace POD_NAMESPACE \
    -o jsonpath='{.spec.volumeName}{"\n"}'
        Déterminez le nom du nœud sur lequel le pod est exécuté :
        kubectl --kubeconfig USER_CLUSTER_KUBECONFIGget pods \
    --namespace POD_NAMESPACE \
    -o jsonpath='{.spec.nodeName}{"\n"}'
        Obtenez un accès PowerShell au nœud, soit via SSH, soit via l'interface Web vSphere.
        
        Définissez les variables d'environnement :
        
PS C:\Users\administrator> pvname=PV_NAME
PS C:\Users\administrator> podid=POD_UIDIdentifiez le numéro du disque associé au PersistentVolume :
        
PS C:\Users\administrator> disknum=(Get-Partition -Volume (Get-Volume -UniqueId ("\\?\"+(Get-Item (Get-Item
"C:\var\lib\kubelet\pods\$podid\volumes\kubernetes.io~csi\$pvname\mount").Target).Target))).DiskNumber
        Vérifiez que le disque est readonly:
PS C:\Users\administrator> (Get-Disk -Number $disknum).IsReadonlyLe résultat doit être True.Définissez readonlysurfalse.
PS C:\Users\administrator> Set-Disk -Number $disknum -IsReadonly $false
PS C:\Users\administrator> (Get-Disk -Number $disknum).IsReadonly
        Supprimez le pod pour qu'il redémarre :
        kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete pod POD_NAME \
    --namespace POD_NAMESPACE
        Le pod doit être planifié sur le même nœud. Toutefois, si le pod est planifié sur un nouveau nœud, vous devrez peut-être répéter les étapes précédentes sur le nouveau nœud.
         | 
  
  
    | Mises à niveau, mises à jour | 1.12, 1.13.0-1.13.7, 1.14.0-1.14.4 | vsphere-csi-secretn'est pas mis à jour aprèsgkectl update credentials vsphere --admin-cluster
Si vous mettez à jour les identifiants vSphere d'un cluster d'administrateur en suivant la procédure de mise à jour des identifiants du cluster, vous constaterez peut-être que vsphere-csi-secretsous l'espace de nomskube-systemdu cluster d'administrateur utilise toujours les anciens identifiants. 
 Solution : 
        Obtenez le nom secret vsphere-csi-secret:kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system get secrets | grep vsphere-csi-secretMettez à jour les données du secret vsphere-csi-secretque vous avez obtenu à l'étape ci-dessus :kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system patch secret CSI_SECRET_NAME -p \
  "{\"data\":{\"config\":\"$( \
    kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system get secrets CSI_SECRET_NAME -ojsonpath='{.data.config}' \
      | base64 -d \
      | sed -e '/user/c user = \"VSPHERE_USERNAME_TO_BE_UPDATED\"' \
      | sed -e '/password/c password = \"VSPHERE_PASSWORD_TO_BE_UPDATED\"' \
      | base64 -w 0 \
    )\"}}"Redémarrez vsphere-csi-controller:kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system rollout restart deployment vsphere-csi-controllerVous pouvez suivre l'état du déploiement avec :
         kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system rollout status deployment vsphere-csi-controllerUne fois le déploiement effectué, le contrôleur doit utiliser le vsphere-csi-secretmis à jour. | 
  
  
    | Mises à niveau, mises à jour | 1.10, 1.11, 1.12.0-1.12.6, 1.13.0-1.13.6, 1.14.0-1.14.2 | Boucle de plantage audit-proxylors de l'activation de Cloud Audit Logs avecgkectl update clusteraudit-proxypeut entrer dans une boucle de plantage en raison d'un--cluster-namevide.
      Ce comportement est dû à un bug dans la logique de mise à jour, où le nom du cluster n'est pas propagé au fichier manifeste du pod / conteneur audit-proxy.
 
 Solution : Pour un cluster d'utilisateur Controlplane V2 avec enableControlplaneV2: true, connectez-vous à la machine du plan de contrôle de l'utilisateur à l'aide de SSH, puis mettez à jour/etc/kubernetes/manifests/audit-proxy.yamlavec--cluster_name=USER_CLUSTER_NAME. Pour un cluster d'utilisateur avec plan de contrôle v1, modifiez le conteneur audit-proxydans le StatefulSetkube-apiserverpour ajouter--cluster_name=USER_CLUSTER_NAME: kubectl edit statefulset kube-apiserver -n USER_CLUSTER_NAME --kubeconfig=ADMIN_CLUSTER_KUBECONFIG | 
  
  
    | Mises à niveau, mises à jour | 1.11, 1.12, 1.13.0-1.13.5, 1.14.0-1.14.1 | Redéploiement supplémentaire du plan de contrôle juste après gkectl upgrade clusterJuste après gkectl upgrade cluster, les pods du plan de contrôle peuvent être redéployés.
      L'état du clustergkectl list clustersest passé deRUNNINGàRECONCILING.
      Les requêtes envoyées au cluster d'utilisateur peuvent expirer. Ce comportement est dû à la rotation automatique des certificats du plan de contrôle après gkectl upgrade cluster. Ce problème ne se produit que pour les clusters d'utilisateur qui n'utilisent PAS le plan de contrôle V2. 
 Solution : Attendez que l'état du cluster redevienne RUNNINGdansgkectl list clusters, ou passez aux versions incluant le correctif : 1.13.6+, 1.14.2+ ou 1.15+. | 
  
  
    | Mises à niveau, mises à jour | 1.12.7 | La version incorrecte 1.12.7-gke.19 a été supprimée. Google Distributed Cloud 1.12.7-gke.19 est une version incorrecte et vous ne devez pas l'utiliser. Les artefacts ont été supprimés du bucket Cloud Storage.
      
 Solution : Utilisez plutôt la version 1.12.7-gke.20. | 
  
  
   | Mises à niveau, mises à jour | 1.12.0+, 1.13.0-1.13.7, 1.14.0-1.14.3 | gke-connect-agentcontinue d'utiliser l'ancienne image après la mise à jour des identifiants du registre
Si vous mettez à jour les identifiants du registre à l'aide de l'une des méthodes suivantes : 
      gkectl update credentials componentaccesssi vous n'utilisez pas de registre privégkectl update credentials privateregistrysi vous utilisez un registre privé Il est possible que gke-connect-agentcontinue d'utiliser l'ancienne image ou que les podsgke-connect-agentne puissent pas être extraits en raison deImagePullBackOff. Ce problème sera résolu dans les versions 1.13.8 et 1.14.4 de Google Distributed Cloud, ainsi que dans les versions ultérieures. 
 Solution : Option 1 : Redéployer gke-connect-agentmanuellement : 
      Supprimez l'espace de noms gke-connect:kubectl --kubeconfig=KUBECONFIG delete namespace gke-connectRedéployez gke-connect-agentavec la clé de compte de service d'origine (il n'est pas nécessaire de mettre à jour la clé) :
      
      Pour le cluster d'administrateur :gkectl update credentials register --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG_FILE --admin-clusterPour le cluster d'utilisateur : gkectl update credentials register --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE Option 2 : Vous pouvez modifier manuellement les données du secret de récupération d'image regcredutilisé par le déploiementgke-connect-agent: kubectl --kubeconfig=KUBECONFIG -n=gke-connect patch secrets regcred -p "{\"data\":{\".dockerconfigjson\":\"$(kubectl --kubeconfig=KUBECONFIG -n=kube-system get secrets private-registry-creds -ojsonpath='{.data.\.dockerconfigjson}')\"}}"Option 3 : Vous pouvez ajouter le secret d'extraction d'image par défaut pour votre cluster dans le déploiement gke-connect-agenten procédant comme suit : 
      Copiez le secret par défaut dans l'espace de noms gke-connect:kubectl --kubeconfig=KUBECONFIG -n=kube-system get secret private-registry-creds -oyaml | sed 's/ namespace: .*/ namespace: gke-connect/' | kubectl --kubeconfig=KUBECONFIG -n=gke-connect apply -f -Obtenez le nom du déploiement gke-connect-agent:kubectl --kubeconfig=KUBECONFIG -n=gke-connect get deployment | grep gke-connect-agentAjoutez le secret par défaut au déploiement gke-connect-agent:kubectl --kubeconfig=KUBECONFIG -n=gke-connect patch deployment DEPLOYMENT_NAME -p '{"spec":{"template":{"spec":{"imagePullSecrets": [{"name": "private-registry-creds"}, {"name": "regcred"}]}}}}' | 
  
  
    | Installation | 1.13, 1.14 | Échec de la vérification manuelle de la configuration de l'équilibreur de chargeLorsque vous validez la configuration avant de créer un cluster avec un équilibreur de charge manuel en exécutant gkectl check-config, la commande échoue et affiche les messages d'erreur suivants.  - Validation Category: Manual LB    Running validation check for "Network
configuration"...panic: runtime error: invalid memory address or nil pointer
dereference 
 Solution : Option 1 : Vous pouvez utiliser les versions de correctif 1.13.7 et 1.14.4 qui incluent le correctif. Option 2 : Vous pouvez également exécuter la même commande pour valider la configuration, mais ignorer la validation de l'équilibreur de charge. gkectl check-config --skip-validation-load-balancer | 
  
  
    | Opération | 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13 et 1.14 | Pénurie de surveillance etcdLes clusters exécutant la version 3.4.13 ou antérieure d'etcd peuvent rencontrer des problèmes de famine de surveillance et de surveillance de ressources non opérationnelle, ce qui peut entraîner les problèmes suivants :
        
         La planification des pods est interrompueLes nœuds ne peuvent pas s'enregistrerkubelet n'observe pas les modifications apportées aux pods Ces problèmes peuvent rendre le cluster non fonctionnel.
        Ce problème est résolu dans les versions 1.12.7, 1.13.6 et 1.14.3 de Google Distributed Cloud, ainsi que dans les versions ultérieures. Ces versions plus récentes utilisent la version 3.4.21 d'etcd. Toutes les versions antérieures de Google Distributed Cloud sont concernées par ce problème.
         Solution Si vous ne pouvez pas effectuer la mise à niveau immédiatement, vous pouvez réduire le risque de défaillance du cluster en diminuant le nombre de nœuds dans votre cluster. Supprimez des nœuds jusqu'à ce que la métrique etcd_network_client_grpc_sent_bytes_totalsoit inférieure à 300 Mbit/s. 
        Pour afficher cette métrique dans l'explorateur de métriques : 
       Accédez à l'explorateur de métriques dans la console Google Cloud  :
       
       
       Accéder à l'explorateur de métriques
Accédez à l'onglet Configuration.
       Développez le menu Sélectionner une métrique, saisissez Kubernetes Containerdans la barre de filtre, puis utilisez les sous-menus pour sélectionner la métrique :
        Dans le menu Ressources actives, sélectionnez Conteneur Kubernetes.
       Dans le menu Catégories de métriques actives, sélectionnez Anthos.Dans le menu Métriques actives, sélectionnez etcd_network_client_grpc_sent_bytes_total.Cliquez sur Appliquer. | 
  
  
    | Mises à niveau, mises à jour | 1.10, 1.11, 1.12, 1.13 et 1.14 | GKE Identity Service peut entraîner des latences du plan de contrôleLors des redémarrages ou des mises à niveau de clusters, GKE Identity Service peut être submergé par le trafic composé de jetons JWT expirés transférés du kube-apiserververs GKE Identity Service via le webhook d'authentification. Bien que GKE Identity Service ne boucle pas sur les erreurs, il ne répond plus et cesse de traiter les requêtes.
       Ce problème entraîne en fin de compte des latences plus élevées du plan de contrôle. Ce problème est résolu dans les versions suivantes de Google Distributed Cloud : Pour savoir si vous êtes concerné par ce problème, procédez comme suit : 
  Vérifiez si le point de terminaison GKE Identity Service est accessible de l'extérieur :
  curl -s -o /dev/null -w "%{http_code}" \
    -X POST https://CLUSTER_ENDPOINT/api/v1/namespaces/anthos-identity-service/services/https:ais:https/proxy/authenticate -d '{}'Remplacez CLUSTER_ENDPOINT par l'adresse IP virtuelle du plan de contrôle et le port de l'équilibreur de charge du plan de contrôle de votre cluster (par exemple, 172.16.20.50:443). Si vous êtes concerné par ce problème, la commande renvoie un code d'état 400. Si la requête expire, redémarrez le podaiset réexécutez la commandecurlpour voir si cela résout le problème. Si vous obtenez le code d'état000, le problème est résolu. Si vous obtenez toujours un code d'état400, cela signifie que le serveur HTTP de GKE Identity Service ne démarre pas. Dans ce cas, continuez.Consultez les journaux de GKE Identity Service et de kube-apiserver :
  
  Consultez le journal GKE Identity Service :
  kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
    --kubeconfig KUBECONFIGSi le journal contient une entrée semblable à la suivante, vous êtes concerné par ce problème : I0811 22:32:03.583448      32 authentication_plugin.cc:295] Stopping OIDC authentication for ???. Unable to verify the OIDC ID token: JWT verification failed: The JWT does not appear to be from this identity provider. To match this provider, the 'aud' claim must contain one of the following audiences:Vérifiez les journaux kube-apiserverde vos clusters :Dans les commandes suivantes, KUBE_APISERVER_POD est le nom du pod kube-apiserversur le cluster donné. Cluster d'administrateur : kubectl --kubeconfig ADMIN_KUBECONFIG logs \
    -n kube-system KUBE_APISERVER_POD kube-apiserverCluster d'utilisateur : kubectl --kubeconfig ADMIN_KUBECONFIG logs \
    -n USER_CLUSTER_NAME KUBE_APISERVER_POD kube-apiserverSi les journaux kube-apiservercontiennent des entrées comme celles ci-dessous, vous êtes concerné par ce problème : E0811 22:30:22.656085       1 webhook.go:127] Failed to make webhook authenticator request: error trying to reach service: net/http: TLS handshake timeout
E0811 22:30:22.656266       1 authentication.go:63] "Unable to authenticate the request" err="[invalid bearer token, error trying to reach service: net/http: TLS handshake timeout]" Solution Si vous ne pouvez pas mettre à niveau vos clusters immédiatement pour obtenir le correctif, vous pouvez identifier et redémarrer les pods concernés comme solution de contournement : 
         Augmentez le niveau de verbosité de GKE Identity Service à 9 :
         kubectl patch deployment ais -n anthos-identity-service --type=json \
    -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", \
    "value":"--vmodule=cloud/identity/hybrid/charon/*=9"}]' \
    --kubeconfig KUBECONFIGConsultez le journal GKE Identity Service pour connaître le contexte du jeton non valide :
  kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
    --kubeconfig KUBECONFIGPour obtenir la charge utile du jeton associée à chaque contexte de jeton non valide, analysez chaque secret de compte de service associé à l'aide de la commande suivante :
kubectl -n kube-system get secret SA_SECRET \
    --kubeconfig KUBECONFIG \
    -o jsonpath='{.data.token}' | base64 --decodePour décoder le jeton et afficher le nom et l'espace de noms du pod source, copiez le jeton dans le débogueur sur jwt.io.
        Redémarrez les pods identifiés à partir des jetons. | 
  
  
    | Opération | 1.8, 1.9, 1.10 | Problème d'augmentation de l'utilisation de la mémoire des pods etcd-maintenanceLes pods de maintenance etcd qui utilisent l'image etcddefrag:gke_master_etcddefrag_20210211.00_p0sont concernés. Le conteneur `etcddefrag` ouvre une nouvelle connexion au serveur etcd à chaque cycle de défragmentation, et les anciennes connexions ne sont pas nettoyées. 
 Solution : Option 1 : Mettez à niveau vers la dernière version de correctif de 1.8 à 1.11, qui contient le correctif. Option 2 : Si vous utilisez une version de correctif antérieure à 1.9.6 et 1.10.3, vous devez réduire le nombre de pods etcd-maintenance pour le cluster d'administrateur et le cluster d'utilisateur : kubectl scale --replicas 0 deployment/gke-master-etcd-maintenance -n USER_CLUSTER_NAME --kubeconfig ADMIN_CLUSTER_KUBECONFIG
kubectl scale --replicas 0 deployment/gke-master-etcd-maintenance -n kube-system --kubeconfig ADMIN_CLUSTER_KUBECONFIG | 
  
  
    | Opération | 1.9, 1.10, 1.11, 1.12, 1.13 | Échec des vérifications de l'état des pods du plan de contrôle du cluster d'utilisateurLe contrôleur d'état du cluster et la commande gkectl diagnose clustereffectuent un ensemble de vérifications d'état, y compris les vérifications d'état des pods dans les espaces de noms. Toutefois, il commence à ignorer les pods du plan de contrôle utilisateur par erreur. Si vous utilisez le mode Controlplane V2, cela n'affectera pas votre cluster. 
 Solution : Cela n'aura aucune incidence sur la gestion des charges de travail ni des clusters. Si vous souhaitez vérifier l'état des pods du plan de contrôle, vous pouvez exécuter les commandes suivantes : kubectl get pods -owide -n USER_CLUSTER_NAME --kubeconfig ADMIN_CLUSTER_KUBECONFIG | 
  
  
    | Mises à niveau, mises à jour | 1.6+, 1.7+ | La redirection k8s.gcr.io→registry.k8s.iopeut affecter les mises à niveau des clusters d'administrateur 1.6 et 1.7.Le 20/03/2023, Kubernetes a redirigé le trafic de k8s.gcr.ioversregistry.k8s.io. Dans Google Distributed Cloud 1.6.x et 1.7.x, les mises à niveau du cluster d'administrateur utilisent l'image de conteneurk8s.gcr.io/pause:3.2. Si vous utilisez un proxy pour votre poste de travail administrateur et que le proxy n'autorise pasregistry.k8s.ioet que l'image de conteneurk8s.gcr.io/pause:3.2n'est pas mise en cache localement, les mises à niveau du cluster d'administrateur échoueront lors de l'extraction de l'image de conteneur. 
 Solution : Ajoutez registry.k8s.ioà la liste d'autorisation du proxy pour votre poste de travail administrateur. | 
  
  
    | Mise en réseau | 1.10, 1.11, 1.12.0-1.12.6, 1.13.0-1.13.6, 1.14.0-1.14.2 | Échec de la validation Seesaw lors de la création de l'équilibreur de chargegkectl create loadbalanceréchoue avec le message d'erreur suivant :
 - Validation Category: Seesaw LB - [FAILURE] Seesaw validation: xxx cluster lb health check failed: LB"xxx.xxx.xxx.xxx" is not healthy: Get "http://xxx.xxx.xxx.xxx:xxx/healthz": dial tcpxxx.xxx.xxx.xxx:xxx: connect: no route to host Cela est dû au fait que le fichier de groupe Seesaw existe déjà. La vérification préliminaire tente de valider un équilibreur de charge Seesaw inexistant. Solution : Supprimez le fichier de groupe Seesaw existant pour ce cluster. Le nom de fichier est seesaw-for-gke-admin.yamlpour le cluster d'administrateur etseesaw-for-{CLUSTER_NAME}.yamlpour un cluster d'utilisateur. | 
  
  
    | Mise en réseau | 1,14 | Expirations de délai de l'application causées par les échecs d'insertion de la table conntrackLa version 1.14 de Google Distributed Cloud est sensible aux échecs d'insertion des tables Netfilter Connection Tracking (conntrack) lors de l'utilisation d'images de système d'exploitation Ubuntu ou COS. Les échecs d'insertion entraînent des expirations de délai aléatoires de l'application et peuvent se produire même lorsque la table conntrack dispose de place pour de nouvelles entrées. Les échecs sont dus à des modifications apportées au noyau 5.15 et aux versions ultérieures qui limitent les insertions de table en fonction de la longueur de chaîne.  Pour savoir si vous êtes concerné par ce problème, vous pouvez vérifier les statistiques du système de suivi de la connexion au noyau sur chaque nœud à l'aide de la commande suivante : sudo conntrack -S La réponse est semblable à ce qui suit : cpu=0       found=0 invalid=4 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=1       found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=2       found=0 invalid=16 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=3       found=0 invalid=13 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=4       found=0 invalid=9 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=5       found=0 invalid=1 insert=0 insert_failed=0 drop=0 early_drop=0 error=519 search_restart=0 clash_resolve=126 chaintoolong=0
... Si une valeur chaintoolongdans la réponse est un nombre différent de zéro, vous êtes concerné par ce problème. Solution La solution à court terme consiste à augmenter la taille de la table de hachage netfilter (nf_conntrack_buckets) et de la table de suivi des connexions netfilter (nf_conntrack_max). Utilisez les commandes suivantes sur chaque nœud de cluster pour augmenter la taille des tables : sysctl -w net.netfilter.nf_conntrack_buckets=TABLE_SIZE
sysctl -w net.netfilter.nf_conntrack_max=TABLE_SIZE Remplacez TABLE_SIZE par la nouvelle taille en octets. La valeur par défaut de la taille du tableau est 262144. Nous vous suggérons de définir une valeur égale à 65 536 fois le nombre de cœurs du nœud. Par exemple, si votre nœud comporte huit cœurs, définissez la taille de la table sur524288. | 
  
  
   | Mise en réseau | 1.13.0-1.13.2 | Boucle de plantage de calico-typha ou anetd-operator sur les nœuds Windows avec Controlplane V2Lorsque 
    Controlplane V2 est activé, calico-typhaouanetd-operatorpeuvent être planifiés sur des nœuds Windows et entrer dans une boucle de plantage. En effet, les deux déploiements tolèrent toutes les contaminations, y compris la contamination des nœuds Windows. 
 Solution : Mettez à niveau vers la version 1.13.3 ou ultérieure, ou exécutez les commandes suivantes pour modifier le déploiement `calico-typha` ou `anetd-operator` :     # If dataplane v2 is not used.
    kubectl edit deployment -n kube-system calico-typha --kubeconfig USER_CLUSTER_KUBECONFIG
    # If dataplane v2 is used.
    kubectl edit deployment -n kube-system anetd-operator --kubeconfig USER_CLUSTER_KUBECONFIG
    Supprimez les spec.template.spec.tolerationssuivants :     - effect: NoSchedule
      operator: Exists
    - effect: NoExecute
      operator: Exists
    Ajoutez la tolérance suivante :     - key: node-role.kubernetes.io/master
      operator: Exists
     | 
  
  
    | Configuration | 1.14.0-1.14.2 | Impossible de charger le fichier d'identifiants du registre privé du cluster d'utilisateurIl est possible que vous ne puissiez pas créer de cluster d'utilisateur si vous spécifiez la section privateRegistryavec les identifiantsfileRef.
      La vérification préliminaire peut échouer avec le message suivant : 
[FAILURE] Docker registry access: Failed to login.
 
 Solution : 
      Si vous n'avez pas l'intention de spécifier le champ ou si vous souhaitez utiliser les mêmes identifiants de registre privé que le cluster d'administrateur, vous pouvez simplement supprimer ou commenter la section privateRegistrydans le fichier de configuration de votre cluster d'utilisateur.Si vous souhaitez utiliser des identifiants de registre privé spécifiques pour votre cluster d'utilisateur, vous pouvez spécifier temporairement la section privateRegistryde la manière suivante :privateRegistry:
  address: PRIVATE_REGISTRY_ADDRESS
  credentials:
    username: PRIVATE_REGISTRY_USERNAME
    password: PRIVATE_REGISTRY_PASSWORD
  caCertPath: PRIVATE_REGISTRY_CACERT_PATH(NOTE : Il s'agit uniquement d'une solution temporaire. Ces champs sont déjà obsolètes. Pensez à utiliser le fichier d'identifiants lorsque vous passez à la version 1.14.3 ou ultérieure.) | 
  
  
   | Opérations | 1.10+ | Cloud Service Mesh et autres service meshes non compatibles avec Dataplane V2Dataplane V2 prend le relais pour l'équilibrage de charge et crée un socket de noyau au lieu d'un DNAT basé sur les paquets. Cela signifie que Cloud Service Mesh ne peut pas inspecter les paquets, car le pod est contourné et n'utilise jamais IPTables. En mode libre kube-proxy, cela se traduit par une perte de connectivité ou un routage incorrect du trafic pour les services avec Cloud Service Mesh comme side-car, car il ne peut pas inspecter les paquets. Ce problème est présent dans toutes les versions de Google Distributed Cloud 1.10. Toutefois, certaines versions plus récentes de 1.10 (1.10.2 et ultérieures) disposent d'une solution de contournement. 
 Solution : Effectuez une mise à niveau vers la version 1.11 pour une compatibilité totale ou, si vous exécutez la version 1.10.2 ou ultérieure, exécutez la commande suivante :     kubectl edit cm -n kube-system cilium-config --kubeconfig USER_CLUSTER_KUBECONFIG
    Ajoutez bpf-lb-sock-hostns-only: trueau fichier ConfigMap, puis redémarrez le DaemonSet anetd :       kubectl rollout restart ds anetd -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG
     | 
  
  
    | Stockage | 1.12+, 1.13.3 | kube-controller-managerpeut détacher de force les volumes persistants au bout de six minutes.
kube-controller-managerpeut expirer lors du détachement des PV/PVC après six minutes et détacher de force les PV/PVC. Les journaux détaillés dekube-controller-manageraffichent des événements semblables à ceux-ci :
 
$ cat kubectl_logs_kube-controller-manager-xxxx | grep "DetachVolume started" | grep expired
kubectl_logs_kube-controller-manager-gke-admin-master-4mgvr_--container_kube-controller-manager_--kubeconfig_kubeconfig_--request-timeout_30s_--namespace_kube-system_--timestamps:2023-01-05T16:29:25.883577880Z W0105 16:29:25.883446       1 reconciler.go:224] attacherDetacher.DetachVolume started for volume "pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16" (UniqueName: "kubernetes.io/csi/csi.vsphere.vmware.com^126f913b-4029-4055-91f7-beee75d5d34a") on node "sandbox-corp-ant-antho-0223092-03-u-tm04-ml5m8-7d66645cf-t5q8f"
This volume is not safe to detach, but maxWaitForUnmountDuration 6m0s expired, force detaching
 Pour vérifier le problème, connectez-vous au nœud et exécutez les commandes suivantes : # See all the mounting points with disks
lsblk -f
# See some ext4 errors
sudo dmesg -T Dans le journal kubelet, des erreurs semblables à celles-ci s'affichent : 
Error: GetDeviceMountRefs check failed for volume "pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16" (UniqueName: "kubernetes.io/csi/csi.vsphere.vmware.com^126f913b-4029-4055-91f7-beee75d5d34a") on node "sandbox-corp-ant-antho-0223092-03-u-tm04-ml5m8-7d66645cf-t5q8f" :
the device mount path "/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16/globalmount" is still mounted by other references [/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16/globalmount
 
 Solution : Connectez-vous au nœud concerné à l'aide de SSH, puis redémarrez-le. | 
  
  
    | Mises à niveau, mises à jour | 1.12+, 1.13+, 1.14+ | La mise à niveau du cluster est bloquée si un pilote CSI tiers est utiliséIl est possible que vous ne puissiez pas mettre à niveau un cluster si vous utilisez un pilote CSI tiers. La commande gkectl cluster diagnosepeut renvoyer l'erreur suivante : 
"virtual disk "kubernetes.io/csi/csi.netapp.io^pvc-27a1625f-29e3-4e4f-9cd1-a45237cc472c" IS NOT attached to machine "cluster-pool-855f694cc-cjk5c" but IS listed in the Node.Status"
 
 Solution : Effectuez la mise à niveau à l'aide de l'option --skip-validation-all. | 
  
  
    | Opération | 1.10+, 1.11+, 1.12+, 1.13+, 1.14+ | gkectl repair admin-mastercrée la VM maître de l'administrateur sans mettre à niveau sa version matérielle
Le nœud maître de l'administrateur créé via gkectl repair admin-masterpeut utiliser une version de matériel de VM inférieure à celle attendue. Lorsque le problème se produit, l'erreur s'affiche dans le rapportgkectl diagnose cluster. CSIPrerequisites [VM Hardware]: The current VM hardware versions are lower than vmx-15 which is unexpected. Please contact Anthos support to resolve this issue. 
 Solution : Arrêtez le nœud maître de l'administrateur, suivez https://kb.vmware.com/s/article/1003746 pour mettre à niveau le nœud vers la version attendue décrite dans le message d'erreur, puis démarrez le nœud. | 
  
  
    | Système d'exploitation | 1.10+, 1.11+, 1.12+, 1.13+, 1.14+, 1.15+, 1.16+, , 1.28+, 1.29+, 1.30+, 1.31+, 1.32+ | La VM libère le bail DHCP lors de l'arrêt/du redémarrage de manière inattendue, ce qui peut entraîner des modifications d'adresse IP.Dans systemd v244, systemd-networkda un changement de comportement par défaut sur la configurationKeepConfiguration. Avant cette modification, les VM n'envoyaient pas de message de libération de bail DHCP au serveur DHCP lors de l'arrêt ou du redémarrage. Après cette modification, les VM envoient un tel message et renvoient les adresses IP au serveur DHCP. Par conséquent, l'adresse IP libérée peut être réattribuée à une autre VM et/ou une autre adresse IP peut être attribuée à la VM, ce qui entraîne un conflit d'adresses IP (au niveau de Kubernetes, et non de vSphere) et/ou un changement d'adresse IP sur les VM, ce qui peut endommager les clusters de différentes manières. Par exemple, vous pouvez constater les problèmes suivants. 
       
        L'interface utilisateur vCenter indique qu'aucune VM n'utilise la même adresse IP, mais kubectl get
        nodes -o widerenvoie des nœuds avec des adresses IP en double.
NAME   STATUS    AGE  VERSION          INTERNAL-IP    EXTERNAL-IP    OS-IMAGE            KERNEL-VERSION    CONTAINER-RUNTIME
node1  Ready     28h  v1.22.8-gke.204  10.180.85.130  10.180.85.130  Ubuntu 20.04.4 LTS  5.4.0-1049-gkeop  containerd://1.5.13
node2  NotReady  71d  v1.22.8-gke.204  10.180.85.130  10.180.85.130  Ubuntu 20.04.4 LTS  5.4.0-1049-gkeop  containerd://1.5.13Échec du démarrage des nouveaux nœuds en raison de l'erreur calico-node
2023-01-19T22:07:08.817410035Z 2023-01-19 22:07:08.817 [WARNING][9] startup/startup.go 1135: Calico node 'node1' is already using the IPv4 address 10.180.85.130.
2023-01-19T22:07:08.817514332Z 2023-01-19 22:07:08.817 [INFO][9] startup/startup.go 354: Clearing out-of-date IPv4 address from this node IP="10.180.85.130/24"
2023-01-19T22:07:08.825614667Z 2023-01-19 22:07:08.825 [WARNING][9] startup/startup.go 1347: Terminating
2023-01-19T22:07:08.828218856Z Calico node failed to start 
 Solution : Déployez le DaemonSet suivant sur le cluster pour rétablir le changement de comportement par défaut de systemd-networkd. Les VM qui exécutent ce DaemonSet ne libèrent pas les adresses IP sur le serveur DHCP lors de l'arrêt ou du redémarrage. Les adresses IP seront automatiquement libérées par le serveur DHCP à l'expiration des baux.       apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        name: set-dhcp-on-stop
      spec:
        selector:
          matchLabels:
            name: set-dhcp-on-stop
        template:
          metadata:
            labels:
              name: set-dhcp-on-stop
          spec:
            hostIPC: true
            hostPID: true
            hostNetwork: true
            containers:
            - name: set-dhcp-on-stop
              image: ubuntu
              tty: true
              command:
              - /bin/bash
              - -c
              - |
                set -x
                date
                while true; do
                  export CONFIG=/host/run/systemd/network/10-netplan-ens192.network;
                  grep KeepConfiguration=dhcp-on-stop "${CONFIG}" > /dev/null
                  if (( $? != 0 )) ; then
                    echo "Setting KeepConfiguration=dhcp-on-stop"
                    sed -i '/\[Network\]/a KeepConfiguration=dhcp-on-stop' "${CONFIG}"
                    cat "${CONFIG}"
                    chroot /host systemctl restart systemd-networkd
                  else
                    echo "KeepConfiguration=dhcp-on-stop has already been set"
                  fi;
                  sleep 3600
                done
              volumeMounts:
              - name: host
                mountPath: /host
              resources:
                requests:
                  memory: "10Mi"
                  cpu: "5m"
              securityContext:
                privileged: true
            volumes:
            - name: host
              hostPath:
                path: /
            tolerations:
            - operator: Exists
              effect: NoExecute
            - operator: Exists
              effect: NoSchedule
       | 
  
  
    | Fonctionnement, mises à niveau, mises à jour | 1.12.0-1.12.5, 1.13.0-1.13.5, 1.14.0-1.14.1 | La clé du compte de service d'accès aux composants est effacée après la mise à niveau du cluster d'administrateur depuis la version 1.11.xCe problème n'affecte que les clusters d'administrateur mis à niveau à partir de la version 1.11.x. Il n'affecte pas les clusters d'administrateur créés après la version 1.12. Après la mise à niveau d'un cluster 1.11.x vers la version 1.12.x, le champ component-access-sa-keydu secretadmin-cluster-credssera effacé.
      Vous pouvez le vérifier en exécutant la commande suivante : kubectl --kubeconfig ADMIN_KUBECONFIG -n kube-system get secret admin-cluster-creds -o yaml | grep 'component-access-sa-key'Si le résultat est vide, cela signifie que la clé a été effacée. Une fois la clé du compte de service d'accès aux composants supprimée, l'installation de nouveaux clusters d'utilisateur ou la mise à niveau de clusters d'utilisateur existants échoueront. Voici quelques messages d'erreur que vous pourriez rencontrer :
       
        Échec de la validation préliminaire lente avec le message d'erreur suivant : "Failed
        to create the test VMs: failed to get service account key: service
        account is not configured."Échec de la préparation d'ici le gkectl prepareavec le message d'erreur suivant :"Failed to prepare OS images: dialing: unexpected end of JSON
        input"Si vous mettez à niveau un cluster d'utilisateur 1.13 à l'aide de la console Google Cloud ou de gcloud CLI, lorsque vous exécutez
        gkectl update admin --enable-preview-user-cluster-central-upgradepour déployer le contrôleur de plate-forme de mise à niveau, la commande échoue
        avec le message :"failed to download bundle to disk: dialing:
        unexpected end of JSON input"(vous pouvez voir ce message
        dans le champstatusde la sortie dekubectl --kubeconfig 
        ADMIN_KUBECONFIG -n kube-system get onprembundle -oyaml). 
 Solution  :  Ajoutez manuellement la clé du compte de service d'accès aux composants au secret en exécutant la commande suivante :
       kubectl --kubeconfig ADMIN_KUBECONFIG -n kube-system get secret admin-cluster-creds -ojson | jq --arg casa "$(cat COMPONENT_ACESS_SERVICE_ACOOUNT_KEY_PATH | base64 -w 0)" '.data["component-access-sa-key"]=$casa' | kubectl --kubeconfig ADMIN_KUBECONFIG apply -f - | 
  
  
    | Opération | 1.13.0+, 1.14.0+ | L'autoscaler de cluster ne fonctionne pas lorsque Controlplane V2 est activé Pour les clusters d'utilisateur créés avec Controlplane V2 activé, les pools de nœuds avec l'autoscaling activé utilisent toujours leur autoscaling.minReplicasdansuser-cluster.yaml. Le journal du pod cluster-autoscaler affiche une erreur semblable à la suivante :   > kubectl --kubeconfig $USER_CLUSTER_KUBECONFIG -n kube-system \
  logs $CLUSTER_AUTOSCALER_POD --container_cluster-autoscaler
 TIMESTAMP  1 gkeonprem_provider.go:73] error getting onpremusercluster ready status: Expected to get a onpremusercluster with id foo-user-cluster-gke-onprem-mgmt/foo-user-cluster
 TIMESTAMP 1 static_autoscaler.go:298] Failed to get node infos for groups: Expected to get a onpremusercluster with id foo-user-cluster-gke-onprem-mgmt/foo-user-cluster
  Vous pouvez trouver le pod de l'autoscaler de cluster en exécutant les commandes suivantes.   > kubectl --kubeconfig $USER_CLUSTER_KUBECONFIG -n kube-system \
   get pods | grep cluster-autoscaler
cluster-autoscaler-5857c74586-txx2c                          4648017n    48076Ki    30s
   
 Solution  : Désactivez l'autoscaling dans tous les pools de nœuds avec `gkectl update cluster` jusqu'à ce que vous passiez à une version contenant le correctif. | 
  
  
    | Installation | 1.12.0-1.12.4, 1.13.0-1.13.3, 1.14.0 | Le format CIDR n'est pas autorisé dans le fichier de bloc d'adresses IP.Lorsque les utilisateurs utilisent CIDR dans le fichier de bloc IP, la validation de la configuration échoue et renvoie l'erreur suivante :
   - Validation Category: Config Check
    - [FAILURE] Config: AddressBlock for admin cluster spec is invalid: invalid IP:
172.16.20.12/30
  
 Solution  : Incluez des adresses IP individuelles dans le fichier de bloc d'adresses IP jusqu'à ce que vous passiez à une version contenant le correctif : 1.12.5, 1.13.4, 1.14.1 ou version ultérieure. | 
  
  
    | Mises à niveau, mises à jour | 1.14.0-1.14.1 | La mise à jour du type d'image de l'OS dans le fichier admin-cluster.yaml n'attend pas la recréation des machines du plan de contrôle utilisateurLorsque vous mettez à jour le type d'image de l'OS du plan de contrôle dans le fichier admin-cluster.yaml, et si le cluster d'utilisateur correspondant a été créé avec enableControlplaneV2défini surtrue, il est possible que les machines du plan de contrôle de l'utilisateur ne terminent pas leur recréation lorsque la commandegkectlse termine. 
 Solution  : Une fois la mise à jour terminée, continuez d'attendre que les machines du plan de contrôle de l'utilisateur aient également terminé leur recréation en surveillant leurs types d'images OS de nœud à l'aide de kubectl --kubeconfig USER_KUBECONFIG get nodes -owide. Par exemple, si vous passez d'Ubuntu à COS, vous devez attendre que toutes les machines du plan de contrôle soient complètement passées d'Ubuntu à COS, même après l'exécution de la commande de mise à jour. | 
  
  
    | Opération | 1.10, 1.11, 1.12, 1.13, 1.14.0 | Erreurs de création ou de suppression de pods dues à un problème de jeton d'authentification du compte de service Calico CNIUn problème lié à Calico dans Google Distributed Cloud 1.14.0 empêche la création et la suppression de pods, et génère le message d'erreur suivant dans la sortie de kubectl describe pods: 
  error getting ClusterInformation: connection is unauthorized: Unauthorized
   Ce problème n'est observé que 24 heures après la création ou la mise à niveau du cluster vers la version 1.14 à l'aide de Calico. Les clusters d'administrateur utilisent toujours Calico, tandis que pour les clusters d'utilisateur, il existe un champ de configuration "enableDataPlaneV2" dans user-cluster.yaml. Si ce champ est défini sur "false" ou n'est pas spécifié, cela signifie que vous utilisez Calico dans le cluster d'utilisateur. Le conteneur install-cnides nœuds crée un fichier kubeconfig avec un jeton valide pendant 24 heures. Ce jeton doit être renouvelé régulièrement par le podcalico-node. Le podcalico-nodene peut pas renouveler le jeton, car il n'a pas accès au répertoire contenant le fichier kubeconfig sur le nœud. 
 Solution : Ce problème a été résolu dans la version 1.14.1 de Google Distributed Cloud. Effectuez une mise à niveau vers cette version ou une version ultérieure. Si vous ne pouvez pas effectuer la mise à niveau immédiatement, appliquez le correctif suivant sur le DaemonSet calico-nodede votre cluster d'administrateur et d'utilisateur :   kubectl -n kube-system get daemonset calico-node \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG -o json \
    | jq '.spec.template.spec.containers[0].volumeMounts += [{"name":"cni-net-dir","mountPath":"/host/etc/cni/net.d"}]' \
    | kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f -
  kubectl -n kube-system get daemonset calico-node \
    --kubeconfig USER_CLUSTER_KUBECONFIG -o json \
    | jq '.spec.template.spec.containers[0].volumeMounts += [{"name":"cni-net-dir","mountPath":"/host/etc/cni/net.d"}]' \
    | kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f -
  Remplacez les éléments suivants :
            ADMIN_CLUSTER_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'administrateur.USER_CLUSTER_CONFIG_FILE: chemin d'accès au fichier de configuration du cluster d'utilisateur. | 
  
  
    | Installation | 1.12.0-1.12.4, 1.13.0-1.13.3, 1.14.0 | Échec de la validation du bloc d'adresses IP lors de l'utilisation de CIDRLa création du cluster échoue alors que l'utilisateur dispose de la configuration appropriée. L'utilisateur constate que la création échoue, car le cluster ne dispose pas de suffisamment d'adresses IP. 
 Solution  : Divisez les CIDR en plusieurs blocs CIDR plus petits, par exemple 10.0.0.0/30devient10.0.0.0/31, 10.0.0.2/31. Tant qu'il y a N+1 CIDR, où N est le nombre de nœuds dans le cluster, cela devrait suffire. | 
    
  
    | Fonctionnement, mises à niveau, mises à jour | 1.11.0 - 1.11.1, 1.10.0 - 1.10.4, 1.9.0 - 1.9.6 | 
        La sauvegarde du cluster d'administrateur n'inclut pas les clés de chiffrement des secrets et la configuration toujours activées.
      
        Lorsque la fonctionnalité de chiffrement permanent des secrets est activée en même temps que la sauvegarde du cluster, la sauvegarde du cluster d'administrateur n'inclut pas les clés de chiffrement ni la configuration requises par la fonctionnalité de chiffrement permanent des secrets. Par conséquent, la réparation du nœud maître de l'administrateur avec cette sauvegarde à l'aide de gkectl repair admin-master --restore-from-backupentraîne l'erreur suivante : Validating admin master VM xxx ...
Waiting for kube-apiserver to be accessible via LB VIP (timeout "8m0s")...  ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Waiting for kube-apiserver to be accessible via LB VIP (timeout "13m0s")...  ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Waiting for kube-apiserver to be accessible via LB VIP (timeout "18m0s")...  ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master Solution : 
         Utilisez le fichier binaire gkectl de la dernière version de correctif disponible pour la version mineure correspondante afin d'effectuer la sauvegarde du cluster d'administrateur après des opérations critiques sur le cluster.  Par exemple, si le cluster exécute la version 1.10.2, utilisez le binaire gkectl 1.10.5 pour effectuer une sauvegarde manuelle du cluster d'administrateur, comme décrit dans Sauvegarder et restaurer un cluster d'administrateur avec gkectl.
         | 
  
    | Fonctionnement, mises à niveau, mises à jour | 1.10+ | 
          Recréer la VM maître de l'administrateur avec un nouveau disque de démarrage (par exemple, gkectl repair admin-master) échouera si la fonctionnalité de chiffrement des secrets toujours activés est activée à l'aide de la commande `gkectl update`.
          Si la fonctionnalité de chiffrement permanent des secrets n'est pas activée lors de la création du cluster, mais l'est ultérieurement à l'aide de l'opération gkectl update, la commandegkectl repair admin-masterne parvient pas à réparer le nœud du plan de contrôle du cluster d'administrateur. Il est recommandé d'activer la fonctionnalité de chiffrement des secrets toujours activé lors de la création du cluster. Il n'existe pas de mesure d'atténuation connue. | 
  
  
    | Mises à niveau, mises à jour | 1.10 | La mise à niveau du premier cluster d'utilisateur de la version 1.9 vers la version 1.10 recrée les nœuds dans les autres clusters d'utilisateurLa mise à niveau du premier cluster d'utilisateur de la version 1.9 à la version 1.10 peut recréer des nœuds dans d'autres clusters d'utilisateur sous le même cluster d'administrateur. La recréation est effectuée de manière progressive. disk_labela été supprimé deMachineTemplate.spec.template.spec.providerSpec.machineVariables, ce qui a déclenché une mise à jour inattendue sur tous lesMachineDeployment.
 
 Solution : Afficher la procédure de contournement | 
  
  
    | Mises à niveau, mises à jour | 1.10.0 | Docker redémarre fréquemment après la mise à niveau du clusterLa mise à niveau du cluster d'utilisateur vers la version 1.10.0 peut entraîner un redémarrage fréquent de Docker. Vous pouvez détecter ce problème en exécutant kubectl describe node NODE_NAME --kubeconfig USER_CLUSTER_KUBECONFIG. L'état d'un nœud indique si Docker redémarre fréquemment. Voici un exemple de résultat: Normal   FrequentDockerRestart    41m (x2 over 141m)     systemd-monitor  Node condition FrequentDockerRestart is now: True, reason: FrequentDockerRestart Pour comprendre la cause première, vous devez vous connecter en SSH au nœud présentant le symptôme et exécuter des commandes telles que sudo journalctl --utc -u dockerousudo journalctl -x. 
 Solution : | 
  
  
    | Mises à niveau, mises à jour | 1.11, 1.12 | Les composants GMP auto-déployés ne sont pas conservés après la mise à niveau vers la version 1.12Si vous utilisez une version de Google Distributed Cloud antérieure à la version 1.12 et que vous avez configuré manuellement des composants Prometheus gérés par Google (GMP) dans l'espace de noms gmp-systempour votre cluster, les composants ne sont pas conservés lorsque vous passez à la version 1.12.x. À partir de la version 1.12, les composants GMP de l'espace de noms gmp-systemet les CRD sont gérés par l'objetstackdriver, avec l'indicateurenableGMPForApplicationsdéfini surfalsepar défaut. Si vous déployez manuellement des composants GMP dans l'espace de noms avant de passer à la version 1.12, les ressources seront supprimées parstackdriver. 
 Solution : | 
  
  
    | Opération | 1.11, 1.12, 1.13.0 - 1.13.1 | Scénario : objets ClusterAPI manquants dans l'instantané du cluster systemDans le scénario system, l'instantané du cluster n'inclut aucune ressource sous l'espace de nomsdefault. Cependant, certaines ressources Kubernetes, comme les objets Cluster API qui se trouvent sous cet espace de noms, contiennent des informations de débogage utiles. L'instantané du cluster doit les inclure.  
 Solution : Vous pouvez exécuter manuellement les commandes suivantes pour collecter les informations de débogage. export KUBECONFIG=USER_CLUSTER_KUBECONFIG
kubectl get clusters.cluster.k8s.io -o yaml
kubectl get controlplanes.cluster.k8s.io -o yaml
kubectl get machineclasses.cluster.k8s.io -o yaml
kubectl get machinedeployments.cluster.k8s.io -o yaml
kubectl get machines.cluster.k8s.io -o yaml
kubectl get machinesets.cluster.k8s.io -o yaml
kubectl get services -o yaml
kubectl describe clusters.cluster.k8s.io
kubectl describe controlplanes.cluster.k8s.io
kubectl describe machineclasses.cluster.k8s.io
kubectl describe machinedeployments.cluster.k8s.io
kubectl describe machines.cluster.k8s.io
kubectl describe machinesets.cluster.k8s.io
kubectl describe servicesoù : USER_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'utilisateur. | 
  
  
    | Mises à niveau, mises à jour | 1.11.0-1.11.4, 1.12.0-1.12.3, 1.13.0-1.13.1 | La suppression du cluster d'utilisateur est bloquée au niveau du vidage des nœuds pour la configuration vSANLors de la suppression, de la mise à jour ou de la mise à niveau d'un cluster d'utilisateur, la vidange des nœuds peut être bloquée dans les cas suivants : 
        Le cluster d'administrateur utilise le pilote CSI vSphere sur vSAN depuis la version 1.12.x.Aucun objet PVC/PV n'est créé par les plug-ins vSphere intégrés dans le cluster d'administrateur et le cluster d'utilisateur. Pour identifier le symptôme, exécutez la commande ci-dessous : kubectl logs clusterapi-controllers-POD_NAME_SUFFIX  --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAMESPACE Voici un exemple de message d'erreur généré par la commande ci-dessus : E0920 20:27:43.086567 1 machine_controller.go:250] Error deleting machine object [MACHINE]; Failed to delete machine [MACHINE]: failed to detach disks from VM "[MACHINE]": failed to convert disk path "kubevols" to UUID path: failed to convert full path "ds:///vmfs/volumes/vsan:[UUID]/kubevols": ServerFaultCode: A general system error occurred: Invalid fault kubevolsest le répertoire par défaut du pilote vSphere "in-tree". Lorsque aucun objet PVC/PV n'est créé, vous pouvez rencontrer un bug qui bloque la vidange du nœud lors de la recherche dekubevols, car l'implémentation actuelle suppose quekubevolsexiste toujours.
 
 Solution : Créez le répertoire kubevolsdans le datastore où le nœud est créé. Ce paramètre est défini dans le champvCenter.datastoredes fichiersuser-cluster.yamlouadmin-cluster.yaml. | 
    
  
    | Configuration | 1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14 | Les clusterrolebinding et clusterrole Cluster Autoscaler sont supprimés après la suppression d'un cluster d'utilisateur.Lorsque vous supprimez un cluster d'utilisateur, les clusterroleetclusterrolebindingcorrespondants pour l'autoscaler de cluster sont également supprimés. Cela affecte tous les autres clusters d'utilisateur du même cluster d'administrateur sur lesquels l'autoscaler de cluster est activé. En effet, le même clusterrole et clusterrolebinding sont utilisés pour tous les pods de l'autoscaler de cluster au sein du même cluster d'administrateur. Voici les symptômes : 
        Journaux cluster-autoscalerkubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-autoscaleroù ADMIN_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'administrateur.
        Voici un exemple de message d'erreur que vous pouvez rencontrer : 2023-03-26T10:45:44.866600973Z W0326 10:45:44.866463       1 reflector.go:424] k8s.io/client-go/dynamic/dynamicinformer/informer.go:91: failed to list *unstructured.Unstructured: onpremuserclusters.onprem.cluster.gke.io is forbidden: User "..." cannot list resource "onpremuserclusters" in API group "onprem.cluster.gke.io" at the cluster scope
2023-03-26T10:45:44.866646815Z E0326 10:45:44.866494       1 reflector.go:140] k8s.io/client-go/dynamic/dynamicinformer/informer.go:91: Failed to watch *unstructured.Unstructured: failed to list *unstructured.Unstructured: onpremuserclusters.onprem.cluster.gke.io is forbidden: User "..." cannot list resource "onpremuserclusters" in API group "onprem.cluster.gke.io" at the cluster scope
 
 Solution : Afficher la procédure de contournement Vérifier si clusterrole et clusterrolebinding sont manquants sur le cluster d'administrateur
 
kubectl get clusterrolebindings --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system | grep cluster-autoscaler
kubectl get clusterrole --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system | grep cluster-autoscaler Appliquez les clusterrole et clusterrolebinding suivants au cluster d'administrateur s'ils sont manquants. Ajoutez les sujets du compte de service au clusterrolebinding pour chaque cluster d'utilisateur. 
  
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-autoscaler
rules:
- apiGroups: ["cluster.k8s.io"]
  resources: ["clusters"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["cluster.k8s.io"]
  resources: ["machinesets","machinedeployments", "machinedeployments/scale","machines"]
  verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups: ["onprem.cluster.gke.io"]
  resources: ["onpremuserclusters"]
  verbs: ["get", "list", "watch"]
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  resourceNames: ["cluster-autoscaler"]
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - patch
- apiGroups:
  - ""
  resources:
  - nodes
  verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups:
  - ""
  resources:
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups:
  - ""
  resources:
  - pods/eviction
  verbs: ["create"]
# read-only access to cluster state
- apiGroups: [""]
  resources: ["services", "replicationcontrollers", "persistentvolumes", "persistentvolumeclaims"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
  resources: ["daemonsets", "replicasets"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
  resources: ["statefulsets"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["batch"]
  resources: ["jobs"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["policy"]
  resources: ["poddisruptionbudgets"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses", "csinodes"]
  verbs: ["get", "list", "watch"]
# misc access
- apiGroups: [""]
  resources: ["events"]
  verbs: ["create", "update", "patch"]
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["create"]
- apiGroups: [""]
  resources: ["configmaps"]
  resourceNames: ["cluster-autoscaler-status"]
  verbs: ["get", "update", "patch", "delete"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: cluster-autoscaler
  name: cluster-autoscaler
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-autoscaler
subjects:
  - kind: ServiceAccount
  name: cluster-autoscaler
  namespace:  NAMESPACE_OF_USER_CLUSTER_1 
  - kind: ServiceAccount
  name: cluster-autoscaler
  namespace:  NAMESPACE_OF_USER_CLUSTER_2 
  ... | 
  
  
    | Configuration | 1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13 | cluster-health-controlleretvsphere-metrics-exporterdu cluster d'administrateur ne fonctionnent pas après la suppression du cluster d'utilisateur
Lorsque vous supprimez un cluster d'utilisateur, le clusterrolecorrespondant est également supprimé, ce qui empêche la réparation automatique et l'exportateur de métriques vSphere de fonctionner. Voici les symptômes : 
        Journaux cluster-health-controllerkubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-health-controlleroù ADMIN_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'administrateur.
        Voici un exemple de message d'erreur que vous pouvez rencontrer : error retrieving resource lock default/onprem-cluster-health-leader-election: configmaps "onprem-cluster-health-leader-election" is forbidden: User "system:serviceaccount:kube-system:cluster-health-controller" cannot get resource "configmaps" in API group "" in the namespace "default": RBAC: clusterrole.rbac.authorization.k8s.io "cluster-health-controller-role" not found
 Journaux vsphere-metrics-exporterkubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
vsphere-metrics-exporteroù ADMIN_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'administrateur.
        Voici un exemple de message d'erreur que vous pouvez rencontrer : vsphere-metrics-exporter/cmd/vsphere-metrics-exporter/main.go:68: Failed to watch *v1alpha1.Cluster: failed to list *v1alpha1.Cluster: clusters.cluster.k8s.io is forbidden: User "system:serviceaccount:kube-system:vsphere-metrics-exporter" cannot list resource "clusters" in API group "cluster.k8s.io" in the namespace "default"
 
 Solution : Afficher la procédure de contournementAppliquez le code YAML suivant au cluster d'administrateur : 
Pour vsphere-metrics-exporterkind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: vsphere-metrics-exporter
rules:
  - apiGroups:
      - cluster.k8s.io
    resources:
      - clusters
    verbs: [get, list, watch]
  - apiGroups:
      - ""
    resources:
      - nodes
    verbs: [get, list, watch]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: vsphere-metrics-exporter
  name: vsphere-metrics-exporter
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: vsphere-metrics-exporter
subjects:
  - kind: ServiceAccount
    name: vsphere-metrics-exporter
    namespace: kube-systemPour cluster-health-controllerapiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-health-controller-role
rules:
- apiGroups:
  - "*"
  resources:
  - "*"
  verbs:
  - "*" | 
  
  
    | Configuration | 1.12.1-1.12.3, 1.13.0-1.13.2 | Échec de la validation de l'image OS pour gkectl check-configProblème connu pouvant entraîner l'échec de gkectl check-configsans exécutergkectl prepare. Cela peut être déroutant, car nous suggérons d'exécuter la commande avantgkectl prepare. Le problème est que la commande gkectl check-configéchoue et renvoie le message d'erreur suivant : Validator result: {Status:FAILURE Reason:os images [OS_IMAGE_NAME] don't exist, please run `gkectl prepare` to upload os images. UnhealthyResources:[]}
 Solution : Option 1 : Exécutez gkectl preparepour importer les images d'OS manquantes. Option 2 : Utilisez gkectl check-config --skip-validation-os-imagespour ignorer la validation des images OS. | 
  
  
    | Mises à niveau, mises à jour | 1.11, 1.12, 1.13 | gkectl update admin/clusteréchoue lors de la mise à jour des groupes d'anti-affinité
Problème connu pouvant entraîner l'échec de gkectl update admin/clusterlors de la mise à jour deanti affinity groups. Le problème est que la commande gkectl updateéchoue et renvoie le message d'erreur suivant : Waiting for machines to be re-deployed...  ERROR
Exit with error:
Failed to update the cluster: timed out waiting for the condition 
 Solution : Afficher la procédure de contournementPour que la mise à jour prenne effet, les machines doivent être recréées afterla mise à jour ayant échoué. Pour mettre à jour le cluster d'administrateur, les nœuds maîtres d'utilisateur et les nœuds de modules complémentaires d'administrateur doivent être recréés. Pour mettre à jour un cluster d'utilisateur, les nœuds de calcul de l'utilisateur doivent être recréés Pour recréer des nœuds de calcul utilisateurOption 1Dans la version 1.11 de la documentation, suivez la procédure pour mettre à jour un pool de nœuds et modifiez le processeur ou la mémoire pour déclencher une recréation progressive des nœuds.
 Option 2 : Utilisez kubectl delete pour recréer les machines une par une
 kubectl delete machines MACHINE_NAME --kubeconfig USER_KUBECONFIG Pour recréer des nœuds maîtres utilisateurOption 1 : Dans la version 1.11 de la documentation, suivez Redimensionner le plan de contrôle et modifiez le processeur ou la mémoire pour déclencher une recréation progressive des nœuds.
 Option 2 : Utilisez kubectl delete pour recréer les machines une par une
 kubectl delete machines MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG Pour recréer des nœuds de module complémentaire d'administrateurUtilisez kubectl delete pour recréer les machines une par une. kubectl delete machines MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG | 
  
  
    | Installation, mises à niveau, mises à jour | 1.13.0-1.13.8, 1.14.0-1.14.4, 1.15.0 | L'enregistrement des nœuds échoue lors de la création, de la mise à niveau ou de la mise à jour du cluster, ainsi que lors de la réparation automatique des nœuds, lorsque ipMode.typeest défini surstaticet que le nom d'hôte configuré dans le fichier de bloc d'adresses IP contient un ou plusieurs points. Dans ce cas, les requêtes de signature de certificat (CSR) pour un nœud ne sont pas approuvées automatiquement. Pour afficher les CSR en attente pour un nœud, exécutez la commande suivante : kubectl get csr -A -o wide Recherchez les messages d'erreur dans les journaux suivants : 
        Affichez les journaux dans le cluster d'administrateur pour le conteneur clusterapi-controller-managerdu podclusterapi-controllers:kubectl logs clusterapi-controllers-POD_NAME \
    -c clusterapi-controller-manager -n kube-system \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIGPour afficher les mêmes journaux dans le cluster d'utilisateur, exécutez la commande suivante :
kubectl logs clusterapi-controllers-POD_NAME \
    -c clusterapi-controller-manager -n USER_CLUSTER_NAME \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIGoù :
          Voici un exemple de message d'erreur que vous pouvez rencontrer :ADMIN_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'administrateur.USER_CLUSTER_NAME est le nom du cluster d'utilisateur. "msg"="failed
        to validate token id" "error"="failed to find machine for node
        node-worker-vm-1" "validate"="csr-5jpx9"Affichez les journaux kubeletsur le nœud problématique :journalctl --u kubeletVoici un exemple de message d'erreur que vous pouvez rencontrer : "Error getting
        node" err="node \"node-worker-vm-1\" not found" Si vous spécifiez un nom de domaine dans le champ "Nom d'hôte" d'un fichier de blocage d'adresses IP, tous les caractères suivant le premier point seront ignorés. Par exemple, si vous spécifiez le nom d'hôte comme bob-vm-1.bank.plc, le nom d'hôte et le nom de nœud de la VM seront définis surbob-vm-1. Lorsque la validation de l'ID de nœud est activée, l'approbateur de CSR compare le nom du nœud au nom d'hôte dans la spécification de la machine et ne parvient pas à réconcilier le nom. L'approbateur rejette la CSR et le nœud ne parvient pas à s'amorcer. 
 Solution : Cluster d'utilisateur Pour désactiver la validation de l'ID de nœud, procédez comme suit : 
        Ajoutez les champs suivants dans le fichier de configuration de votre cluster d'utilisateur :
disableNodeIDVerification: true
disableNodeIDVerificationCSRSigning: trueEnregistrez le fichier, puis mettez à jour le cluster d'utilisateur en exécutant la commande suivante :
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config USER_CLUSTER_CONFIG_FILERemplacez les éléments suivants :
          ADMIN_CLUSTER_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'administrateur.USER_CLUSTER_CONFIG_FILE: chemin d'accès au fichier de configuration du cluster d'utilisateur. Cluster d'administrateur 
        Ouvrez la ressource personnalisée OnPremAdminClusterpour la modifier :kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    edit onpremadmincluster -n kube-systemAjoutez l'annotation suivante à la ressource personnalisée :
features.onprem.cluster.gke.io/disable-node-id-verification: enabledModifiez le fichier manifeste kube-controller-managerdans le plan de contrôle du cluster d'administrateur :
          Connectez-vous en SSH au nœud du plan de contrôle du cluster d'administrateur.Ouvrez le fichier manifeste kube-controller-managerpour le modifier :sudo vi /etc/kubernetes/manifests/kube-controller-manager.yamlRecherchez la liste des controllers:--controllers=*,bootstrapsigner,tokencleaner,-csrapproving,-csrsigningMettez à jour cette section comme indiqué ci-dessous :
--controllers=*,bootstrapsigner,tokencleanerOuvrez le contrôleur d'API Cluster de déploiement pour le modifier :
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    edit deployment clusterapi-controllers -n kube-systemRemplacez les valeurs de node-id-verification-enabledetnode-id-verification-csr-signing-enabledparfalse:--node-id-verification-enabled=false
--node-id-verification-csr-signing-enabled=false | 
  | Installation, mises à niveau, mises à jour | 1.11.0-1.11.4 | Échec du démarrage de la machine du plan de contrôle administrateur en raison du bundle de certificats du registre privéLa création/mise à niveau du cluster d'administrateur est bloquée sur le journal suivant pour toujours et finit par expirer : 
Waiting for Machine gke-admin-master-xxxx to become ready...
 Dans la version 1.11 de la documentation, le journal du contrôleur de l'API Cluster dans l'
    instantané du cluster externe inclut le journal suivant : 
Invalid value 'XXXX' specified for property startup-data
 Voici un exemple de chemin d'accès au fichier journal du contrôleur de l'API Cluster : kubectlCommands/kubectl_logs_clusterapi-controllers-c4fbb45f-6q6g6_--container_vsphere-controller-manager_--kubeconfig_.home.ubuntu..kube.kind-config-gkectl_--request-timeout_30s_--namespace_kube-system_--timestamps
    VMware has a 64k vApp property size limit. In the identified versions,
    the data passed via vApp property is close to the limit. When the private
    registry certificate contains a certificate bundle, it may cause the final
    data to exceed the 64k limit. 
 Workaround: Only include the required certificates in the private registry
    certificate file configured in privateRegistry.caCertPathin
    the admin cluster config file. Or upgrade to a version with the fix when available. | 
  
  
    | Networking | 1.10, 1.11.0-1.11.3, 1.12.0-1.12.2, 1.13.0 | NetworkGatewayNodesmarked unhealthy from concurrent
      status update conflict
In networkgatewaygroups.status.nodes, some nodes switch
      betweenNotHealthyandUp. Logs for the ang-daemonPod running on that node reveal
      repeated errors: 
2022-09-16T21:50:59.696Z ERROR ANGd Failed to report status {"angNode": "kube-system/my-node", "error": "updating Node CR status: sending Node CR update: Operation cannot be fulfilled on networkgatewaynodes.networking.gke.io \"my-node\": the object has been modified; please apply your changes to the latest version and try again"}
L'état NotHealthyempêche le contrôleur d'attribuer des adresses IP flottantes supplémentaires au nœud. Cela peut entraîner une charge plus élevée sur les autres nœuds ou un manque de redondance pour la haute disponibilité. L'activité du plan de données n'est pas affectée. La contention sur l'objet networkgatewaygroupentraîne l'échec de certaines mises à jour de l'état en raison d'un défaut dans la gestion des nouvelles tentatives. Si trop de mises à jour de l'état échouent,ang-controller-managerconsidère que le nœud a dépassé sa limite de temps de signal de présence et le marque commeNotHealthy. Le problème de gestion des nouvelles tentatives a été résolu dans les versions ultérieures. 
 Solution : Passez à une version corrigée, si elle est disponible. | 
  
  
    | Mises à niveau, mises à jour | 1.12.0-1.12.2, 1.13.0 | Une condition de concurrence bloque la suppression de l'objet machine lors d'une mise à jour ou d'une mise à niveau.Un problème connu peut entraîner le blocage de la mise à niveau ou de la mise à jour du cluster en attente de la suppression de l'ancien objet machine. En effet, le finaliseur ne peut pas être supprimé de l'objet machine. Cela affecte toutes les opérations de mise à jour progressive des pools de nœuds. Le problème est que la commande gkectlexpire avec le message d'erreur suivant : 
E0821 18:28:02.546121   61942 console.go:87] Exit with error:
E0821 18:28:02.546184   61942 console.go:87] error: timed out waiting for the condition, message: Node pool "pool-1" is not ready: ready condition is not true: CreateOrUpdateNodePool: 1/3 replicas are updated
Check the status of OnPremUserCluster 'cluster-1-gke-onprem-mgmt/cluster-1' and the logs of pod 'kube-system/onprem-user-cluster-controller' for more detailed debugging information.
 Dans les journaux de pods clusterapi-controller, les erreurs sont semblables à celles ci-dessous : 
$ kubectl logs clusterapi-controllers-[POD_NAME_SUFFIX] -n cluster-1
    -c vsphere-controller-manager --kubeconfig [ADMIN_KUBECONFIG]
    | grep "Error removing finalizer from machine object"
[...]
E0821 23:19:45.114993       1 machine_controller.go:269] Error removing finalizer from machine object cluster-1-pool-7cbc496597-t5d5p; Operation cannot be fulfilled on machines.cluster.k8s.io "cluster-1-pool-7cbc496597-t5d5p": the object has been modified; please apply your changes to the latest version and try again
L'erreur se répète pour la même machine pendant plusieurs minutes pour les exécutions réussies, même sans ce problème. La plupart du temps, elle peut être résolue rapidement, mais dans de rares cas, elle peut rester bloquée à cette condition de course pendant plusieurs heures. Le problème est que la VM sous-jacente est déjà supprimée dans vCenter, mais que l'objet machine correspondant ne peut pas être supprimé. Il est bloqué au niveau de la suppression du finaliseur en raison de mises à jour très fréquentes provenant d'autres contrôleurs.
      Cela peut entraîner un délai avant expiration de la commande gkectl, mais le contrôleur continue de réconcilier le cluster. Le processus de mise à niveau ou de mise à jour finit donc par se terminer. 
 Solution : Nous avons préparé plusieurs options d'atténuation différentes pour ce problème, en fonction de votre environnement et de vos exigences. 
        Option 1 : Attendez que la mise à niveau se termine d'elle-même.
 D'après l'analyse et la reproduction dans votre environnement, la mise à niveau
        peut éventuellement se terminer d'elle-même sans intervention manuelle.         Le problème de cette option est qu'il est incertain de savoir combien de temps il faudra pour que la suppression du finaliseur soit effectuée pour chaque objet machine. Il peut se terminer immédiatement si vous avez de la chance, ou durer plusieurs heures si la réconciliation du contrôleur machineset est trop rapide et que le contrôleur de machine n'a jamais la possibilité de supprimer le finaliseur entre les réconciliations.
 
 Bonne nouvelle : cette option ne nécessite aucune action de votre part et les charges de travail ne seront pas perturbées. Il faut juste un peu plus de temps pour que la migration se termine.
Option 2 : Appliquez l'annotation de réparation automatique à tous les anciens objets Machine.
 Le contrôleur machineset filtrera les machines dont l'annotation de réparation automatique et l'horodatage de suppression sont non nuls, et n'émettra pas d'appels de suppression sur ces machines. Cela peut aider à éviter la condition de concurrence.
 
 L'inconvénient est que les pods sur les machines seront supprimés directement au lieu d'être expulsés, ce qui signifie qu'ils ne respecteront pas la configuration du budget d'interruption de pod. Cela peut potentiellement entraîner des temps d'arrêt pour vos charges de travail.
 
 Commande permettant d'obtenir tous les noms de machines :
 kubectl --kubeconfig CLUSTER_KUBECONFIG get machinesCommande permettant d'appliquer l'annotation de réparation automatique pour chaque machine : kubectl annotate --kubeconfig CLUSTER_KUBECONFIG \
    machine MACHINE_NAME \
    onprem.cluster.gke.io/repair-machine=true Si vous rencontrez ce problème et que la mise à niveau ou la mise à jour ne peut toujours pas se terminer après un long moment, contactez notre équipe d'assistance pour obtenir des solutions. | 
  
  
    | Installation, mises à niveau, mises à jour | 1.10.2, 1.11, 1.12, 1.13 | Échec de la validation préliminaire de la préparation de l'image OS gkectlÉchec de la commande gkectl prepareavec : 
- Validation Category: OS Images
    - [FAILURE] Admin cluster OS images exist: os images [os_image_name] don't exist, please run `gkectl prepare` to upload os images.
Les vérifications préliminaires de gkectl prepareincluaient une validation incorrecte. 
 Solution : Exécutez la même commande avec l'option supplémentaire --skip-validation-os-images. | 
  
  
    | Installation | 1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13 | Une URL vCenter avec un préfixe https://ouhttp://peut entraîner l'échec du démarrage du cluster.Échec de la création du cluster d'administrateur : 
Exit with error:
Failed to create root cluster: unable to apply admin base bundle to external cluster: error: timed out waiting for the condition, message:
Failed to apply external bundle components: failed to apply bundle objects from admin-vsphere-credentials-secret 1.x.y-gke.z to cluster external: Secret "vsphere-dynamic-credentials" is invalid:
[data[https://xxx.xxx.xxx.username]: Invalid value: "https://xxx.xxx.xxx.username": a valid config key must consist of alphanumeric characters, '-', '_' or '.'
(e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+'), data[https://xxx.xxx.xxx.password]:
Invalid value: "https://xxx.xxx.xxx.password": a valid config key must consist of alphanumeric characters, '-', '_' or '.'
(e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+')]
 L'URL est utilisée dans une clé secrète, qui n'est pas compatible avec "/" ni ":". 
 Solution : Supprimez le préfixe https://ouhttp://du champvCenter.Addressdans le fichier YAML de configuration du cluster d'administrateur ou d'utilisateur. | 
  
    | Installation, mises à niveau, mises à jour | 1.10, 1.11, 1.12, 1.13 | Panique gkectl preparesurutil.CheckFileExistsgkectl preparepeut subir une panique avec la trace de la pile suivante :
 
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0xde0dfa]
goroutine 1 [running]:
gke-internal.googlesource.com/syllogi/cluster-management/pkg/util.CheckFileExists(0xc001602210, 0x2b, 0xc001602210, 0x2b) pkg/util/util.go:226 +0x9a
gke-internal.googlesource.com/syllogi/cluster-management/gkectl/pkg/config/util.SetCertsForPrivateRegistry(0xc000053d70, 0x10, 0xc000f06f00, 0x4b4, 0x1, 0xc00015b400)gkectl/pkg/config/util/utils.go:75 +0x85
...
 Le problème est que gkectl preparea créé le répertoire de certificats du registre privé avec une autorisation incorrecte. 
 Solution : Pour résoudre ce problème, exécutez les commandes suivantes sur le poste de travail administrateur : sudo mkdir -p /etc/docker/certs.d/PRIVATE_REGISTRY_ADDRESS
sudo chmod 0755 /etc/docker/certs.d/PRIVATE_REGISTRY_ADDRESS | 
  
    | Mises à niveau, mises à jour | 1.10, 1.11, 1.12, 1.13 | gkectl repair admin-masteret la reprise de la mise à niveau de l'administrateur ne fonctionnent pas ensemble
Après une tentative de mise à niveau du cluster d'administrateur ayant échoué, n'exécutez pas gkectl
      repair admin-master. Cela peut entraîner l'échec des tentatives de mise à niveau ultérieures de l'administrateur, avec des problèmes tels que l'échec de l'activation de la VM maître de l'administrateur ou l'inaccessibilité de la VM. 
 Solution : Si vous avez déjà rencontré ce scénario d'échec, contactez l'assistance. | 
  
    | Mises à niveau, mises à jour | 1.10, 1.11 | La reprise de la mise à niveau du cluster d'administrateur peut entraîner la perte du modèle de VM du plan de contrôle administrateurSi la machine du plan de contrôle administrateur n'est pas recréée après une tentative de mise à niveau du cluster d'administrateur reprise, le modèle de VM du plan de contrôle administrateur est supprimé. Le modèle de VM du plan de contrôle administrateur est le modèle du maître administrateur utilisé pour récupérer la machine du plan de contrôle avec gkectl
      repair admin-master. 
 Solution : Le modèle de VM du plan de contrôle de l'administrateur sera régénéré lors de la prochaine mise à niveau du cluster d'administrateur. | 
  
    | Système d'exploitation | 1.12, 1.13 | cgroup v2 peut affecter les charges de travailDans la version 1.12.0, cgroup v2 (unifié) est activé par défaut pour les nœuds Container-Optimized OS (COS). Cela pourrait potentiellement entraîner une instabilité de vos charges de travail dans un cluster COS. 
 Solution : Nous sommes revenus à cgroup v1 (hybride) dans la version 1.12.1. Si vous utilisez des nœuds COS, nous vous recommandons de passer à la version 1.12.1 dès qu'elle sera disponible. | 
  
    | Identité | 1.10, 1.11, 1.12, 1.13 | Ressource personnalisée ClientConfiggkectl updaterétablit les modifications manuelles que vous avez apportées à la ressource personnalisée ClientConfig.
 
 Solution : Nous vous recommandons vivement de sauvegarder la ressource ClientConfig après chaque modification manuelle. | 
  
    | Installation | 1.10, 1.11, 1.12, 1.13 | Échec de la validation de gkectl check-config: impossible de trouver les partitions F5 BIG-IPLa validation échoue, car les partitions F5 BIG-IP sont introuvables, même si elles existent. Un problème avec l'API F5 BIG-IP peut entraîner l'échec de la validation. 
 Solution : Essayez d'exécuter gkectl check-configà nouveau. | 
  
    | Installation | 1.12 | Échec de l'installation du cluster d'utilisateur en raison du problème d'élection du responsable cert-manager/ca-injectorUne erreur d'installation peut survenir en raison de la boucle de plantage cert-manager-cainjectorlorsque l'apiserver/etcd est lent : 
# These are logs from `cert-manager-cainjector`, from the command
# `kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system
  cert-manager-cainjector-xxx`
I0923 16:19:27.911174       1 leaderelection.go:278] failed to renew lease kube-system/cert-manager-cainjector-leader-election: timed out waiting for the condition
E0923 16:19:27.911110       1 leaderelection.go:321] error retrieving resource lock kube-system/cert-manager-cainjector-leader-election-core:
  Get "https://10.96.0.1:443/api/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election-core": context deadline exceeded
I0923 16:19:27.911593       1 leaderelection.go:278] failed to renew lease kube-system/cert-manager-cainjector-leader-election-core: timed out waiting for the condition
E0923 16:19:27.911629       1 start.go:163] cert-manager/ca-injector "msg"="error running core-only manager" "error"="leader election lost"
 
 Solution : Afficher la procédure de contournementExécutez les commandes suivantes pour atténuer le problème. Effectuez d'abord un scaling à la baisse de monitoring-operatorafin qu'il n'annule pas les modifications apportées au déploiementcert-manager: kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
    scale deployment monitoring-operator --replicas=0Modifiez le déploiement cert-manager-cainjectorpour désactiver l'élection du responsable, car une seule instance dupliquée est en cours d'exécution. Elle n'est pas nécessaire pour une instance dupliquée unique : # Add a command line flag for cainjector: `--leader-elect=false`
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit \
    -n kube-system deployment cert-manager-cainjectorL'extrait de code YAML pertinent pour le déploiement de cert-manager-cainjectordoit se présenter comme suit : 
...
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cert-manager-cainjector
  namespace: kube-system
...
spec:
  ...
  template:
    ...
    spec:
      ...
      containers:
      - name: cert-manager
        image: "gcr.io/gke-on-prem-staging/cert-manager-cainjector:v1.0.3-gke.0"
        args:
        ...
        - --leader-elect=false
...
Conservez les instances dupliquées monitoring-operatorà 0 comme solution d'atténuation jusqu'à la fin de l'installation. Sinon, la modification sera annulée. Une fois l'installation terminée et le cluster opérationnel,
        activez monitoring-operatorpour les opérations à J+2 : kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
    scale deployment monitoring-operator --replicas=1Après chaque mise à niveau, les modifications sont annulées. Effectuez à nouveau les mêmes étapes pour atténuer le problème jusqu'à ce qu'il soit résolu dans une version ultérieure. | 
  
    | VMware | 1.10, 1.11, 1.12, 1.13 | Redémarrer ou mettre à niveau vCenter pour les versions antérieures à la version 7.0U2Si vCenter, pour les versions antérieures à 7.0U2, est redémarré, après une mise à niveau ou autre, le nom de réseau dans les informations de VM de vCenter est incorrect et la machine présente un état Unavailable. Cela entraîne la réparation automatique des nœuds pour en créer de nouveaux. Bug govmomi associé. 
 Solution : Cette solution est fournie par l'assistance VMware : 
        Ce problème est résolu dans les versions 7.0U2 et ultérieures de vCenter.Pour les versions antérieures, effectuez un clic droit sur l'hôte, puis sélectionnez Connexion > Déconnecter. Reconnectez-vous ensuite, ce qui forcera la mise à jour du groupe de ports de la VM. | 
  
    | Système d'exploitation | 1.10, 1.11, 1.12, 1.13 | Connexion SSH fermée par l'hôte distantPour Google Distributed Cloud version 1.7.2 et ultérieure, les images de l'OS Ubuntu sont renforcées avec le 
      benchmark CIS L1 Server. Pour respecter la règle CIS "5.2.16 Vérifier que le délai d'inactivité de la connexion SSH est configuré", /etc/ssh/sshd_configa les paramètres suivants : 
ClientAliveInterval 300
ClientAliveCountMax 0
 Le but de ces paramètres est de mettre fin à une session client après cinq minutes d'inactivité. Cependant, la valeur ClientAliveCountMax 0entraîne un comportement inattendu. Lorsque vous utilisez la session SSH sur le poste de travail administrateur ou un nœud de cluster, la connexion SSH peut être déconnectée même si votre client SSH n'est pas inactif, par exemple lors de l'exécution d'une commande chronophage, et votre commande peut être interrompue avec le message suivant : 
Connection to [IP] closed by remote host.
Connection to [IP] closed.
 
 Solution : Vous disposez des options suivantes : 
        Utilisez nohuppour éviter que votre commande soit interrompue lors d'une déconnexion SSH.nohup gkectl upgrade admin --config admin-cluster.yaml \
    --kubeconfig kubeconfigMettez à jour sshd_configpour utiliser une valeurClientAliveCountMaxdifférente de zéro. La règle CIS recommande d'utiliser une valeur inférieure à 3 :sudo sed -i 's/ClientAliveCountMax 0/ClientAliveCountMax 1/g' \
    /etc/ssh/sshd_config
sudo systemctl restart sshd Veillez à reconnecter votre session SSH. | 
  
    | Installation | 1.10, 1.11, 1.12, 1.13 | Installation cert-manageren conflitDans les versions 1.13, monitoring-operatorinstallera cert-manager dans l'espace de nomscert-manager. Si, pour certaines raisons, vous devez installer votre propre cert-manager, suivez les instructions ci-dessous pour éviter tout conflit : Vous n'avez besoin d'appliquer cette opération qu'une seule fois pour chaque cluster, et les modifications seront conservées lors de la mise à niveau du cluster.Remarque : L'un des symptômes courants de l'installation de votre propre cert-manager est que la version ou l'image de cert-manager(par exemple, v1.7.2) peut revenir à son ancienne version. Cela est dû au fait quemonitoring-operatortente de rapprocher lecert-manageret d'annuler la version au cours du processus.
 Solution :<pÉviter les conflits lors de la mise à niveau 
        Désinstallez votre version de cert-manager. Si vous avez défini vos propres ressources, vous pouvez les sauvegarder
        .Procédez à la mise à niveau.Suivez les instructions ci-dessous pour restaurer votre propre cert-manager. Restaurer votre propre cert-manager dans les clusters d'utilisateur 
        Effectuez le scaling du déploiement monitoring-operatorà 0 :kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    -n USER_CLUSTER_NAME \
    scale deployment monitoring-operator --replicas=0Effectuez le scaling des déploiements cert-managergérés parmonitoring-operatorà 0 :kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager --replicas=0
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager-cainjector\
    --replicas=0
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager-webhook --replicas=0Réinstallez votre version de cert-manager.
        Restaurez vos ressources personnalisées, le cas échéant.Vous pouvez ignorer cette étape si vous utilisez l'
        installation de cert-manager par défaut en amont, ou si vous êtes sûr que cert-manager est installé dans l'espace de noms cert-manager.
        Sinon, copiez le certificatmetrics-cacert-manager.io/v1 et les ressources émettricesmetrics-pki.cluster.localdepuiscert-managervers l'espace de noms des ressources de cluster de votre cert-manager installé.relevant_fields='
{
  apiVersion: .apiVersion,
  kind: .kind,
  metadata: {
    name: .metadata.name,
    namespace: "YOUR_INSTALLED_CERT_MANAGER_NAMESPACE"
  },
  spec: .spec
}
'
f1=$(mktemp)
f2=$(mktemp)
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    get issuer -n cert-manager metrics-pki.cluster.local -o json \
    | jq "${relevant_fields}" > $f1
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    get certificate -n cert-manager metrics-ca -o json \
    | jq "${relevant_fields}" > $f2
kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f $f1
kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f $f2 Restaurer votre propre cert-manager dans les clusters d'administrateur En général, vous n'avez pas besoin de réinstaller cert-manager dans les clusters d'administrateur, car les clusters d'administrateur n'exécutent que des charges de travail de plan de contrôle Google Distributed Cloud. Dans les rares cas où vous devez également installer votre propre cert-manager dans des clusters d'administrateur, suivez les instructions ci-dessous pour éviter tout conflit. Veuillez noter que si vous êtes un client Apigee et avez besoin de cert-manager uniquement pour Apigee, vous n'avez pas besoin d'exécuter les commandes du cluster d'administrateur. 
        </pEffectuez le scaling du déploiement monitoring-operatorà 0.kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    -n kube-system scale deployment monitoring-operator --replicas=0Effectuez le scaling des déploiements cert-managergérés parmonitoring-operatorà 0.kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager \
    --replicas=0
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
     -n cert-manager scale deployment cert-manager-cainjector \
     --replicas=0
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager-webhook \
    --replicas=0Réinstallez votre version de cert-manager.
        Restaurez vos ressources personnalisées, le cas échéant.Vous pouvez ignorer cette étape si vous utilisez l'
        installation de cert-manager par défaut en amont, ou si vous êtes sûr que cert-manager est installé dans l'espace de noms cert-manager.
        Sinon, copiez le certificatmetrics-cacert-manager.io/v1 et les ressources émettricesmetrics-pki.cluster.localdepuiscert-managervers l'espace de noms des ressources de cluster de votre cert-manager installé.relevant_fields='
{
  apiVersion: .apiVersion,
  kind: .kind,
  metadata: {
    name: .metadata.name,
    namespace: "YOUR_INSTALLED_CERT_MANAGER_NAMESPACE"
  },
  spec: .spec
}
'
f3=$(mktemp)
f4=$(mktemp)
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \n
    get issuer -n cert-manager metrics-pki.cluster.local -o json \
    | jq "${relevant_fields}" > $f3
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    get certificate -n cert-manager metrics-ca -o json \
    | jq "${relevant_fields}" > $f4
kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f3
kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f4 | 
  
    | Système d'exploitation | 1.10, 1.11, 1.12, 1.13 | Faux positifs lors de l'analyse des failles docker, containerd et runc
      Les conteneurs Docker, containerd et runc des images d'OS Ubuntu fournies avec Google Distributed Cloud sont rattachés aux versions spéciales à l'aide de Ubuntu PPA. Cela garantit que tout changement d'environnement d'exécution des conteneurs sera qualifié par Google Distributed Cloud avant chaque publication de version. Cependant, les versions spéciales ne sont pas connues de l'outil de suivi CVE d'Ubuntu, qui est utilisé comme flux concernant les failles par divers outils d'analyse CVE. Par conséquent, vous observerez des faux positifs dans les résultats d'analyse des failles Docker, containerd et runc. Par exemple, il est possible que les faux positifs ci-dessous apparaissent dans les résultats de l'analyse CVE. Ces CVE sont déjà corrigées dans les dernières versions corrigées de Google Distributed Cloud. Reportez-vous aux notes de version pour obtenir les correctifs CVE. 
 Solution : Canonical est informé de ce problème et le correctif est disponible à l'adresse 
      https://github.com/canonical/sec-cvescan/issues/73. | 
  
    | Mises à niveau, mises à jour | 1.10, 1.11, 1.12, 1.13 | La connexion réseau entre le cluster d'administrateur et le cluster d'utilisateur peut être indisponible pendant une courte période lors de la mise à niveau d'un cluster standard.Si vous mettez à niveau des clusters standards de la version 1.9 à la version 1.10, vous remarquerez peut-être que les commandes kubectl exec,kubectl loget webhook sur les clusters d'utilisateur peuvent être indisponibles pendant une courte période. Ce temps d'arrêt peut durer jusqu'à une minute. Cela se produit parce que la requête entrante (kubectl exec, kubectl log et webhook) est gérée par kube-apiserver pour le cluster d'utilisateur. L'utilisateur kube-apiserver est un
      
      ensemble avec état. Dans un cluster standard, il n'existe qu'une seule instance dupliquée pour l'ensemble avec état. Lors de la mise à niveau, il est possible que l'ancien kube-apiserver soit indisponible alors que le nouveau kube-apiserver n'est pas encore prêt. 
 Solution : Ce temps d'arrêt ne se produit que pendant le processus de mise à niveau. Si vous souhaitez obtenir un temps d'arrêt plus court pendant la mise à niveau, nous vous recommandons de passer à des clusters à haute disponibilité. | 
  
    | Installation, mises à niveau, mises à jour | 1.10, 1.11, 1.12, 1.13 | Échec de la vérification de préparation de Konnectivity lors du diagnostic d'un cluster à haute disponibilité après la création ou la mise à niveau du clusterSi vous créez ou mettez à niveau un cluster à haute disponibilité et que la vérification de la préparation de Konnectivity a échoué lors du diagnostic du cluster, dans la plupart des cas, cela n'affectera pas les fonctionnalités de Google Distributed Cloud (kubectl exec, kubectl log et webhook). Cela se produit parce qu'une ou deux des instances konnectivity dupliquées peuvent parfois ne pas être prêtes pendant un certain temps en raison d'une mise en réseau instable ou d'autres problèmes. 
 Solution : L'instance konnectivity se rétablira seule. Patientez 30 minutes à 1 heure, puis relancez le diagnostic du cluster. | 
  
    | Système d'exploitation | 1.7, 1.8, 1.9, 1.10, 1.11 | /etc/cron.daily/aideProblème de pic de mémoire et de processeur
À partir de la version 1.7.2 de Google Distributed Cloud, les images d'OS Ubuntu sont renforcées à l'aide du benchmark CIS L1 Server. Le script Cron /etc/cron.daily/aidea donc été installé. Il permet de programmer une vérificationaidepour garantir que la règle CIS L1 Server "1.4.2 Ensure filesystem integrity is regularly checked" (S'assurer que l'intégrité du système de fichiers est régulièrement contrôlée) est appliquée. La job Cron'exécute tous les jours à 6h25 UTC. Selon le nombre de fichiers sur le système de fichiers, vous pouvez rencontrer des pics d'utilisation du processeur et de la mémoire autour de cette période, en raison du processus aide. 
 Solution : Si les pics affectent votre charge de travail, vous pouvez désactiver la job Cron quotidienne : sudo chmod -x /etc/cron.daily/aide | 
  
    | Mise en réseau | 1.10, 1.11, 1.12, 1.13 | Les équilibreurs de charge et les règles de pare-feu distribuées avec état NSX-T interagissent de manière imprévisible.Lors du déploiement de Google Distributed Cloud version 1.9 ou ultérieure, lorsque le déploiement comporte l'équilibreur de charge groupé Seesaw dans un environnement qui utilise des règles de pare-feu distribuées avec état NSX-T, stackdriver-operatorpeut ne pas réussir à créergke-metrics-agent-confConfigMap et entraînergke-connect-agentà se retrouver bloqué dans une boucle de plantage. Le problème sous-jacent est que les règles de pare-feu distribuées avec état NSX-T mettent fin à la connexion d'un client au serveur d'API du cluster d'utilisateur via l'équilibreur de charge Seesaw, car Seesaw utilise des flux de connexion asymétriques. Les problèmes d'intégration avec les règles de pare-feu distribuées NSX-T affectent toutes les versions de Google Distributed Cloud qui utilisent Seesaw. Vous pouvez rencontrer des problèmes de connexion similaires sur vos propres applications lorsqu'elles créent des objets Kubernetes de grande taille, supérieure à 32 Ko. 
 Solution : Dans la version 1.13 de la documentation, suivez 
      ces instructions pour désactiver les règles de pare-feu distribuées NSX-T ou utiliser des règles de pare-feu distribuées sans état pour les VM Seesaw. Si vos clusters utilisent un équilibreur de charge manuel, suivez 
      ces instructions pour le configurer afin de réinitialiser les connexions client lorsqu'il détecte une défaillance du nœud de backend. Sans cette configuration, les clients du serveur d'API Kubernetes peuvent cesser de répondre pendant plusieurs minutes lorsqu'une instance de serveur est en panne. | 
  
    | Journalisation et surveillance | 1.10, 1.11, 1.12, 1.13, 1.14, 1.15 | Facturation de la surveillance inattendue Pour les versions 1.10 à 1.15 de Google Distributed Cloud, certains clients ont constaté une facturation inattendue pour Metrics volumesur la page Facturation. Ce problème ne vous concerne que dans les cas suivants : 
        La journalisation et la surveillance des applications sont activées (enableStackdriverForApplications=true).Les pods d'application comportent l'annotation prometheus.io/scrap=true. (L'installation de Cloud Service Mesh peut également ajouter cette annotation.) Pour vérifier si vous êtes concerné par ce problème, répertoriez vos métriques définies par l'utilisateur. Si vous constatez une facturation pour des métriques indésirables avec le préfixe de nom external.googleapis.com/prometheuset que la valeur deenableStackdriverForApplicationsest définie sur "true" dans la réponse dekubectl -n kube-system get stackdriver stackdriver -o yaml, ce problème vous concerne. 
 Solution  Si vous êtes concerné par ce problème, nous vous recommandons de mettre à niveau vos clusters vers la version 1.12 ou ultérieure, d'arrêter d'utiliser l'indicateur enableStackdriverForApplicationset de passer à la nouvelle solution de surveillance des applications managed-service-for-prometheus, qui ne repose plus sur l'annotationprometheus.io/scrap=true. Avec la nouvelle solution, vous pouvez également contrôler la collecte des journaux et des métriques séparément pour vos applications, avec les indicateursenableCloudLoggingForApplicationsetenableGMPForApplications, respectivement.  Pour arrêter d'utiliser l'indicateur enableStackdriverForApplications, ouvrez l'objet "stackdriver" pour le modifier : 
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
  Supprimez la ligne enableStackdriverForApplications: true, puis enregistrez et fermez l'éditeur. Si vous ne pouvez pas arrêter la collecte de métriques basée sur les annotations, procédez comme suit : 
        Recherchez les pods et services sources contenant les métriques indésirables facturées.
kubectl --kubeconfig KUBECONFIG \
  get pods -A -o yaml | grep 'prometheus.io/scrape: "true"'
kubectl --kubeconfig KUBECONFIG get \
  services -A -o yaml | grep 'prometheus.io/scrape: "true"'Supprimez l'annotation prometheus.io/scrap=truedu pod ou du service. Si l'annotation est ajoutée par Cloud Service Mesh, envisagez de configurer Cloud Service Mesh sans l'option Prometheus ou de désactiver la fonctionnalité de fusion des métriques Istio. | 
  
    | Installation | 1.11, 1.12, 1.13 | Le programme d'installation échoue lors de la création d'un disque de données vSphere
      Le programme d'installation de Google Distributed Cloud peut échouer si les rôles personnalisés sont liés à un niveau d'autorisation inapproprié. Lorsque la liaison de rôle n'est pas correcte, la création d'un disque de données vSphere avec govcest bloquée et le disque créé avec une taille égale à 0. Pour résoudre le problème, vous devez lier le rôle personnalisé au niveau de vSphere vCenter (racine). 
 Solution : Si vous souhaitez lier le rôle personnalisé au niveau du DC (ou à un niveau inférieur à la racine), vous devez également lier le rôle en lecture seule à l'utilisateur au niveau racine de vCenter. Pour en savoir plus sur la création de rôle, consultez la page 
      Droits des utilisateurs sur les comptes vCenter. | 
  
    | Journalisation et surveillance | 1.9.0-1.9.4, 1.10.0-1.10.1 | Trafic réseau élevé vers monitoring.googleapis.com
      Vous risquez de rencontrer un trafic réseau important vers monitoring.googleapis.com, même dans un nouveau cluster qui ne comporte aucune charge de travail d'utilisateur. Ce problème affecte la version 1.10.0-1.10.1 et la version 1.9.0-1.9.4. Ce problème est résolu dans les versions 1.10.2 et 1.9.5. 
 Solution : Afficher la procédure de contournementEffectuez une mise à niveau vers la version 1.10.2/1.9.5 ou ultérieure. Pour résoudre ce problème dans une version antérieure, procédez comme suit : 
          Effectuez un scaling à la baisse de `stackdriver-operator`:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system \
    scale deployment stackdriver-operator --replicas=0Remplacez USER_CLUSTER_KUBECONFIG par le chemin d'accès du fichier kubeconfig du cluster d'utilisateur.Ouvrez le fichier ConfigMap gke-metrics-agent-confpour le modifier :kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system \
    edit configmap gke-metrics-agent-confAugmentez l'intervalle de vérification de 0,1 seconde à 13 secondes :
  processors:
    disk_buffer/metrics:
      backend_endpoint: https://monitoring.googleapis.com:443
      buffer_dir: /metrics-data/nsq-metrics-metrics
      probe_interval: 13s
      retention_size_mib: 6144
  disk_buffer/self:
      backend_endpoint: https://monitoring.googleapis.com:443
      buffer_dir: /metrics-data/nsq-metrics-self
      probe_interval: 13s
      retention_size_mib: 200
    disk_buffer/uptime:
      backend_endpoint: https://monitoring.googleapis.com:443
      buffer_dir: /metrics-data/nsq-metrics-uptime
      probe_interval: 13s
      retention_size_mib: 200Fermez la session de modification.Remplacez la version de DaemonSet gke-metrics-agentpar la version 1.1.0-anthos.8 :kubectl --kubeconfig USER_CLUSTER_KUBECONFIG  \
  --namespace kube-system  set image daemonset/gke-metrics-agent \
  gke-metrics-agent=gcr.io/gke-on-prem-release/gke-metrics-agent:1.1.0-anthos.8 | 
  
    | Journalisation et surveillance | 1.10, 1.11 | gke-metrics-agentprésente des erreurs CrashLoopBackOff récurrentes
Pour Google Distributed Cloud version 1.10 et ultérieure, le DaemonSet `gke-metrics-agent` présente des erreurs CrashLoopBackOff récurrentes lorsque `enableStackdriverForApplications` est défini sur `true` dans l'objet `stackdriver`. 
 Solution : Pour résoudre ce problème, désactivez la collecte de métriques d'application en exécutant les commandes suivantes. Ces commandes ne désactivent pas la collecte des journaux d'application. 
        Pour empêcher l'annulation des modifications suivantes, effectuez un scaling à la baisse de stackdriver-operator:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system scale deploy stackdriver-operator \
    --replicas=0Remplacez USER_CLUSTER_KUBECONFIG par le chemin d'accès du fichier kubeconfig du cluster d'utilisateur.Ouvrez le fichier ConfigMap gke-metrics-agent-confpour le modifier :kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system edit configmap gke-metrics-agent-confSous services.pipelines, mettez en commentaire l'intégralité de la sectionmetrics/app-metrics:services:
  pipelines:
    #metrics/app-metrics:
    #  exporters:
    #  - googlecloud/app-metrics
    #  processors:
    #  - resource
    #  - metric_to_resource
    #  - infer_resource
    #  - disk_buffer/app-metrics
    #  receivers:
    #  - prometheus/app-metrics
    metrics/metrics:
      exporters:
      - googlecloud/metrics
      processors:
      - resource
      - metric_to_resource
      - infer_resource
      - disk_buffer/metrics
      receivers:
      - prometheus/metricsFermez la session de modification.Redémarrez le DaemonSet gke-metrics-agent:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system rollout restart daemonset gke-metrics-agent | 
  
    | Journalisation et surveillance | 1.11, 1.12, 1.13 | Remplacer les métriques obsolètes dans le tableau de bordSi des métriques obsolètes sont utilisées dans vos tableaux de bord prêts à l'emploi, certains graphiques seront vides. Pour trouver les métriques obsolètes dans les tableaux de bord Monitoring, exécutez les commandes suivantes : gcloud monitoring dashboards list > all-dashboard.json
# find deprecated metrics
cat all-dashboard.json | grep -E \
  'kube_daemonset_updated_number_scheduled\
    |kube_node_status_allocatable_cpu_cores\
    |kube_node_status_allocatable_pods\
    |kube_node_status_capacity_cpu_cores'Les métriques obsolètes suivantes doivent être migrées vers leurs remplacements. 
        | Obsolète | Remplacement | 
|---|
 
          | kube_daemonset_updated_number_scheduled | kube_daemonset_status_updated_number_scheduled |  
          | kube_node_status_allocatable_cpu_cores
 kube_node_status_allocatable_memory_bytes
 kube_node_status_allocatable_pods | kube_node_status_allocatable |  
          | kube_node_status_capacity_cpu_cores
 kube_node_status_capacity_memory_bytes
 kube_node_status_capacity_pods | kube_node_status_capacity |  
          | kube_hpa_status_current_replicas | kube_horizontalpodautoscaler_status_current_replicas |  
 Solution : Pour remplacer les métriques obsolètes : 
        Supprimez l'état du nœud GKE On-Prem du tableau de bord Google Cloud Monitoring. Réinstallez l'état du nœud GKE On-Prem en suivant 
        ces instructions.Supprimez l'utilisation du nœud GKE On-Prem dans le tableau de bord Google Cloud Monitoring. Réinstallez l'utilisation du nœud GKE On-Prem en suivant 
        ces instructions.Supprimez l'état de santé de la VM vSphere GKE On-Prem du tableau de bord Google Cloud Monitoring. Réinstallez "État de santé de la VM vSphere GKE On-Prem" en suivant 
        ces instructions.Cette obsolescence est due à la mise à niveau de l'agent 
      kube-state-metrics de la version 1.9 à la version 2.4, qui est requise pour Kubernetes 1.22. Vous pouvez remplacer toutes les métriques kube-state-metricsobsolètes, qui ont le préfixekube_, dans vos tableaux de bord personnalisés ou vos règles d'alerte. | 
  
    | Journalisation et surveillance | 1.10, 1.11, 1.12, 1.13 | Données de métriques inconnues dans Cloud MonitoringPour Google Distributed Cloud version 1.10 et ultérieures, les données des clusters dans Cloud Monitoring peuvent contenir des entrées de métriques récapitulatives non pertinentes, telles que les suivantes : 
Unknown metric: kubernetes.io/anthos/go_gc_duration_seconds_summary_percentile
 Voici d'autres types de métriques pouvant présenter des métriques récapitulatives non pertinentes :: 
        apiserver_admission_step_admission_duration_seconds_summarygo_gc_duration_secondsscheduler_scheduling_duration_secondsgkeconnect_http_request_duration_seconds_summaryalertmanager_nflog_snapshot_duration_seconds_summary Bien que ces métriques de type récapitulatif figurent dans la liste des métriques, elles ne sont pas compatibles avec gke-metrics-agentpour le moment. | 
  
    | Journalisation et surveillance | 1.10, 1.11, 1.12, 1.13 | Métriques manquantes sur certains nœudsIl se peut que les métriques suivantes soient manquantes sur certains nœuds, mais pas tous : 
        kubernetes.io/anthos/container_memory_working_set_byteskubernetes.io/anthos/container_cpu_usage_seconds_totalkubernetes.io/anthos/container_network_receive_bytes_total 
 Solution : Pour résoudre ce problème, procédez comme suit. Pour les versions [1.9.5+, 1.10.2+, 1.11.0]: augmentez le processeur pour gke-metrics-agent en suivant les étapes 1 à 4. 
        Ouvrez votre ressource stackdriverpour la modifier :kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system edit stackdriver stackdriverPour augmenter la demande de processeur pour gke-metrics-agentde10mà50m, et la limite de processeur de100mà200m, ajoutez la sectionresourceAttrOverridesuivante au fichier manifestestackdriver:spec:
  resourceAttrOverride:
    gke-metrics-agent/gke-metrics-agent:
      limits:
        cpu: 100m
        memory: 4608Mi
      requests:
        cpu: 10m
        memory: 200MiVotre ressource modifiée doit ressembler à ce qui suit :spec:
  anthosDistribution: on-prem
  clusterLocation: us-west1-a
  clusterName: my-cluster
  enableStackdriverForApplications: true
  gcpServiceAccountSecretName: ...
  optimizedMetrics: true
  portable: true
  projectID: my-project-191923
  proxyConfigSecretName: ...
  resourceAttrOverride:
    gke-metrics-agent/gke-metrics-agent:
      limits:
        cpu: 200m
        memory: 4608Mi
      requests:
        cpu: 50m
        memory: 200MiEnregistrez les modifications et fermez l'éditeur de texte.Pour vérifier que vos modifications ont pris effet, exécutez la commande suivante :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system get daemonset gke-metrics-agent -o yaml \
    | grep "cpu: 50m"La commande détectecpu: 50msi vos modifications ont été appliquées. | 
  
  
    | Journalisation et surveillance | 1.11.0-1.11.2, 1.12.0 |  Métriques du planificateur et du gestionnaire de contrôleurs manquantes dans le cluster d'administrateur
      Si votre cluster d'administrateur est concerné par ce problème, les métriques du planificateur et du gestionnaire de contrôleurs sont manquantes. Par exemple, ces deux métriques sont manquantes 
# scheduler metric example
scheduler_pending_pods
# controller-manager metric example
replicaset_controller_rate_limiter_use
 
 Solution : Passez à la version 1.11.3+, 1.12.1+ ou 1.13+. | 
  
  
    |  | 1.11.0-1.11.2, 1.12.0 | Métriques de scheduler et de controller-manager manquantes dans le cluster d'utilisateur Si votre cluster d'utilisateur est concerné par ce problème, les métriques du planificateur et du gestionnaire de contrôleur sont manquantes. Par exemple, les deux métriques suivantes sont manquantes : 
# scheduler metric example
scheduler_pending_pods
# controller-manager metric example
replicaset_controller_rate_limiter_use
 
 Solution : Ce problème est résolu dans Google Distributed Cloud version 1.13.0 et ultérieure.
      Mettez à niveau votre cluster vers une version incluant le correctif. | 
  
    | Installation, mises à niveau, mises à jour | 1.10, 1.11, 1.12, 1.13 | Échec de l'enregistrement du cluster d'administrateur lors de la créationSi vous créez un cluster d'administrateur pour la version 1.9.x ou 1.10.0 et que le cluster d'administrateur ne parvient pas à s'enregistrer auprès de la spécification gkeConnectfournie lors de sa création, vous obtenez l'erreur suivante. 
Failed to create root cluster: failed to register admin cluster: failed to register cluster: failed to apply Hub Membership: Membership API request failed: rpc error:  ode = PermissionDenied desc = Permission 'gkehub.memberships.get' denied on PROJECT_PATH
 Vous pourrez toujours utiliser ce cluster d'administrateur, mais vous obtiendrez l'erreur suivante si vous tenterez de mettre à niveau le cluster d'administrateur vers la version 1.10.y par la suite. 
failed to migrate to first admin trust chain: failed to parse current version "": invalid version: "" failed to migrate to first admin trust chain: failed to parse current version "": invalid version: ""
 
 Solution : Afficher la procédure de contournementSi cette erreur se produit, procédez comme suit pour résoudre le problème d'enregistrement du cluster. Une fois ce correctif effectué, vous pouvez mettre à niveau votre cluster d'administrateur. 
          Exécutez gkectl update adminpour enregistrer le cluster d'administrateur avec la clé de compte de service appropriée.Créez un compte de service dédié pour corriger la ressource personnalisée OnPremAdminCluster.export KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
# Create Service Account modify-admin
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: modify-admin
  namespace: kube-system
EOF
# Create ClusterRole
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  creationTimestamp: null
  name: modify-admin-role
rules:
- apiGroups:
  - "onprem.cluster.gke.io"
  resources:
  - "onpremadminclusters/status"
  verbs:
  - "patch"
EOF
# Create ClusterRoleBinding for binding the permissions to the modify-admin SA
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  creationTimestamp: null
  name: modify-admin-rolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: modify-admin-role
subjects:
- kind: ServiceAccount
  name: modify-admin
  namespace: kube-system
EOFRemplacez ADMIN_CLUSTER_KUBECONFIG par le chemin d'accès au fichier kubeconfig de votre cluster d'administrateur.Exécutez ces commandes pour mettre à jour la ressource personnalisée OnPremAdminCluster.export KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
SERVICE_ACCOUNT=modify-admin
SECRET=$(kubectl get serviceaccount ${SERVICE_ACCOUNT} \
    -n kube-system -o json \
    | jq -Mr '.secrets[].name | select(contains("token"))')
TOKEN=$(kubectl get secret ${SECRET} -n kube-system -o json \
    | jq -Mr '.data.token' | base64 -d)
kubectl get secret ${SECRET} -n kube-system -o json \
    | jq -Mr '.data["ca.crt"]' \
    | base64 -d > /tmp/ca.crt
APISERVER=https://$(kubectl -n default get endpoints kubernetes \
    --no-headers | awk '{ print $2 }')
# Find out the admin cluster name and gkeOnPremVersion from the OnPremAdminCluster CR
ADMIN_CLUSTER_NAME=$(kubectl get onpremadmincluster -n kube-system \
    --no-headers | awk '{ print $1 }')
GKE_ON_PREM_VERSION=$(kubectl get onpremadmincluster \
    -n kube-system $ADMIN_CLUSTER_NAME \
    -o=jsonpath='{.spec.gkeOnPremVersion}')
# Create the Status field and set the gkeOnPremVersion in OnPremAdminCluster CR
curl -H "Accept: application/json" \
    --header "Authorization: Bearer $TOKEN" -XPATCH \
    -H "Content-Type: application/merge-patch+json" \
    --cacert /tmp/ca.crt \
    --data '{"status": {"gkeOnPremVersion": "'$GKE_ON_PREM_VERSION'"}}' \
    $APISERVER/apis/onprem.cluster.gke.io/v1alpha1/namespaces/kube-system/onpremadminclusters/$ADMIN_CLUSTER_NAME/statusEssayez à nouveau de mettre à niveau le cluster d'administrateur avec l'option --disable-upgrade-from-checkpoint.gkectl upgrade admin --config ADMIN_CLUSTER_CONFIG \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --disable-upgrade-from-checkpointRemplacez ADMIN_CLUSTER_CONFIG par le chemin d'accès au fichier de configuration de votre cluster d'administrateur. | 
  
    | Identité | 1.10, 1.11, 1.12, 1.13 | L'utilisation de GKE Identity Service peut entraîner le redémarrage imprévisible de l'agent Connect
      Si vous utilisez la fonctionnalité GKE Identity Service pour gérer la 
      ClientConfig de GKE Identity Service, l'
      agent Connect peut redémarrer de manière inattendue. 
 Solution : Si vous avez rencontré ce problème avec un cluster existant, vous pouvez effectuer l'une des opérations suivantes : 
        Désactivez GKE Identity Service. Si vous désactivez GKE Identity Service, cela ne supprimera pas le binaire GKE Identity Service déployé ni la ClientConfig GKE Identity Service. Pour désactiver GKE Identity Service, exécutez la commande suivante :
gcloud container fleet identity-service disable \
    --project PROJECT_IDRemplacez PROJECT_ID par l'ID du 
        projet hôte de parc du cluster.Mettez à jour le cluster vers la version 1.9.3 ou ultérieure, ou la version 1.10.1 ou ultérieure, afin de mettre à jour la version de l'agent Connect. | 
  
    | Mise en réseau | 1.10, 1.11, 1.12, 1.13 | Cisco ACI ne fonctionne pas avec Direct Server Return (DSR)Seesaw s'exécute en mode DSR et, par défaut, il ne fonctionne pas dans Cisco ACI en raison de l'apprentissage IP du plan de données. 
 Solution : Une solution de contournement possible consiste à désactiver l'apprentissage IP en ajoutant l'adresse IP Seesaw en tant qu'adresse IP virtuelle L4-L7 dans le contrôleur d'infrastructure Cisco Application Policy Infrastructure (APIC). Vous pouvez configurer l'option d'adresse IP virtuelle L4-L7 en accédant à Locataire > Profils d'application > EPG d'application ou EPG uSeg. Si vous ne désactivez pas l'apprentissage IP, les points de terminaison IP basculeront entre différents emplacements de la structure d'API Cisco. | 
  
    | VMware | 1.10, 1.11, 1.12, 1.13 | Problèmes liés à la mise à niveau 3 de vSphere 7.0VMWare a récemment identifié des problèmes critiques avec les versions suivantes de vSphere 7.0, mise à niveau 3 : 
        vSphere ESXi 7.0, mise à niveau 3 (version 18644231)vSphere ESXi 7.0, mise à niveau 3a (version 18825058)vSphere ESXi 7.0, mise à niveau 3b (version 18905247)vSphere vCenter 7.0, mise à niveau 3b (version 18901211) 
 Solution : VMware a depuis supprimé ces versions. Vous devez mettre à niveau les ESXi et vCenter vers une version plus récente. | 
  
    | Système d'exploitation | 1.10, 1.11, 1.12, 1.13 | Échec de l'installation du volume emptyDir en tant que execdans le pod en cours d'exécution sur les nœuds COSPour les pods exécutés sur des nœuds qui utilisent des images Container-Optimized OS (COS), vous ne pouvez pas monter le volume emptyDir en tant que exec. Il est installé en tant quenoexecet vous obtenez l'erreur suivante :exec user
      process caused: permission denied. Par exemple, ce message d'erreur s'affiche si vous déployez le pod de test suivant : 
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: test
spec:
  containers:
  - args:
    - sleep
    - "5000"
    image: gcr.io/google-containers/busybox:latest
    name: test
    volumeMounts:
      - name: test-volume
        mountPath: /test-volume
    resources:
      limits:
        cpu: 200m
        memory: 512Mi
  dnsPolicy: ClusterFirst
  restartPolicy: Always
  volumes:
    - emptyDir: {}
      name: test-volume
Dans le pod de test, si vous exécutez mount | grep test-volume,
      l'option noexec est affichée : 
/dev/sda1 on /test-volume type ext4 (rw,nosuid,nodev,noexec,relatime,commit=30)
 
 Solution : Afficher la procédure de contournementAppliquez une ressource DaemonSet, par exemple : 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fix-cos-noexec
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: fix-cos-noexec
  template:
    metadata:
      labels:
        app: fix-cos-noexec
    spec:
      hostIPC: true
      hostPID: true
      containers:
      - name: fix-cos-noexec
        image: ubuntu
        command: ["chroot", "/host", "bash", "-c"]
        args:
        - |
          set -ex
          while true; do
            if ! $(nsenter -a -t 1 findmnt -l | grep -qe "^/var/lib/kubelet\s"); then
              echo "remounting /var/lib/kubelet with exec"
              nsenter -a -t 1 mount --bind /var/lib/kubelet /var/lib/kubelet
              nsenter -a -t 1 mount -o remount,exec /var/lib/kubelet
            fi
            sleep 3600
          done
        volumeMounts:
        - name: host
          mountPath: /host
        securityContext:
          privileged: true
      volumes:
      - name: host
        hostPath:
          path: /
 | 
  
    | Mises à niveau, mises à jour | 1.10, 1.11, 1.12, 1.13 | La mise à niveau de l'instance dupliquée du pool de nœuds du cluster ne fonctionne pas une fois l'autoscaling désactivé sur le pool de nœudsLes instances dupliquées du pool de nœuds ne sont pas mises à jour une fois l'autoscaling activé et désactivé sur un pool de nœuds. 
 Solution : Supprimez les annotations
      cluster.x-k8s.io/cluster-api-autoscaler-node-group-max-sizeetcluster.x-k8s.io/cluster-api-autoscaler-node-group-min-sizedu déploiement de la machine du pool de nœuds correspondant. | 
  
    | Journalisation et surveillance | 1.11, 1.12, 1.13 | Les tableaux de bord de surveillance Windows affichent les données des clusters LinuxÀ partir de la version 1.11, les tableaux de bord de surveillance prêts à l'emploi, à savoir "État du pod Windows" et "État du nœud Windows", affichent également les données des clusters Linux. En effet, les métriques des nœuds et des pods Windows sont également exposées sur les clusters Linux. | 
    
  
    | Journalisation et surveillance | 1.10, 1.11, 1.12 | stackdriver-log-forwarderen CrashLoopBackOff constant
Pour Google Distributed Cloud versions 1.10, 1.11 et 1.12, le DaemonSet stackdriver-log-forwarderpeut présenter des erreursCrashLoopBackOfflorsque des journaux tampons corrompus se trouvent sur le disque. 
 Solution : Pour résoudre ce problème, nous devons nettoyer les journaux mis en mémoire tampon sur le nœud. 
        Pour éviter ce comportement inattendu, effectuez un scaling à la baisse de stackdriver-log-forwarder:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n kube-system patch daemonset stackdriver-log-forwarder -p '{"spec": {"template": {"spec": {"nodeSelector": {"non-existing": "true"}}}}}'Remplacez USER_CLUSTER_KUBECONFIG par le chemin d'accès du fichier kubeconfig du cluster d'utilisateur.Déployez le DaemonSet de nettoyage pour nettoyer les blocs endommagés :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n kube-system -f - << EOF
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluent-bit-cleanup
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: fluent-bit-cleanup
  template:
    metadata:
      labels:
        app: fluent-bit-cleanup
    spec:
      containers:
      - name: fluent-bit-cleanup
        image: debian:10-slim
        command: ["bash", "-c"]
        args:
        - |
          rm -rf /var/log/fluent-bit-buffers/
          echo "Fluent Bit local buffer is cleaned up."
          sleep 3600
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        securityContext:
          privileged: true
      tolerations:
      - key: "CriticalAddonsOnly"
        operator: "Exists"
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      - key: node-role.gke.io/observability
        effect: NoSchedule
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
EOFPour vous assurer que le DaemonSet de nettoyage a nettoyé tous les blocs, vous pouvez exécuter les commandes suivantes. Le résultat des deux commandes doit être égal au numéro de nœud du cluster :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
  logs -n kube-system -l app=fluent-bit-cleanup | grep "cleaned up" | wc -l
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
  -n kube-system get pods -l app=fluent-bit-cleanup --no-headers | wc -lSupprimez le DaemonSet de nettoyage :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
  -n kube-system delete ds fluent-bit-cleanupReprendre stackdriver-log-forwarder:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
  -n kube-system patch daemonset stackdriver-log-forwarder --type json -p='[{"op": "remove", "path": "/spec/template/spec/nodeSelector/non-existing"}]' | 
    
  
    | Journalisation et surveillance | 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16 | stackdriver-log-forwardern'envoie pas de journaux à Cloud Logging
Si vous ne voyez pas les journaux de vos clusters dans Cloud Logging et que l'erreur suivante s'affiche dans vos journaux :
       2023-06-02T10:53:40.444017427Z [2023/06/02 10:53:40] [error] [input chunk] chunk 1-1685703077.747168499.flb would exceed total limit size in plugin stackdriver.0
2023-06-02T10:53:40.444028047Z [2023/06/02 10:53:40] [error] [input chunk] no available chunk
      Il est probable que le taux d'entrée des journaux dépasse la limite de l'agent de journalisation, ce qui empêchestackdriver-log-forwarderd'envoyer les journaux.
      Ce problème se produit dans toutes les versions de Google Distributed Cloud.Solution : Pour résoudre ce problème, vous devez augmenter la limite de ressources de l'agent de journalisation. 
        Ouvrez votre ressource stackdriverpour la modifier :kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system edit stackdriver stackdriverPour augmenter la demande de processeur pour stackdriver-log-forwarder, ajoutez la sectionresourceAttrOverridesuivante au fichier manifestestackdriver:spec:
  resourceAttrOverride:
    stackdriver-log-forwarder/stackdriver-log-forwarder:
      limits:
        cpu: 1200m
        memory: 600Mi
      requests:
        cpu: 600m
        memory: 600MiVotre ressource modifiée doit ressembler à ce qui suit :spec:
  anthosDistribution: on-prem
  clusterLocation: us-west1-a
  clusterName: my-cluster
  enableStackdriverForApplications: true
  gcpServiceAccountSecretName: ...
  optimizedMetrics: true
  portable: true
  projectID: my-project-191923
  proxyConfigSecretName: ...
  resourceAttrOverride:
    stackdriver-log-forwarder/stackdriver-log-forwarder:
      limits:
        cpu: 1200m
        memory: 600Mi
      requests:
        cpu: 600m
        memory: 600MiEnregistrez les modifications et fermez l'éditeur de texte.Pour vérifier que vos modifications ont pris effet, exécutez la commande suivante :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system get daemonset stackdriver-log-forwarder -o yaml \
    | grep "cpu: 1200m"La commande détectecpu: 1200msi vos modifications ont été appliquées. | 
  
    | Sécurité | 1.13 | Le service Kubelet sera temporairement indisponible après NodeReadyIl existe une courte période pendant laquelle le nœud est prêt, mais le certificat du serveur kubelet ne l'est pas. kubectl execetkubectl logsne sont pas disponibles pendant ces dizaines de secondes.
      En effet, il faut du temps pour que le nouvel approbateur de certificat de serveur puisse voir les adresses IP valides mises à jour du nœud. Ce problème n'affecte que le certificat de serveur kubelet et n'aura pas d'incidence sur la planification des pods. | 
  
  
    | Mises à niveau, mises à jour | 1.12 | La mise à niveau partielle du cluster d'administrateur n'empêche pas la mise à niveau ultérieure du cluster d'utilisateur.Échec de la mise à niveau du cluster d'utilisateur : 
.LBKind in body is required (Check the status of OnPremUserCluster 'cl-stg-gdl-gke-onprem-mgmt/cl-stg-gdl' and the logs of pod 'kube-system/onprem-user-cluster-controller' for more detailed debugging information.
 Le cluster d'administrateur n'est pas entièrement mis à niveau et la version de l'état est toujours 1.10. La mise à niveau du cluster d'utilisateur vers la version 1.12 ne sera bloquée par aucune vérification préliminaire et échouera en raison d'un problème d'incompatibilité de version. 
 Solution : Commencez par mettre à niveau le cluster d'administrateur vers la version 1.11, puis mettez à niveau le cluster d'utilisateur vers la version 1.12. | 
  
  
    | Stockage | 1.10.0-1.10.5, 1.11.0-1.11.2, 1.12.0 | L'espace libre est signalé à tort comme insuffisant dans le datastoreÉchec de la commande gkectl diagnose clusteravec : 
Checking VSphere Datastore FreeSpace...FAILURE
    Reason: vCenter datastore: [DATASTORE_NAME] insufficient FreeSpace, requires at least [NUMBER] GB
La validation de l'espace libre du datastore ne doit pas être utilisée pour les pools de nœuds de cluster existants. Elle a été ajoutée par erreur dans gkectl diagnose cluster. 
 Solution : Vous pouvez ignorer le message d'erreur ou la validation à l'aide de --skip-validation-infra. | 
  
    | Opération, mise en réseau | 1.11, 1.12.0-1.12.1 | Il est possible que vous ne puissiez pas ajouter de cluster d'utilisateur si votre cluster d'administrateur est configuré avec un équilibreur de charge MetalLB. Le processus de suppression du cluster d'utilisateur peut se bloquer pour une raison quelconque, ce qui entraîne l'invalidation de la ConfigMap MatalLB. Il ne sera pas possible d'ajouter un cluster d'utilisateur dans cet état. 
 Solution : Vous pouvez 
      forcer la suppression de votre cluster d'utilisateur. | 
  
  
    | Installation, Système d'exploitation | 1.10, 1.11, 1.12, 1.13 | Échec lors de l'utilisation de Container-Optimized OS (COS) pour le cluster d'utilisateurSi osImageTypeutilisecospour le cluster d'administrateur et quegkectl check-configest exécuté après la création du cluster d'administrateur et avant la création du cluster d'utilisateur, l'opération échoue pour les raisons suivantes : 
Failed to create the test VMs: VM failed to get IP addresses on the network.
 La VM de test créée pour le cluster d'utilisateur check-configutilise par défaut le mêmeosImageTypeque le cluster d'administrateur. De plus, la VM de test n'est pas encore compatible avec COS. 
 Solution : Pour éviter la vérification préliminaire lente qui crée la VM de test, utilisez gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config
      USER_CLUSTER_CONFIG --fast. | 
  
    | Journalisation et surveillance | 1.12.0-1.12.1 | Grafana dans le cluster d'administrateur ne peut pas accéder aux clusters d'utilisateurCe problème affecte les clients qui utilisent Grafana dans le cluster d'administrateur pour surveiller les clusters d'utilisateur dans les versions 1.12.0 et 1.12.1 de Google Distributed Cloud. Cela provient d'une incompatibilité des certificats pushprox-client dans les clusters d'utilisateur et de la liste d'autorisation dans le serveur pushprox du cluster d'administrateur.
      Le symptôme est que pushprox-client dans les clusters d'utilisateur affiche des journaux d'erreurs comme suit : 
level=error ts=2022-08-02T13:34:49.41999813Z caller=client.go:166 msg="Error reading request:" err="invalid method \"RBAC:\""
 
 Solution : Afficher la procédure de contournementProcédez comme suit : 
          Réduisez le déploiement monitoring-operator dans l'espace de noms kube-system du cluster d'administrateur.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --namespace kube-system scale deploy monitoring-operator \
    --replicas=0Modifiez le fichier ConfigMap pushprox-server-rbac-proxy-configdans l'espace de noms kube-system du cluster d'administrateur.kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --namespace kube-system edit cm pushprox-server-rbac-proxy-configRecherchez la ligneprincipalspour l'écouteurexternal-pushprox-server-auth-proxyet corrigez leprincipal_namepour tous les clusters d'utilisateur en supprimant la sous-chaînekube-systemdepushprox-client.metrics-consumers.kube-system.cluster..
          La nouvelle configuration devrait ressembler à ce qui suit :
permissions:
- or_rules:
    rules:
    - header: { name: ":path", exact_match: "/poll" }
    - header: { name: ":path", exact_match: "/push" }
principals: [{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.kube-system.cluster.local"}}},{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.kube-system.cluster."}}},{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.cluster."}}}]
Redémarrez le déploiement pushprox-serverdans le cluster d'administrateur et le déploiementpushprox-clientdans les clusters d'utilisateur concernés :kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system rollout restart deploy pushprox-server
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system rollout restart deploy pushprox-clientLes étapes précédentes devraient résoudre le problème. Une fois le cluster mis à niveau vers la version 1.12.2 ou ultérieure (dans laquelle le problème est résolu), augmentez l'échelle de l'opérateur de surveillance kube-system du cluster d'administrateur afin qu'il puisse à nouveau gérer le pipeline.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system scale deploy monitoring-operator --replicas=1 | 
  
  
    | Autre | 1.11.3 | gkectl repair admin-masterne fournit pas le modèle de VM à utiliser pour la récupération.
Échec de la commande gkectl repair admin-masteravec : 
Failed to repair: failed to select the template: no VM templates is available for repairing the admin master (check if the admin cluster version >= 1.4.0 or contact support
 gkectl repair admin-masterne peut pas récupérer le modèle de VM à utiliser pour réparer la VM du plan de contrôle de l'administrateur si le nom de la VM du plan de contrôle de l'administrateur se termine par les caractèrest,m,poul.
 
 Solution : Exécutez à nouveau la commande avec --skip-validation. | 
  
    | Journalisation et surveillance | 1.11, 1.12, 1.13, 1.14, 1.15, 1.16 | Échec de Cloud Audit Logging en raison d'une autorisation refusée
      Cloud Audit Logs nécessite une configuration d'autorisation spéciale qui n'est actuellement effectuée automatiquement pour les clusters d'utilisateur que dans GKE Hub.
      Il est recommandé de disposer d'au moins un cluster d'utilisateur utilisant le même ID de projet et le même compte de service avec le cluster d'administrateur pour Cloud Audit Logs, afin que le cluster d'administrateur dispose des autorisations requises. Toutefois, dans le cas où le cluster d'administrateur utilise un ID de projet ou un compte de service différent de celui d'un cluster d'utilisateur, les journaux d'audit du cluster d'administrateur ne pourront pas être injectés dans Google Cloud. Le symptôme est une série d'erreurs Permission Denieddans le podaudit-proxydu cluster d'administrateur. Solution : Afficher la procédure de contournementPour résoudre ce problème, vous pouvez configurer l'autorisation en interagissant avec la fonctionnalité de hub cloudauditlogging: 
          Commencez par vérifier les comptes de service existants autorisés pour Cloud Audit Logs dans votre projet :
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditloggingSelon la réponse, effectuez l'une des opérations suivantes :
            
              Si vous avez reçu une erreur 404 Not_found, cela signifie qu'aucun compte de service n'a été autorisé pour cet ID de projet. Vous pouvez ajouter un compte de service à la liste d'autorisation en activant la fonctionnalité de hubcloudauditlogging:curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features?feature_id=cloudauditlogging -d \
    '{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":["SERVICE_ACCOUNT_EMAIL"]}}}'Si vous avez reçu une spécification de fonctionnalité contenant
              "lifecycleState": "ENABLED"avec"code":
              "OK"et une liste de comptes de service dansallowlistedServiceAccounts, cela signifie que des comptes de service existants sont autorisés pour ce projet. Vous pouvez utiliser un compte de service de cette liste dans votre cluster ou ajouter un nouveau compte de service à la liste d'autorisation :curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging?update_mask=spec.cloudauditlogging.allowlistedServiceAccounts -d \
    '{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":["SERVICE_ACCOUNT_EMAIL"]}}}'Si vous avez reçu une spécification de fonctionnalité contenant
              "lifecycleState": "ENABLED"avec"code":
              "FAILED", cela signifie que la configuration de l'autorisation a échoué.
              Essayez de résoudre les problèmes dans le champdescriptionde la réponse, ou sauvegardez la liste d'autorisation actuelle, supprimez la fonctionnalité de hub cloudauditlogging, puis réactivez-la en suivant à nouveau l'étape 1 de la présente section. Vous pouvez supprimer la fonctionnalité de hubcloudauditloggingen :curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging Dans les commandes ci-dessus : | 
  
    | Fonctionnement, sécurité | 1.11 | Échec de la vérification des certificats gkectl diagnoseSi votre poste de travail n'a pas accès aux nœuds de calcul du cluster d'utilisateur, il obtiendra les échecs suivants lors de l'exécution de gkectl diagnose: 
Checking user cluster certificates...FAILURE
    Reason: 3 user cluster certificates error(s).
    Unhealthy Resources:
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Si votre poste de travail n'a pas accès aux nœuds de calcul du cluster d'administrateur ou aux nœuds de calcul du cluster, il recevra les échecs suivants lors de l'exécution de gkectl diagnose: 
Checking admin cluster certificates...FAILURE
    Reason: 3 admin cluster certificates error(s).
    Unhealthy Resources:
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
 Solution : Vous pouvez ignorer ces messages. | 
  
  
    | Système d'exploitation | 1.8, 1.9, 1.10, 1.11, 1.12, 1.13 | /var/log/audit/saturer l'espace disque sur les VM
/var/log/audit/est rempli de journaux d'audit. Vous pouvez vérifier l'utilisation du disque en exécutantsudo du -h -d 1 /var/log/audit.
 Certaines commandes gkectlsur le poste de travail administrateur, par exemplegkectl diagnose snapshot, contribuent à l'utilisation de l'espace disque. Depuis Google Distributed Cloud v1.8, l'image Ubuntu est renforcée avec le benchmark CIS de niveau 2. L'une des règles de conformité, "4.1.2.2 S'assurer que les journaux d'audit ne sont pas supprimés automatiquement", garantit le paramètre auditd max_log_file_action = keep_logs. Cela permet de conserver toutes les règles d'audit sur le disque. 
 Solution : Afficher la procédure de contournementPoste de travail administrateur Pour la station de travail administrateur, vous pouvez modifier manuellement les paramètres auditd pour alterner automatiquement les journaux, puis redémarrer le service auditd : sed -i 's/max_log_file_action = keep_logs/max_log_file_action = rotate/g' /etc/audit/auditd.conf
sed -i 's/num_logs = .*/num_logs = 250/g' /etc/audit/auditd.conf
systemctl restart auditd Le paramètre ci-dessus permet d'auditer automatiquement les journaux une fois qu'il a généré plus de 250 fichiers (tous de 8 Mo). Nœuds de cluster Pour les nœuds de cluster, passez à la version 1.11.5+, 1.12.4+, 1.13.2+ ou 1.14+. Si vous ne pouvez pas encore passer à ces versions, appliquez le DaemonSet suivant à votre cluster : apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: change-auditd-log-action
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: change-auditd-log-action
  template:
    metadata:
      labels:
        app: change-auditd-log-action
    spec:
      hostIPC: true
      hostPID: true
      containers:
      - name: update-audit-rule
        image: ubuntu
        command: ["chroot", "/host", "bash", "-c"]
        args:
        - |
          while true; do
            if $(grep -q "max_log_file_action = keep_logs" /etc/audit/auditd.conf); then
              echo "updating auditd max_log_file_action to rotate with a max of 250 files"
              sed -i 's/max_log_file_action = keep_logs/max_log_file_action = rotate/g' /etc/audit/auditd.conf
              sed -i 's/num_logs = .*/num_logs = 250/g' /etc/audit/auditd.conf
              echo "restarting auditd"
              systemctl restart auditd
            else
              echo "auditd setting is expected, skip update"
            fi
            sleep 600
          done
        volumeMounts:
        - name: host
          mountPath: /host
        securityContext:
          privileged: true
      volumes:
      - name: host
        hostPath:
          path: /Notez que cette modification de configuration auditée ne respecte pas la règle de niveau 2 CIS "4.1.2.2 S'assurer que les journaux d'audit ne sont pas supprimés automatiquement". | 
  
  
    | Mise en réseau | 1.10, 1.11.0-1.11.3, 1.12.0-1.12.2, 1.13.0 | L'adresse IP flottante NetworkGatewayGroupest en conflit avec l'adresse du nœud.Les utilisateurs ne peuvent pas créer ni mettre à jour les objets NetworkGatewayGroupen raison de l'erreur de webhook de validation suivante : 
[1] admission webhook "vnetworkgatewaygroup.kb.io" denied the request: NetworkGatewayGroup.networking.gke.io "default" is invalid: [Spec.FloatingIPs: Invalid value: "10.0.0.100": IP address conflicts with node address with name: "my-node-name"
 Dans les versions concernées, le kubelet peut se lier par erreur à une adresse IP flottante attribuée au nœud et la signaler comme adresse de nœud dans node.status.addresses. Le webhook de validation vérifie les adresses IP flottantesNetworkGatewayGrouppar rapport à toutes les adresses IPnode.status.addressesdu cluster et considère cela comme un conflit. 
 Solution : Dans le même cluster où la création ou la mise à jour des objets NetworkGatewayGroupéchoue, désactivez temporairement le webhook de validation ANG et envoyez votre modification : 
        Enregistrez la configuration du webhook pour pouvoir la restaurer à la fin :
kubectl -n kube-system get validatingwebhookconfiguration \
    ang-validating-webhook-configuration -o yaml > webhook-config.yamlModifiez la configuration du webhook :
kubectl -n kube-system edit validatingwebhookconfiguration \
    ang-validating-webhook-configurationSupprimez l'élément vnetworkgatewaygroup.kb.iode la liste de configuration du webhook et fermez-la pour appliquer les modifications.Créez ou modifiez votre objet NetworkGatewayGroup.Appliquez à nouveau la configuration du webhook d'origine :
kubectl -n kube-system apply -f webhook-config.yaml | 
  
    | Installation, mises à niveau, mises à jour | 1.10.0-1.10.2 | Délai avant expiration de la création ou de la mise à niveau du cluster d'administrateurLors d'une tentative de mise à niveau du cluster d'administrateur, la VM du plan de contrôle administrateur peut rester bloquée lors de la création. La VM du plan de contrôle administrateur entre dans une boucle d'attente infinie lors du démarrage, et l'erreur de boucle infinie suivante s'affiche dans le fichier /var/log/cloud-init-output.log: 
+ echo 'waiting network configuration is applied'
waiting network configuration is applied
++ get-public-ip
+++ ip addr show dev ens192 scope global
+++ head -n 1
+++ grep -v 192.168.231.1
+++ grep -Eo 'inet ([0-9]{1,3}\.){3}[0-9]{1,3}'
+++ awk '{print $2}'
++ echo
+ '[' -n '' ']'
+ sleep 1
+ echo 'waiting network configuration is applied'
waiting network configuration is applied
++ get-public-ip
+++ ip addr show dev ens192 scope global
+++ grep -Eo 'inet ([0-9]{1,3}\.){3}[0-9]{1,3}'
+++ awk '{print $2}'
+++ grep -v 192.168.231.1
+++ head -n 1
++ echo
+ '[' -n '' ']'
+ sleep 1
En effet, lorsque Google Distributed Cloud tente d'obtenir l'adresse IP du nœud dans le script de démarrage, il utilise grep -v
      ADMIN_CONTROL_PLANE_VIPpour ignorer l'adresse IP virtuelle du plan de contrôle du cluster d'administrateur, qui peut également être attribuée à la carte d'interface réseau. Toutefois, la commande ignore également toute adresse IP dont le préfixe est celui de l'adresse IP virtuelle du plan de contrôle, ce qui provoque le blocage du script de démarrage. Par exemple, supposons que l'adresse IP virtuelle du plan de contrôle du cluster d'administrateur soit 192.168.1.25. Si l'adresse IP de la VM de plan de contrôle du cluster d'administrateur a le même préfixe (par exemple, 192.168.1.254), la VM de plan de contrôle restera bloquée lors de la création. Ce problème peut également se produire si l'adresse de diffusion a le même préfixe que l'adresse IP virtuelle du plan de contrôle (par exemple, 192.168.1.255). 
 Solution : 
        Si le délai d'expiration de la création du cluster d'administrateur est dû à l'adresse IP de diffusion, exécutez la commande suivante sur la VM du plan de contrôle du cluster d'administrateur :
ip addr add ${ADMIN_CONTROL_PLANE_NODE_IP}/32 dev ens192Cela créera une ligne sans adresse de diffusion et débloquera le processus de démarrage. Une fois le script de démarrage débloqué, supprimez la ligne ajoutée en exécutant la commande suivante :ip addr del ${ADMIN_CONTROL_PLANE_NODE_IP}/32 dev ens192Toutefois, si le délai d'expiration de la création du cluster d'administrateur est dû à l'adresse IP de la VM du plan de contrôle, vous ne pouvez pas débloquer le script de démarrage. Passez à une autre adresse IP, puis recréez ou mettez à niveau vers la version 1.10.3 ou ultérieure. | 
  
    | Système d'exploitation, mises à niveau, mises à jour | 1.10.0-1.10.2 | L'état du cluster d'administrateur utilisant l'image COS sera perdu lors de la mise à niveau du cluster d'administrateur ou de la réparation de son maître.DataDisk ne peut pas être monté correctement sur le nœud maître du cluster d'administrateur lors de l'utilisation de l'image COS. L'état du cluster d'administrateur utilisant l'image COS sera perdu lors de la mise à niveau du cluster d'administrateur ou de la réparation de son maître. (le cluster d'administrateur utilisant l'image COS est une fonctionnalité en preview) 
 Solution : Recréer le cluster d'administrateur avec osImageType défini sur ubuntu_containerd Après avoir créé le cluster d'administrateur avec osImageType défini sur "cos", récupérez la clé SSH du cluster d'administrateur et connectez-vous en SSH au nœud maître de l'administrateur.
      Le résultat df -hcontient/dev/sdb1        98G  209M   93G
      1% /opt/data. Le résultatlsblkcontient-sdb1
      8:17   0  100G  0 part /opt/data | 
  
    | Système d'exploitation | 1.10 | La résolution DNS par systemd-resolved a échoué sur les domaines .localDans Google Distributed Cloud version 1.10.0, les résolutions de noms sur Ubuntu sont acheminées par défaut vers l'écoute locale résolue par systemd sur 127.0.0.53. En effet, sur l'image Ubuntu 20.04 utilisée dans la version 1.10.0,/etc/resolv.confest un lien symbolique vers/run/systemd/resolve/stub-resolv.conf, qui pointe vers la simulation de DNS sur l'hôte local (127.0.0.53). Par conséquent, la résolution de noms DNS localhost refuse de vérifier les serveurs DNS en amont (spécifiés dans /run/systemd/resolve/resolv.conf) pour les noms avec un suffixe.local, à moins que les noms ne soient spécifiés en tant que domaines de recherche. Cela entraîne l'échec des recherches de noms .local. Par exemple, lors du démarrage du nœud,kubeletne parvient pas à extraire les images d'un registre privé portant un suffixe.local. La spécification d'une adresse vCenter avec un suffixe.localne fonctionne pas sur un poste de travail d'administrateur. 
 Solution : Pour les nœuds de cluster, vous pouvez éviter ce problème en incluant les domaines avec le champ searchDomainsForDNSdans le fichier de configuration de votre cluster d'administrateur et dans le fichier de configuration de cluster d'utilisateur. Actuellement, gkectl updatene permet pas encore de mettre à jour le champsearchDomainsForDNS. Par conséquent, si vous n'avez pas configuré ce champ avant la création du cluster, vous devez vous connecter en SSH aux nœuds et contourner la simulation locale résolue par systemd en modifiant le lien symbolique /etc/resolv.confde/run/systemd/resolve/stub-resolv.conf(qui contient la simulation locale127.0.0.53) à/run/systemd/resolve/resolv.conf(qui pointe vers le DNS en amont réel) : sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf Comme pour le poste de travail administrateur, gkeadmne permet pas de spécifier des domaines de recherche. Vous devez donc contourner ce problème avec cette étape manuelle. Cette solution ne persiste pas lors de la recréation des VM. Vous devez appliquer cette solution de contournement à chaque recréation de VM. | 
  
    | Installation, Système d'exploitation | 1.10 | L'adresse IP du pont Docker utilise 172.17.0.1/16au lieu de169.254.123.1/24Google Distributed Cloud spécifie un sous-réseau dédié pour l'adresse IP de la liaison Docker qui utilise --bip=169.254.123.1/24afin de ne pas réserver le sous-réseau par défaut172.17.0.1/16. Toutefois, dans la version 1.10.0, l'image d'OS Ubuntu souffre d'un bug qui empêche la prise en compte de la configuration Docker personnalisée. En conséquence, Docker sélectionne le paramètre 172.17.0.1/16par défaut comme sous-réseau d'adresse IP de liaison. Cela peut entraîner un conflit d'adresses IP si vous avez déjà une charge de travail en cours d'exécution dans cette plage d'adresses IP. 
 Solution : Pour contourner le problème, renommez le fichier de configuration systemd suivant pour dockerd, puis redémarrez le service : sudo mv /etc/systemd/system/docker.service.d/50-cloudimg-settings.cfg \
    /etc/systemd/system/docker.service.d/50-cloudimg-settings.conf
sudo systemctl daemon-reload
sudo systemctl restart dockerVérifiez que Docker sélectionne l'adresse IP de liaison correcte : ip a | grep docker0 Cette solution ne persiste pas lors de la recréation des VM. Vous devez appliquer cette solution de contournement à chaque recréation de VM. | 
  
  
    | Mises à niveau, mises à jour | 1.11 | Mise à niveau vers la version 1.11 bloquée par la préparation de StackdriverDans Google Distributed Cloud version 1.11.0, la définition des ressources personnalisées liées à la journalisation et à la surveillance a été modifiée : 
        Le nom du groupe de la ressource personnalisée stackdriverest passé deaddons.sigs.k8s.ioàaddons.gke.io.Le nom du groupe des ressources personnalisées monitoringetmetricsserverest passé deaddons.k8s.ioàaddons.gke.io.Les spécifications des ressources ci-dessus commencent à être validées par rapport à leur schéma. En particulier, les spécifications resourceAttrOverride et storageSizeOverride de la ressource personnalisée stackdriverdoivent avoir un type de chaîne dans les valeurs des demandes et limites de processeur, de mémoire et de taille de stockage. Les modifications apportées aux noms de groupes visent à se conformer aux mises à jour de CustomResourceDefinition dans Kubernetes 1.22. Aucune action n'est requise si vous n'avez pas de logique supplémentaire qui s'applique aux ressources personnalisées concernées ou les modifie. Le processus de mise à niveau de Google Distributed Cloud se chargera de la migration des ressources concernées et conservera leurs spécifications existantes après le changement de nom du groupe. Toutefois, si vous exécutez une logique qui applique ou modifie les ressources concernées, vous devez y accorder une attention particulière. Tout d'abord, ils doivent être référencés avec le nouveau nom de groupe dans votre fichier manifeste. Exemple : apiVersion: addons.gke.io/v1alpha1  ## instead of `addons.sigs.k8s.io/v1alpha1`
kind: Stackdriver Deuxièmement, assurez-vous que les valeurs de spécification resourceAttrOverrideetstorageSizeOverridesont de type chaîne. Exemple : spec:
  resourceAttrOverride:
    stackdriver-log-forwarder/stackdriver-log-forwarder
      limits:
        cpu: 1000m # or "1"
        # cpu: 1 # integer value like this would not work
        memory: 3000MiDans le cas contraire, les applications et les modifications ne prendront pas effet et pourront entraîner un état inattendu dans les composants de journalisation et de surveillance. Voici quelques symptômes potentiels : 
        Journaux d'erreurs de réconciliation dans onprem-user-cluster-controller, par exemple :potential reconciliation error: Apply bundle components failed, requeue after 10s, error: failed to apply addon components: failed to apply bundle objects from stackdriver-operator-addon 1.11.2-gke.53 to cluster my-cluster: failed to create typed live object: .spec.resourceAttrOverride.stackdriver-log-forwarder/stackdriver-log-forwarder.limits.cpu: expected string, got &value.valueUnstructured{Value:1}Échec dans kubectl edit stackdriver stackdriver, par exemple :Error from server (NotFound): stackdrivers.addons.gke.io "stackdriver" not found Si vous rencontrez les erreurs ci-dessus, cela signifie qu'un type non compatible dans la spécification CR de Stackdriver était déjà présent avant la mise à niveau. Pour contourner ce problème, vous pouvez modifier manuellement le CR Stackdriver sous l'ancien nom de groupe kubectl edit stackdrivers.addons.sigs.k8s.io stackdriveret procéder comme suit : 
        Reprenez ou redémarrez ensuite le processus de mise à niveau.Modifiez les demandes et les limites de ressources pour qu'elles soient de type chaîne.Supprimez toute annotation addons.gke.io/migrated-and-deprecated: true, le cas échéant. | 
  
  
    | Système d'exploitation | 1.7 et versions ultérieures | Les VM COS n'affichent aucune adresse IP lorsque les VM sont déplacées en raison d'un arrêt non progressif de l'hôte Chaque fois qu'un serveur ESXi présente un défaut et que la fonction vCenter HA a été activée pour ce serveur, toutes les VM du serveur ESXi défectueux déclenchent le mécanisme vMotion et sont déplacées vers un autre serveur ESXi normal. Les VM COS migrées perdraient leurs adresses IP. Solution : Redémarrer la VM | 
  
  
    | Mise en réseau | toutes les versions antérieures à 1.14.7, 1.15.0-1.15.3, 1.16.0 | La réponse GARP envoyée par Seesaw ne définit pas l'adresse IP cibleLe GARP (Gratuitous ARP) périodique envoyé par Seesaw toutes les 20 secondes ne définit pas l'adresse IP cible dans l'en-tête ARP. Il est possible que certains réseaux n'acceptent pas ces paquets (comme Cisco ACI). Cela peut entraîner une indisponibilité plus longue du service après la résolution d'un split brain (en raison de la perte de paquets VRRP).  Solution : Déclenchez un basculement Seesaw en exécutant sudo seesaw -c failoversur l'une des VM Seesaw. Cela devrait restaurer le trafic. | 
  
  
    | Système d'exploitation | 1.16, 1.28.0-1.28.200 | Kubelet est inondé de journaux indiquant que "/etc/kubernetes/manifests" n'existe pas sur les nœuds de calcul."staticPodPath" a été défini par erreur pour les nœuds de calcul Solution : Créez manuellement le dossier "/etc/kubernetes/manifests". |