update |
1,15, 1,16, 1,28 |
Les dépendances de trident Netapp interfèrent avec le pilote CSI vSphere
L'installation de multipathd sur les nœuds du cluster interfère avec le pilote CSI vSphere, ce qui empêche les charges de travail de l'utilisateur de démarrer.
Solution :
|
Mises à jour |
1,15, 1,16 |
Le webhook du cluster d'administrateur peut bloquer les mises à jour lorsque vous ajoutez les configurations requises
Si certaines configurations requises sont vides dans le cluster d'administrateur parce que les validations ont été ignorées, leur ajout risque d'être bloqué par le webhook du cluster d'administrateur. Par exemple, si le champ gkeConnect n'a pas été défini dans un cluster d'administrateur existant, le message d'erreur suivant peut s'afficher lorsque vous l'ajoutez à l'aide de la commande gkectl update admin :
admission webhook "vonpremadmincluster.onprem.cluster.gke.io" denied the request: connect: Required value: GKE connect is required for user clusters
Solution :
-
Pour les clusters d'administrateur de la version 1.15, exécutez la commande
gkectl update admin avec 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 de la version 1.16, exécutez les commandes
gkectl update admin avec 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 |
La valeur par défaut du champ controlPlaneNodePort est 30968 lorsque la spécification manualLB est vide
Si vous utilisez un équilibreur de charge manuel (loadBalancer.kind est défini sur "ManualLB" ), vous ne devriez pas avoir besoin de configurer la section loadBalancer.manualLB dans le fichier de configuration pour un cluster d'administrateur haute disponibilité dans les versions 1.16 et ultérieures. Toutefois, lorsque cette section est vide, GKE sur VMware attribue des valeurs par défaut à tous les NodePorts, y compris manualLB.controlPlaneNodePort , ce qui entraîne l'échec de la création du cluster et 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: 0 dans 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 introuvable dans l'image de l'OS Ubuntu
nfs-common est manquant dans l'image de l'OS Ubuntu, ce qui peut causer des problèmes pour les clients utilisant des pilotes dépendants NFS tels que NetApp.
Si, après la mise à niveau vers la version 1.28, le journal contient une entrée semblable à la suivante, vous êtes concerné par ce problème:
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ègle de stockage" n'est pas renseigné dans le modèle de configuration du cluster d'administrateur
SPBM dans les clusters d'administrateur est compatible avec les versions 1.28.0 et ultérieures. Toutefois, le champ vCenter.storagePolicyName est manquant dans le modèle de fichier de configuration.
Solution :
Ajoutez le champ "vCenter.storagePolicyName" à votre fichier de configuration de 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 des métadonnées ne pourra pas accéder à cette API sous VPC-SC. Par conséquent, les libellés des métadonnées de métriques seront manquants.
Solution :
Dans l'espace de noms "kube-system", la RS "stackdriver" définit le champ "featureGates.disableExperimentalMetadataAgent" sur "true" en exécutant la commande
`kubectl -n kube-system patch stackdriver stackdriver -p '{"spec":{"featureGates":{"disableExperimentalMetadataAgent":true}}}'`
puis exécutez
`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 et mises à jour |
1.15.0-1.15.7, 1.16.0-1.16.4, 1.28.0 |
Le contrôleur clusterapi-controller peut planter lorsque le cluster d'administrateur et tout cluster d'utilisateur sur lequel ControlPlane V2 est activé utilisent des identifiants vSphere différents
Lorsqu'un cluster d'administrateur et tout cluster d'utilisateur sur lequel ControlPlane V2 est activé utilisent différents identifiants vSphere, par exemple après la mise à jour des identifiants vSphere pour le cluster d'administrateur, clusterapi-controller peut ne pas se connecter à vCenter après le redémarrage. Affichez le journal du contrôleur clusterapi-controller en cours d'exécution 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 KUBECONFIG
Si le journal contient une entrée semblable à la suivante, 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 sur lesquels Controlplane V2 est activé utilisent les mêmes identifiants vSphere.
|
Journalisation et surveillance |
1.14 |
Nombre élevé de requêtes gRPC ayant échoué dans le gestionnaire d'alertes Prometheus d'etcd
Prometheus 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 s'il s'agit d'un faux positif pouvant être ignoré, procédez comme suit:
- Comparez la métrique
grpc_server_handled_total brute par rapport à la valeur grpc_method indiquée dans le message d'alerte. Dans cet exemple, recherchez Watch dans le libellé grpc_code .
Vous pouvez vérifier cette métrique à l'aide de Cloud Monitoring à l'aide de la requête MQL suivante:
fetch
k8s_container | metric 'kubernetes.io/anthos/grpc_server_handled_total' | align rate(1m) | every 1m
- Une alerte sur tous les codes autres que
OK peut être ignorée en toute sécurité si 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 alertes de faux positifs, consultez les options suivantes:
- Mettez l'alerte sous silence dans l'interface utilisateur du gestionnaire d'alertes.
- Si vous ne pouvez pas couper le son de l'alerte, procédez comme suit pour supprimer les faux positifs :
- Réduisez l'opérateur de surveillance à
0 instances répliquées pour que les modifications puissent persister.
- Modifiez le ConfigMap
prometheus-config et ajoutez grpc_method!="Watch" à la configuration de l'alerte etcdHighNumberOfFailedGRPCRequests , comme indiqué dans l'exemple suivant :
- Version d'origine:
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code!="OK",job=~".*etcd.*"}[5m])
- Modification:
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code=~"Unknown|FailedPrecondition|ResourceExhausted|Internal|Unavailable|DataLoss|DeadlineExceeded",grpc_method!="Watch",job=~".*etcd.*"}[5m])
Remplacez le code CLUSTER_NAME suivant par le nom de votre cluster.
- Redémarrez Prometheus et Alertmanager Statefulset pour récupérer la nouvelle configuration.
- Si le code tombe dans l'un des cas problématiques, vérifiez le journal etcd et le journal
kube-apiserver pour effectuer d'autres débogages.
|
Mise en réseau |
1.16.0-1.16.2, 1.28.0 |
Les connexions NAT de sortie à longue durée de vie sont supprimées
Les connexions NAT de sortie peuvent être abandonnées après 5 à 10 minutes après l'établissement d'une connexion en l'absence de trafic.
Comme conntrack n'a d'importance que pour le trafic 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é destination transmet quelque chose. Si le pod de sortie NAT instancie toujours la messagerie, ce problème ne sera pas visible.
Ce problème est dû au fait que la récupération de mémoire anetd supprime par inadvertance les entrées conntrack qui, selon le daemon, ne sont pas utilisées.
Un correctif en amont a été récemment intégré à Anetd pour corriger ce comportement.
Solution :
Il n'existe aucune solution simple, et nous n'avons rencontré aucun problème lié à ce comportement dans la version 1.16. Si vous remarquez que des connexions de longue durée ont été abandonnées en raison de ce problème, vous pouvez contourner ce problème en utilisant une charge de travail sur le même nœud que l'adresse IP de sortie ou en envoyant des messages de manière cohérente sur la connexion TCP.
|
Opération |
1,14 ; 1,15 ; 1,16 |
Le signataire de la requête de signature de certificat ignore spec.expirationSeconds lors de la signature des certificats
Si vous créez une requête CertificateSigningRequest (CSR) avec expirationSeconds défini, expirationSeconds est ignoré.
Solution :
Si vous êtes concerné par ce problème, vous pouvez mettre à jour votre cluster d'utilisateur en ajoutant disableNodeIDVerificationCSRSigning: true dans le fichier de configuration du cluster d'utilisateur et en exécutant la commande gkectl update cluster pour mettre à jour le cluster avec cette configuration.
|
Mise en réseau, mises à niveau et mises à jour |
1.16.0-1.16.3 |
Échec de validation de l'équilibreur de charge du cluster d'utilisateur pour disable_bundled_ingress
Si vous essayez de désactiver l'entrée groupée pour un cluster existant, la commande gkectl update cluster échoue et renvoie une erreur semblable à l'exemple suivant:
[FAILURE] Config: ingress IP is required in user cluster spec
Cette erreur se produit, car gkectl recherche 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éliminaire gkectl échoue lorsque disableBundledIngress est défini sur true .
Solution :
Utilisez le paramètre --skip-validation-load-balancer lorsque vous mettez à jour le cluster, comme illustré 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 et mises à jour |
1.13, 1.14, 1.15.0-1.15.6 |
Les mises à jour du cluster d'administrateur échouent après la rotation de l'autorité de certification
Si vous effectuez une rotation des certificats d'autorité de certification du cluster d'administrateur, les tentatives ultérieures d'exécution de la commande gkectl update admin échoueront.
L'erreur renvoyée est semblable à celle-ci:
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'option --disable-update-from-checkpoint avec la commande gkectl update admin :
gkectl update admin --config ADMIN_CONFIG_file \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--disable-update-from-checkpoint
Lorsque vous utilisez l'option --disable-update-from-checkpoint , la commande "update" n'utilise pas le fichier de point de contrôle comme source fiable 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 pod
Lors des vérifications préliminaires, la vérification de validation de la charge de travail CSI installe un pod dans l'espace de noms default . Le pod de charge de travail CSI vérifie que le pilote CSI vSphere est installé et peut effectuer un provisionnement dynamique du volume. Si ce pod ne démarre pas, la vérification de validation de la charge de travail CSI échoue.
Des 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 sur lesquels des webhooks d'admission sont installés, le pod ne démarre pas.
- Si Anthos 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 voir si l'échec est dû à un manque d'ensemble de ressources de pod, exécutez la commande suivante pour vérifier l'état de la tâche anthos-csi-workload-writer-<run-id> :
kubectl describe job anthos-csi-workload-writer-<run-id>
Si les limites de ressources ne sont pas définies correctement pour le pod de charge de travail CSI, l'état de la tâche 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 étiquettes de l'espace de noms et exécutez la commande suivante pour supprimer le libellé commençant par istio.io/rev :
kubectl label namespace default istio.io/rev-
Si le pod est mal configuré, vérifiez manuellement que le provisionnement de volume dynamique avec le pilote CSI vSphere fonctionne:
- Créez une PVC qui utilise la StorageClass
standard-rwo .
- Créer un pod qui utilise le PVC
- Vérifiez que le pod peut lire et écrire des données sur le volume.
- Après avoir vérifié qu'elles fonctionnent correctement, retirez le pod et le PVC.
Si le provisionnement de volume dynamique avec le pilote CSI vSphere fonctionne, exécutez gkectl diagnose ou gkectl upgrade avec l'option --skip-validation-csi-workload pour ignorer la vérification de la charge de travail CSI.
|
Opération |
1.16.0-1.16.2 |
Expiration du délai de mise à jour du cluster d'utilisateur lorsque la version du cluster d'administrateur est 1.15
Lorsque vous êtes connecté à un
poste de travail administrateur géré par l'utilisateur, la commande gkectl update cluster peut expirer et échouer à mettre à jour le cluster d'utilisateur. Cela se produit si la version du cluster d'administrateur est 1.15 et que vous exécutez gkectl update admin avant gkectl update cluster .
Lorsque cet échec se produit, 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, l'élément validation-controller qui 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 est bloquée jusqu'à ce que le délai avant 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 cluster pour mettre à jour le cluster d'utilisateur.
|
Opération |
1.16.0-1.16.2 |
Expirations de délai lors de la création du cluster d'utilisateur lorsque la version du cluster d'administrateur est 1.15
Lorsque vous êtes connecté à un
poste de travail administrateur géré par l'utilisateur, la commande gkectl create cluster peut 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 le validation-controller a été ajouté dans la version 1.16, le validation-controller chargé de déclencher les vérifications préliminaires est manquant lors de l'utilisation du cluster d'administrateur 1.15. Par conséquent, lorsque vous essayez de créer un cluster d'utilisateur, les vérifications préliminaires sont bloquées jusqu'à ce que le délai avant expiration 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 cluster pour créer le cluster d'utilisateur.
|
Mises à niveau et 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 complémentaires 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 , cloudAuditLogging ou gkeOnPremAPI lors de la mise à jour d'un cluster d'administrateur, l'opération peut être refusée par le webhook de 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 d'un cluster d'administrateur nécessite que onprem-admin-cluster-controller rapproche le cluster d'administrateur dans un cluster de genre. Lorsque l'état du cluster d'administrateur est restauré dans le cluster du genre, le webhook du cluster d'administrateur ne peut pas déterminer si l'objet OnPremAdminCluster est destiné à la création d'un cluster d'administrateur ni à reprendre les opérations d'une mise à jour ou d'une mise à niveau. Certaines validations de création uniquement sont appelées en cas de mise à jour et de mise à niveau inattendues.
Solution :
Ajoutez l'annotation onprem.cluster.gke.io/skip-project-location-sameness-validation: true à l'objet OnPremAdminCluster :
- Modifiez la ressource de cluster
onpremadminclusters :
kubectl edit onpremadminclusters ADMIN_CLUSTER_NAME -n kube-system –kubeconfig ADMIN_CLUSTER_KUBECONFIG
Remplacez 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: true et enregistrez la ressource personnalisée.
- Selon le type de cluster d'administrateur, effectuez l'une des opérations suivantes :
- Pour les clusters d'administrateur standards avec un fichier de point de contrôle:ajoutez le paramètre
disable-update-from-checkpoint dans la commande de mise à jour ou le paramètre "disable-upgrade-from-checkpoint" dans la commande de mise à niveau. Ces paramètres ne seront nécessaires que la prochaine fois que vous exécuterez la commande update ou upgrade :
-
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-checkpoint
- Pour les clusters d'administrateur haute disponibilité ou le fichier de point de contrôle désactivé:mettez à jour ou mettez à niveau le cluster d'administrateur comme d'habitude. Aucun paramètre supplémentaire n'est nécessaire pour les commandes "update" ou "upgrade".
|
Opération |
1.16.0-1.16.2 |
La suppression du cluster d'utilisateur échoue lors de l'utilisation d'un poste de travail administrateur géré par l'utilisateur
Lorsque vous êtes connecté à un
poste de travail administrateur géré par l'utilisateur, la commande gkectl delete cluster peut expirer et échouer à supprimer le cluster d'utilisateur. Cela se produit si vous avez d'abord exécuté gkectl sur le poste de travail géré par l'utilisateur pour créer, mettre à jour ou mettre à niveau le cluster d'utilisateur. Dans ce cas, l'erreur suivante s'affiche lorsque vous tentez 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 sa 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 lors de 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 Validation:
kubectl --kubeconfig ADMIN_KUBECONFIG get validations \
-n USER_CLUSTER_NAME-gke-onprem-mgmt
-
Pour chaque objet Validation, exécutez la commande suivante pour 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, ces objets sont supprimés et l'opération de suppression du cluster d'utilisateur s'effectue 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 le serveur externe
Si 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 atteindre aucun service externe. Si les pods sont situés sur le même hôte, la connexion à l'application ou au service externe aboutit.
Ce problème est dû à la suppression des paquets VXLAN par vSphere lorsque l'agrégation de tunnel est activée. Il existe un problème connu avec NSX et VMware qui n'envoie le trafic agrégé que sur les ports VXLAN connus (4789).
Solution :
Remplacez le port VXLAN utilisé par Cilium par 4789 :
- Modifiez le ConfigMap
cilium-config :
kubectl edit cm -n kube-system cilium-config --kubeconfig USER_CLUSTER_KUBECONFIG
- Ajoutez le code suivant au ConfigMap
cilium-config :
tunnel-port: 4789
- Redémarrez le DaemonSet anetd:
kubectl rollout restart ds anetd -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG
Cette solution est annulée à chaque mise à niveau du cluster. Vous devez le reconfigurer après chaque mise à niveau. VMware doit résoudre son problème dans vSphere pour obtenir un correctif permanent.
|
Mises à niveau |
1.15.0-1.15.4 |
Échec de la mise à niveau d'un cluster d'administrateur avec le chiffrement des secrets toujours activé 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 non-concordance entre la clé de chiffrement générée par le contrôleur et la clé persistante sur le disque de données principal de l'administrateur. La sortie de gkectl upgrade
admin contient 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
Solution
Si vous disposez d'une sauvegarde du cluster d'administrateur, procédez comme suit pour contourner l'échec de la mise à niveau:
-
Désactivez
secretsEncryption dans 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
-
Lorsque la nouvelle VM maîtresse administrateur est créée, connectez-vous en SSH à la VM maîtresse administrateur et remplacez la nouvelle clé sur le disque de données par l'ancienne clé de la sauvegarde. La clé se trouve à l'emplacement
/opt/data/gke-k8s-kms-plugin/generatedkeys du maître administrateur.
-
Mettez à jour le fichier manifeste de pod statique kms-plugin.yaml dans
/etc/kubernetes/manifests pour mettre à jour la valeur --kek-id afin qu'elle corresponde au champ kid de la clé de chiffrement d'origine.
-
Redémarrez le pod statique kms-plugin en déplaçant le fichier
/etc/kubernetes/manifests/kms-plugin.yaml vers un autre répertoire, puis en le redémarrant.
-
Reprenez la mise à niveau administrateur en exécutant à nouveau
gkectl upgrade admin .
Éviter l'échec de la mise à niveau
Si vous n'avez pas encore effectué la mise à niveau, 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
secretsEncryption dans 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
- Mettre à 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 en bloc modifié (CBT, Changed Block Tracking)
GKE sur VMware n'est pas compatible avec le suivi en bloc modifié (CBT, Changed Block Tracking) 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 qui exécute GKE sur VMware. Pour en savoir plus, consultez l'article de la base de connaissances de VMware.
Solution :
Ne sauvegardez pas les VM GKE sur VMware, car les logiciels de sauvegarde tiers peuvent entraîner l'activation de 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 appliquée aux mises à jour ou aux mises à niveau.
Si vous disposez déjà de disques sur lesquels la CBT est activée, suivez la procédure de résolution de l'article de la base de connaissances de VMware pour la désactiver sur le disque de première classe.
|
Stockage |
1,14 ; 1,15 ; 1,16 |
Corruption des données sur NFSv3 lorsque des ajouts parallèles à un fichier partagé sont effectués à partir de plusieurs hôtes
Si vous utilisez des tableaux de stockage Nutanix pour fournir des partages NFSv3 à vos hôtes, il est possible que vous rencontriez une corruption des données ou que les pods ne puissent pas s'exécuter correctement. Ce problème est dû à un problème de compatibilité connu entre certaines versions de VMware et Nutanix. Pour en savoir plus, consultez l'article associé de la base de connaissances sur VMware.
Solution :
L'article de la base de connaissances VMware est obsolète, car il n'existe pas de 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 |
Non-concordance des versions entre le kubelet et le plan de contrôle Kubernetes
Pour certaines versions de GKE sur VMware, le kubelet exécuté sur les nœuds utilise une version différente de celle du plan de contrôle de Kubernetes. Ce problème ne correspond pas, car le binaire du kubelet préchargé sur l'image de l'OS utilise une version différente.
Le tableau suivant répertorie les incohérences de versions identifiées:
Version de GKE sur VMware |
Version du kubelet |
Version de Kubernetes |
1.13.10 |
version 1.24.11-gke.1200 |
version 1.24.14-gke.2100 |
1.14.6 |
v1.25.8-gke.1500 |
version 1.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 du correctif Kubernetes et aucun problème n'a été causé par ce décalage de version.
|
Mises à niveau et 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 de l'autorité de certification supérieure à 1
Lorsqu'un cluster d'administrateur dispose d'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 de gkectl contient le message d'erreur suivant:
CAVersion must start from 1
Solution :
-
Réduisez le déploiement
auto-resize-controller dans 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 dans auto-resize-controller .
kubectl scale deployment auto-resize-controller -n kube-system --replicas=0 --kubeconfig KUBECONFIG
-
Exécutez les commandes
gkectl avec 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 du cluster V2 avec plan de contrôle standard est bloquée jusqu'à expiration du délai d'inactivité
Lorsqu'un cluster standard V2 de plan de contrôle standard est supprimé, il est bloqué au moment de la suppression du nœud jusqu'à ce qu'il expire.
Solution :
Si le cluster contient un StatefulSet contenant des données critiques, contactez le service client Cloud pour résoudre ce problème.
Sinon, procédez comme suit:
|
Stockage |
1.15.0+, 1.16.0+ |
Après la mise à niveau vers la version 1.15 ou ultérieure, des tâches constantes de rattachement de volume CNS apparaissent chaque minute pour les PVC/PV in-tree
Lorsqu'un cluster contient des volumes persistants vSphere "in-tree" (par exemple, des PVC créées avec la StorageClass standard ), vous constaterez que les tâches com.vmware.cns.tasks.attachvolume sont déclenchées toutes les minutes depuis vCenter.
Solution :
Modifiez le configMap de la fonctionnalité CSI vSphere 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 vSphere CSI:
kubectl rollout restart vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
|
Stockage |
1.16.0 |
Faux avertissements concernant des PVC
Lorsqu'un cluster contient des volumes persistants vSphere intree, les commandes gkectl diagnose et gkectl upgrade peuvent générer de faux avertissements sur leurs revendications 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 comportant l'avertissement ci-dessus:
kubectl get pvc PVC_NAME -n PVC_NAMESPACE -oyaml --kubeconfig KUBECONFIG
Si le champ annotations du 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 et 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 la clé de compte de service d'accès au composant et les clés de compte de service Logging-monitoring (ou Connect-register) ont expiré, lorsque vous effectuez une rotation des 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 effectuer une rotation de la clé du compte de service d'accès au composant. 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 au composant.
Si la mise à jour échoue toujours, contactez le service client Cloud pour résoudre ce problème.
|
Mises à niveau |
1.16.0-1.16.5 |
1.15 La machine maîtresse de l'utilisateur rencontre une recréation inattendue lorsque le contrôleur de cluster d'utilisateur est mis à niveau vers la version 1.16.
Lors d'une mise à niveau d'un cluster d'utilisateur, après la mise à niveau vers la version 1.16 du contrôleur, si d'autres clusters d'utilisateur 1.15 sont gérés par le même cluster d'administrateur, leur machine maître d'utilisateur peut être recréée de manière inattendue.
Le contrôleur de cluster d'utilisateur 1.16 présente un bug qui peut déclencher la recréation de la machine maîtresse de l'utilisateur 1.15.
La solution à suivre dépend de la manière dont vous rencontrez ce problème.
Solution 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 réexécution est la suivante:
onprem.cluster.gke.io/server-side-preflight-rerun: true
- Surveillez la progression de la mise à niveau en vérifiant le champ
status de OnPremUserCluster.
Solution de contournement lors de la mise à niveau du 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.info avec le contenu suivant. Ainsi, les vérifications préliminaires s'exécutent localement sur votre poste de travail administrateur plutôt que sur le serveur.
gke_on_prem_version: GKE_ON_PREM_VERSION
Exemple :
gke_on_prem_version: 1.16.0-gke.669
- Exécutez à nouveau 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 blocs 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 blocs d'adresses IP, la vérification préliminaire échoue avec le message d'erreur suivant:
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.`
La vérification préliminaire présente un bug qui suppose que le nom d'hôte est vide comme doublon.
Solution :
Option 1: Utilisez une version avec le correctif.
Option 2: contournez cette vérification préliminaire en ajoutant l'option --skip-validation-net-config .
Option 3: Spécifiez un nom d'hôte unique pour chaque adresse IP dans le fichier de blocs d'adresses IP.
|
Mises à niveau et mises à jour |
1.16.0 |
Échec de la création du nœud du plan de contrôle
Lors de la mise à niveau ou de la mise à jour d'un cluster d'administrateur, une condition de concurrence peut amener le gestionnaire de contrôleurs cloud vSphere à supprimer de manière inattendue un nouveau nœud de plan de contrôle. Cela entraîne le blocage du contrôleur clusterapi-controller dans l'attente de la création du nœud, voire l'expiration de la mise à niveau/mise à jour. Dans ce cas, le résultat de la commande gkectl upgrade/update est semblable à 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 problème, exécutez la commande ci-dessous afin d'obtenir le journal du gestionnaire de contrôleurs 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 défaillante pour recréer l'objet nœud supprimé.
-
Connectez-vous en SSH à chaque nœud de plan de contrôle, puis redémarrez le pod statique du gestionnaire de contrôleurs cloud vSphere:
sudo crictl ps | grep vsphere-cloud-controller-manager | awk '{print $1}'
sudo crictl stop PREVIOUS_COMMAND_OUTPUT
-
Réexécutez la commande upgrade/update.
|
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 cluster
La mise à niveau d'un cluster 1.15 ou la création d'un cluster 1.16 avec des adresses IP statiques échoue s'il existe des noms d'hôte en double dans le même centre de données. Cet échec se produit, car le gestionnaire de contrôleurs cloud vSphere ne parvient pas à ajouter d'adresse IP externe et d'ID de fournisseur dans l'objet Nœud. Cela entraîne l'expiration du délai de mise à niveau/création du cluster.
Pour identifier le problème, récupérez les journaux de pod du gestionnaire de contrôleurs cloud vSphere pour le cluster. La commande à utiliser 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 (kubeception):
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: (Controlplane V2):
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ésultat:
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 à adopter dépend de l'opération ayant échoué.
Solution pour les mises à niveau:
Corrigez les problèmes pour le type de cluster applicable.
- Cluster d'utilisateur :
-
Mettez à jour le nom d'hôte de la machine concernée dans user-ip-block.yaml avec un nom unique et déclenchez une mise à jour forcée:
gkectl update cluster --kubeconfig ADMIN_KUBECONFIG --config NEW_USER_CLUSTER_CONFIG --force
-
Réexécuter
gkectl upgrade cluster
- Cluster d'administrateur :
- Remplacez le nom d'hôte de la machine concernée dans admin-ip-block.yaml par un nom unique et 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 standard et que vous constatez que la VM maître administrateur utilise un nom d'hôte en double, vous devez également:
Obtenir le nom de la machine maîtresse administrateur
kubectl get machine --kubeconfig ADMIN_KUBECONFIG -owide -A
Mettre à jour l'objet machine maître administrateur
Remarque:Le champ NEW_ADMIN_MASTER_HOSTNAME doit être identique à celui que vous avez défini dans le fichier 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 machine maître 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}'
- Réexécutez 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:
Corrigez les problèmes pour le type de cluster applicable.
|
Opération |
1.16.0, 1.16.1, 1.16.2, 1.16.3 |
$ et ` ne sont pas compatibles avec le nom d'utilisateur ou le mot de passe vSphere
Les opérations suivantes échouent lorsque le nom d'utilisateur ou le mot de passe vSphere contient $ ou ` :
- Mettre à niveau un cluster d'utilisateur 1.15 avec Plan de contrôle V2 activé vers la version 1.16
- Mettre à niveau un cluster d'administrateur à haute disponibilité 1.15 vers la version 1.16
- Créer un cluster d'utilisateur 1.16 avec le plan de contrôle V2 activé
- Créer un cluster d'administrateur haute disponibilité 1.16
Utilisez une version 1.16.4 ou ultérieure de GKE sur VMware avec le correctif ou appliquez la solution de contournement ci-dessous. La solution à adopter dépend de l'opération ayant échoué.
Solution 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éclencher 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.
- Corrigez les problèmes pour le type de cluster applicable.
|
Stockage |
1.11+, 1.12+, 1.13+, 1.14+, 1.15+, 1.16 |
Échec de la création du PVC après la recréation d'un nœud portant le même nom
Lorsqu'un nœud est supprimé, puis recréé avec le même nom de nœud, il est possible qu'une création ultérieure de PersistentVolumeClaim (PVC) échoue et génère une erreur semblable à celle-ci:
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 vSphere CSI ne supprime pas de machine supprimée de son cache.
Solution :
Redémarrez les pods du contrôleur vSphere CSI:
kubectl rollout restart vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
|
Opération |
1.16.0 |
gkectl Repair admin-master renvoie une erreur kubeconfig unmarshall
Lorsque vous exécutez la commande gkectl repair admin-master sur un cluster d'administrateur haute disponibilité, gkectl renvoie 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'option --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, procédez comme suit:
- Accédez à la page Hôtes et clusters du client vSphere.
- Cliquez sur Modèles de VM, puis filtrez par nom de cluster d'administrateur.
Les trois modèles de VM du cluster d'administrateur doivent s'afficher.
- Copiez le nom de 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 insuffisant
Si vous utilisez Seesaw comme type d'équilibreur de charge pour votre cluster et que vous constatez qu'une VM Seesaw est arrêtée ou ne parvient pas à démarrer, 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 le fluent-bit exécuté sur la VM Seesaw n'est pas configuré avec une rotation des journaux correcte.
Solution :
Recherchez les fichiers journaux les plus volumineux à l'aide de du -sh -- /var/lib/docker/containers/* | sort -rh . Nettoyez le fichier journal avec la plus grande taille et redémarrez la VM.
Remarque:Si la VM est totalement inaccessible, associez le disque à une VM opérationnelle (par exemple, un poste de travail administrateur), supprimez le fichier du disque associé, puis réassociez le disque à la VM Seesaw d'origine.
Pour éviter que le 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=5 à la commande Docker, puis exécutez systemctl restart docker.fluent-bit.service .
|
Opération |
1.13, 1.14.0-1.14.6, 1.15 |
Erreur de clé publique SSH d'administrateur après la mise à niveau ou la mise à jour du cluster d'administrateur
Lorsque vous essayez de mettre à niveau (gkectl upgrade admin ) ou de mettre à jour (gkectl update admin ) un cluster d'administrateur non haute disponibilité avec un point de contrôle activé, la mise à niveau ou la mise à jour peut échouer avec des erreurs telles que:
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 GKE sur VMware avec 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 échouer
Lorsqu'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 l'enregistrez explicitement 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 "failed to Register cluster" (Impossible d'enregistrer le cluster) non obsolète s'affiche temporairement. Elle devrait se mettre à jour automatiquement au bout d'un certain temps.
|
Mises à niveau et mises à jour |
1.13.0-1.13.9, 1.14.0-1.14.4, 1.15.0 |
L'annotation du lien de ressource du cluster d'administrateur inscrit n'est pas conservée
Lorsqu'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 l'utilisation d'une clé d'annotation incorrecte. Cela peut entraîner l'enregistrement par erreur du cluster d'administrateur dans l'API GKE On-Prem.
Un cluster d'administrateur est enregistré dans l'API lorsque vous l'enregistrez explicitement 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 à nouveau.
|
Mise en réseau |
1.15.0-1.15.2 |
L'élément orderPolicy CoreDNS n'est pas reconnu
OrderPolicy n'est pas reconnu en tant que paramètre et n'est pas utilisé. À la place, GKE sur VMware utilise toujours Random .
Ce problème est dû au fait que le modèle CoreDNS n'a pas été mis à jour, ce qui entraîne l'omission de orderPolicy .
Solution :
Mettez à jour le modèle CoreDNS et appliquez le correctif. Ce correctif persiste jusqu'à une mise à niveau.
- Modifiez le modèle existant:
kubectl edit cm -n kube-system coredns-template
Remplacez 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 et mises à jour |
1.10, 1.11, 1.12, 1.13.0-1.13.7, 1.14.0-1.14.3 |
État OnPremAdminCluster incohérent entre le point de contrôle et la RS réelle
Certaines conditions de concurrence peuvent entraîner une incohérence de l'état OnPremAdminCluster entre le point de contrôle et la RS réelle. Lorsque le problème se produit, vous pouvez rencontrer l'erreur suivante lors de la mise à jour du cluster d'administrateur après sa mise à 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 updated
Pour contourner ce problème, vous devez soit modifier le point de contrôle, soit le désactiver pour la mise à niveau ou la mise à jour. Veuillez contacter notre équipe d'assistance.
|
Opération |
1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 |
Le processus de rapprochement modifie les certificats d'administrateur sur les clusters d'administrateur
GKE sur VMware modifie les certificats d'administrateur sur les plans de contrôle des clusters d'administrateur à chaque processus de rapprochement, 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 la version 1.15.
Si vous êtes concerné par ce problème, vous pouvez rencontrer des difficultés telles que les suivantes:
- Les certificats non valides peuvent entraîner l'expiration du délai des commandes suivantes et renvoyer des erreurs :
gkectl create admin
gkectl upgrade amdin
gkectl update admin
Ces commandes peuvent renvoyer des erreurs d'autorisation semblables à celles-ci:
Failed to reconcile admin cluster: unable to populate admin clients: failed to get admin controller runtime client: Unauthorized
- Les journaux
kube-apiserver de votre cluster d'administrateur peuvent contenir des erreurs telles que les suivantes:
Unable to authenticate the request" err="[x509: certificate has expired or is not yet valid...
Solution :
Effectuez la mise à niveau vers une version de GKE sur VMware avec le correctif suivant : 1.13.10+, 1.14.6+, 1.15.2+. Si la mise à niveau n'est pas possible, contactez le Cloud Customer Care pour résoudre ce problème.
|
Mise en réseau, opérations |
1,10, 1,11, 1,12, 1,13, 1,14 |
Composants Anthos Network Gateway supprimés ou en attente en raison d'une classe de priorité manquante
Les pods de passerelle réseau dans kube-system peuvent afficher un état Pending ou Evicted , 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 une incapacité à planifier les pods en raison des ressources de nœud. Étant donné que les pods de passerelle réseau Anthos n'ont pas de PriorityClass, ils ont la même priorité par défaut que les autres charges de travail.
Lorsque les nœuds sont limités en ressources, les pods de la passerelle réseau peuvent être évincés. Ce comportement est particulièrement insatisfaisant pour le DaemonSet ang-node , car ces pods doivent être programmés sur un nœud spécifique et ne peuvent pas être migrés.
Solution :
Passez à la version 1.15 ou ultérieure.
Comme solution à court terme, vous pouvez attribuer manuellement une classe PriorityClass aux composants de passerelle réseau Anthos. Le contrôleur GKE sur VMware écrase ces modifications manuelles lors d'un processus de rapprochement, par exemple lors d'une mise à niveau du cluster.
- Attribuez la classe de priorité
system-cluster-critical aux déploiements du contrôleur de cluster ang-controller-manager et autoscaler .
- Attribuez la classe prioritaire
system-node-critical au DaemonSet de nœud ang-daemon .
|
Mises à niveau et mises à jour |
1.12, 1.13, 1.14, 1.15.0-1.15.2 |
la mise à niveau du cluster d'administrateur échoue après l'enregistrement du cluster avec gcloud
Après avoir utilisé gcloud pour enregistrer un cluster d'administrateur avec une section gkeConnect non 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_KUBECONFIG
Obtenez le nom du cluster d'administrateur:
kubectl get onpremadmincluster -n kube-system --kubeconfig=ADMIN_KUBECONFIG
Supprimez l'appartenance au parc:
gcloud container fleet memberships delete ADMIN_CLUSTER_NAME
et 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-since ne parvient pas à limiter la période pour les commandes journalctl exécutées sur les nœuds du cluster
Cela n'affecte pas la fonctionnalité de prise d'instantané du cluster, car l'instantané inclut toujours tous les journaux collectés par défaut en exécutant journalctl sur les nœuds du cluster. Aucune information de débogage n'est donc manquée.
|
Installation, mises à niveau et mises à jour |
1.9+, 1.10+, 1.11+, 1.12+ |
Échec de gkectl prepare windows
gkectl prepare windows ne parvient pas à installer Docker sur des versions de GKE sur VMware antérieures à la version 1.13, car MicrosoftDockerProvider est obsolète.
Solution :
Pour contourner ce problème, l'idée générale consiste à passer à GKE sur VMware 1.13 et à utiliser la version 1.13 de gkectl pour créer un modèle de VM Windows, puis créer des pools de nœuds Windows. Deux options s'offrent à vous pour accéder à GKE sur VMware 1.13 à partir de votre version actuelle, comme indiqué ci-dessous.
Remarque:Nous disposons d'options pour contourner ce problème dans votre version actuelle sans avoir à passer à la version 1.13. Toutefois, une procédure plus manuelle est nécessaire. Veuillez contacter notre équipe d'assistance si vous souhaitez utiliser cette option.
Option 1:Passer à une édition Bleu/Vert
Vous pouvez créer un cluster à l'aide de GKE sur VMware 1.13 et versions ultérieures avec des pools de nœuds Windows, migrer vos charges de travail vers le nouveau cluster, puis supprimer le cluster actuel. Il est recommandé d'utiliser la dernière version mineure de GKE sur VMware.
Remarque:Le provisionnement du nouveau cluster nécessitera des ressources supplémentaires, mais moins de temps d'arrêt et de perturbations pour les charges de travail existantes.
Option 2:supprimer les pools de nœuds Windows et les rajouter lors de la mise à niveau vers GKE sur VMware 1.13
Remarque:Pour 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é rajouté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_FILE
- Mettez à niveau les clusters d'administrateur et d'utilisateur uniquement Linux vers la version 1.12 en suivant le
guide de mise à niveau des utilisateurs pour la version mineure cible correspondante.
- (Assurez-vous d'effectuer cette étape avant de passer à la version 1.13) Assurez-vous que
enableWindowsDataplaneV2: true est configuré dans la RS OnPremUserCluster . Sinon, le cluster continuera à utiliser les pools de nœuds Docker pour Windows, qui ne seront pas compatibles avec le nouveau modèle de VM Windows 1.13 sur lequel Docker n'est pas installé. S'il n'est pas configuré ou s'il est défini sur "false", mettez à jour votre cluster pour qu'il soit défini sur "true" dans user-cluster.yaml, puis exécutez la commande suivante:
gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE
- Mettez à niveau les clusters d'administrateur et d'utilisateur uniquement Linux vers la version 1.13 en suivant le
guide de mise à niveau des utilisateurs.
- 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_KUBECONFIG
- Ajoutez à nouveau la configuration du pool de nœuds Windows à user-cluster.yaml avec le champ
OSImage défini sur 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 et mises à jour |
1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 |
La configuration RootDistanceMaxSec ne prend pas effet pour ubuntu nœuds
La valeur par défaut de 5 secondes pour RootDistanceMaxSec est 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 en SSH à la VM, qui se trouve dans "/var/log/startup.log", vous pouvez rencontrer l'erreur suivante:
+ has_systemd_unit systemd-timesyncd
/opt/bin/master.sh: line 635: has_systemd_unit: command not found
L'utilisation d'une valeur RootDistanceMaxSec de 5 secondes peut entraîner une désynchronisation de l'horloge système avec le serveur NTP lorsque la dérive d'horloge est supérieure à 5 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 et mises à jour |
1.12.0-1.12.6, 1.13.0-1.13.6, 1.14.0-1.14.2 |
Échec de gkectl update admin en raison d'un champ osImageType vide
Lorsque vous utilisez la version 1.13 de gkectl pour mettre à jour un cluster d'administrateur version 1.12, le message d'erreur suivant 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 admin pour les clusters version 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 pouvez constater que les modifications multiples incluent le paramètre osImageType d'une chaîne vide à ubuntu_containerd .
Ces erreurs de mise à jour sont dues au remplissage incorrect du champ osImageType dans la configuration du cluster d'administrateur depuis son introduction dans la version 1.9.
Solution :
Passez à une version de GKE sur VMware avec le correctif. Si vous ne pouvez pas passer à un forfait supérieur, contactez le Cloud Customer Care pour résoudre ce problème.
|
Installation, sécurité |
1,13 ; 1,14 ; 1,15 ; 1,16 |
L'extension SNI ne fonctionne pas sur les clusters d'utilisateur avec le plan de contrôle V2
La possibilité de fournir un certificat de diffusion supplémentaire pour le serveur d'API Kubernetes d'un cluster d'utilisateur avec
authentication.sni ne fonctionne pas lorsque le plan de contrôle V2 est activé (
enableControlplaneV2: true ).
Solution :
En attendant qu'un correctif GKE sur VMware soit disponible avec le correctif, désactivez Controlplane V2 (enableControlplaneV2: false ) si vous devez utiliser l'extension SNI.
|
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 d'administrateur
La machine du plan de contrôle administrateur ne démarre pas lorsque le nom d'utilisateur du registre privé contient $ .
Lorsque vous vérifiez /var/log/startup.log sur la machine du plan de contrôle 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 une version de GKE sur VMware avec le correctif.
|
Mises à niveau et mises à jour |
1.12.0-1.12.4 |
Avertissements de faux positifs concernant des modifications non compatibles lors de la mise à jour du cluster d'administrateur
Lorsque vous
mettez à jour des clusters d'administrateur, les avertissements de 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 et 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 du KSA
Après la rotation des clés de signature du KSA, puis la
mise à jour d'un cluster d'utilisateur, gkectl update peut échouer et renvoyer 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 la clé de signature du KSA, mais conservez les données les plus récentes :
- Vérifiez le secret dans le cluster d'administrateur sous l'espace de noms
USER_CLUSTER_NAME et obtenez le nom du secret ksa-signing-key:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME get secrets | grep ksa-signing-key
- Copiez le secret "ksa-signing-key" et nommez-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-NAME
- Remplacez le champ
data.data dans le fichier ksa-signing-key-rotation-stage par '{"tokenVersion":1,"privateKeyVersion":1,"publicKeyVersions":[1]}' :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME \
edit configmap ksa-signing-key-rotation-stage
- Désactivez le webhook de validation pour modifier les informations de 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
'
- Définissez le champ
spec.ksaSigningKeyRotation.generated.ksaSigningKeyRotation sur 1 dans votre ressource personnalisée OnPremUserCluster:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
edit onpremusercluster USER_CLUSTER_NAME
- Attendez que le cluster d'utilisateur cible soit prêt. Vous pouvez vérifier son état en procédant comme suit:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
get onpremusercluster
- Restaurez 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 toute autre rotation des clés de signature KSA jusqu'à ce que le cluster soit mis à niveau vers la version contenant le correctif.
|
Opération |
1.13.1+, 1.14, 1., 1.16 |
Lorsque vous supprimez un cluster d'utilisateur avec un équilibreur de charge F5 BIG-IP à l'aide de Terraform, les serveurs virtuels F5 BIG-IP ne sont pas supprimés après la suppression du cluster.
Solution :
Pour supprimer les ressources F5, suivez les étapes permettant de nettoyer une partition F5 du cluster d'utilisateur.
|
Installation, mises à niveau et mises à jour |
1.13.8, 1.14.4 |
Le cluster de genre extrait des images de conteneur à partir de docker.io .
Si vous créez un cluster d'administrateur version 1.13.8 ou 1.14.4, ou que vous mettez à niveau un cluster d'administrateur vers la version 1.13.8 ou 1.14.4, ce cluster extrait les images de conteneur suivantes à partir de docker.io :
docker.io/kindest/kindnetd
docker.io/kindest/local-path-provisioner
docker.io/kindest/local-path-helper
Si docker.io n'est pas accessible depuis votre poste de travail administrateur, la création ou la mise à niveau du cluster d'administrateur ne permet pas d'afficher le cluster de genre.
L'exécution de la commande suivante sur le poste de travail administrateur affiche les conteneurs correspondants en attente avec ErrImagePull :
docker exec gkectl-control-plane kubectl get pods -A
La réponse contient des entrées semblables à ce qui suit:
...
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 de cluster de genre. Cependant, le genre v0.18.0 présente un problème avec les images de conteneurs préchargées, qui entraîne leur extraction par erreur d'Internet.
Solution :
Exécutez les commandes suivantes sur le poste de travail administrateur, pendant que le 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 le cluster d'utilisateur et le cluster d'administrateur HA Controlplane V2 lorsque le réseau filtre les requêtes GARP en double
Si les VM de votre cluster sont connectées à l'aide d'un commutateur qui filtre les requêtes GARP (ARP gratuites) en double, l'élection du responsable keepaLive peut rencontrer une condition de concurrence, ce qui amène certains nœuds à avoir des entrées de table ARP incorrectes.
Les nœuds concernés peuvent ping l'adresse IP virtuelle du plan de contrôle, mais une connexion TCP à l'adresse IP virtuelle du plan de contrôle expire.
Solution :
Exécutez la commande suivante sur chaque nœud de plan de contrôle du cluster concerné:
iptables -I FORWARD -i ens192 --destination CONTROL_PLANE_VIP -j DROP
|
Mises à niveau et mises à jour |
1.13.0-1.13.7, 1.14.0-1.14.4, 1.15.0 |
vsphere-csi-controller doit être redémarré après la rotation des certificats vCenter
vsphere-csi-controller doit actualiser son secret vCenter après la rotation des certificats vCenter. Cependant, le système actuel ne redémarre pas correctement les pods de vsphere-csi-controller , ce qui entraîne le plantage de vsphere-csi-controller après la rotation.
Solution :
Pour les clusters créés à partir de la version 1.13, 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'erreur d'enregistrement du cluster
Même lorsque l'enregistrement du cluster échoue lors de la création du cluster d'administrateur, la commande gkectl create admin n'échoue pas et peut réussir. En d'autres termes, la création du cluster d'administrateur peut "réussir" sans être enregistré dans un parc.
Pour identifier le problème, recherchez les messages d'erreur suivants dans le journal de "gkectl create admin",
Failed to register admin cluster
Vous pouvez également vérifier si le cluster figure parmi les clusters enregistrés dans la console Cloud.
Solution :
Pour les clusters créés à partir de la version 1.12, suivez les instructions pour relancer l'enregistrement du cluster d'administrateur après sa création. Pour les clusters créés dans des versions antérieures,
-
Ajoutez une fausse paire clé-valeur telle que "foo: bar" au fichier de clé SA connect-register
-
Exécutez
gkectl update admin pour réenregistrer le cluster d'administrateur.
|
Mises à niveau et mises à jour |
1.10, 1.11, 1.12, 1.13.0-1.13.1 |
Le réenregistrement du cluster d'administrateur peut être ignoré lors de la mise à niveau du cluster d'administrateur
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, le cluster d'administrateur ne sera pas réenregistré avec la version mise à jour de l'agent Connect.
Solution :
Vérifiez si le cluster s'affiche parmi les clusters enregistrés.
Si vous le souhaitez, vous pouvez vous connecter au cluster après avoir configuré l'authentification. Si le cluster est toujours enregistré, vous pouvez ignorer les instructions suivantes pour tenter à nouveau l'enregistrement.
Pour les clusters mis à niveau vers la version 1.12 et les versions ultérieures, suivez les instructions pour relancer l'enregistrement du cluster d'administrateur après sa création. Pour les clusters mis à niveau vers des versions antérieures :
-
Ajoutez une fausse paire clé-valeur telle que "foo: bar" au fichier de clé SA connect-register
-
Exécutez
gkectl update admin pour réenregistrer le cluster d'administrateur.
|
Configuration |
1.15.0 |
Faux message d'erreur concernant vCenter.dataDisk
Pour un cluster d'administrateur à haute disponibilité, gkectl prepare affiche ce faux message d'erreur:
vCenter.dataDisk must be present in the AdminCluster spec
Solution :
Vous pouvez ignorer ce message d'erreur.
|
VMware |
1.15.0 |
La création du pool de nœuds échoue en raison de règles d'affinité VM-hôte redondantes
Lors de la création d'un pool de nœuds utilisant l'affinité VM-hôte, une condition de concurrence 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 pouvoir poursuivre la création du pool de nœuds.
Ces règles sont nommées [USER_CLUSTER_NAME]-[HASH].
|
Opération |
1.15.0 |
Échec de gkectl repair admin-master pour la raison suivante : failed
to delete the admin master node object and reboot the admin master VM
La commande gkectl repair admin-master peut é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. Il peut être réexécuté en toute sécurité jusqu'à ce que la commande aboutisse.
|
Mises à niveau et 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ôle.
Après avoir recréé ou mis à jour un nœud du plan de contrôle, certains pods peuvent rester à l'état Failed en raison de l'échec du prédicat NodeAffinity. Ces pods en échec n'affectent pas les opérations normales du cluster ni son état.
Solution :
Vous pouvez ignorer les pods en échec ou les supprimer manuellement en toute sécurité.
|
Sécurité et configuration |
1.15.0-1.15.1 |
OnPremUserCluster n'est pas prêt en raison d'identifiants de 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é, l'instance OnPremUserCluster peut ne pas être prête et le message d'erreur suivant peut s'afficher:
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 les identifiants préparés.
|
Mises à niveau et mises à jour |
1.15.0 |
Pendant la phase gkectl upgrade admin , la vérification préliminaire du stockage pour la migration CSI vérifie que les StorageClasses ne comportent pas de paramètres ignorés après la migration CSI.
Par exemple, s'il existe une StorageClass avec le paramètre diskformat , gkectl upgrade admin l'indique et signale un échec lors de la validation préliminaire.
Les clusters d'administrateur créés dans GKE sur VMware 1.10 et les versions antérieures disposent d'une StorageClass avec diskformat: thin qui échouera à cette validation, mais cette StorageClass fonctionne toujours correctement après la migration CSI. Ces échecs doivent être interprétés comme des avertissements.
Pour en savoir plus, consultez la section sur le paramètre StorageClass dans Migrer des volumes vSphere In-Tree vers le plug-in de stockage de conteneurs vSphere.
Solution :
Après avoir vérifié que votre cluster dispose d'une StorageClass avec paramètres ignorés après la migration CSI, exécutez gkectl upgrade admin avec l'option --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
Sous 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, mise à niveau du cluster ou mise à jour du pool de nœuds). Les charges de travail avec état qui fonctionnaient correctement auparavant risquent de ne pas pouvoir écrire sur 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 la PersistentVolumeClaim pour obtenir le nom du 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 en cours d'exécution:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIGget pods \
--namespace POD_NAMESPACE \
-o jsonpath='{.spec.nodeName}{"\n"}'
-
Obtenez un accès Powershell au nœud, via SSH ou l'interface Web vSphere.
-
Définissez les variables d'environnement :
PS C:\Users\administrator> pvname=PV_NAME
PS C:\Users\administrator> podid=POD_UID
- Identifiez 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 l'état du disque est
readonly :
PS C:\Users\administrator> (Get-Disk -Number $disknum).IsReadonly
Le résultat doit être True .
- Définissez
readonly sur false .
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 et mises à jour |
1.12, 1.13.0-1.13.7, 1.14.0-1.14.4 |
vsphere-csi-secret non mis à jour après le gkectl update credentials vsphere --admin-cluster
Si vous mettez à jour les identifiants vSphere pour un cluster d'administrateur après avoir mis à jour les identifiants du cluster, vous constaterez peut-être que vsphere-csi-secret sous l'espace de noms kube-system du cluster d'administrateur utilise toujours les anciens identifiants.
Solution :
- Obtenez le nom du secret
vsphere-csi-secret :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system get secrets | grep vsphere-csi-secret
- Mettez à jour les données du secret
vsphere-csi-secret obtenu lors de 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-controller
- Vous pouvez suivre l'état du déploiement avec:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system rollout status deployment vsphere-csi-controller
Une fois le déploiement déployé, le contrôleur doit utiliser la version mise à jour de vsphere-csi-secret .
|
Mises à niveau et 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 de audit-proxy lors de l'activation de Cloud Audit Logs avec gkectl update cluster
audit-proxy risque de faire planter la boucle en raison de l'absence de --cluster-name .
Ce comportement est dû à un bug dans la logique de mise à jour, où le nom du cluster n'est pas propagé au pod / fichier manifeste de conteneur du proxy audit-proxy.
Solution :
Pour un cluster d'utilisateur de plan de contrôle v2 avec enableControlplaneV2: true , connectez-vous à la machine du plan de contrôle d'utilisateur à l'aide de SSH et mettez à jour /etc/kubernetes/manifests/audit-proxy.yaml avec --cluster_name=USER_CLUSTER_NAME .
Pour un cluster d'utilisateur de plan de contrôle v1, modifiez le conteneur audit-proxy dans le statefulset kube-apiserver pour ajouter --cluster_name=USER_CLUSTER_NAME :
kubectl edit statefulset kube-apiserver -n USER_CLUSTER_NAME --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
|
Mises à niveau et 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 cluster
Juste après gkectl upgrade cluster , les pods du plan de contrôle peuvent être à nouveau redéployés.
L'état du cluster (gkectl list clusters ) passe de RUNNING à RECONCILING .
Les requêtes adressées au cluster d'utilisateur peuvent expirer.
Ce comportement est dû au fait que la rotation des certificats du plan de contrôle a lieu automatiquement après le gkectl upgrade cluster .
Ce problème ne concerne que les clusters d'utilisateur qui n'utilisent PAS le plan de contrôle v2.
Solution :
Attendez que l'état du cluster revienne à RUNNING dans gkectl list clusters , ou passez aux versions avec le correctif: 1.13.6+, 1.14.2+ ou 1.15+.
|
Mises à niveau et mises à jour |
1.12.7 |
La version incorrecte 1.12.7-gke.19 a été supprimée
GKE sur VMware 1.12.7-gke.19 est une mauvaise version 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 et mises à jour |
1.12.0+, 1.13.0-1.13.7, 1.14.0-1.14.3 |
gke-connect-agent continue d'utiliser l'ancienne image après la mise à jour des identifiants de registre
Si vous mettez à jour les identifiants du registre à l'aide de l'une des méthodes suivantes:
gkectl update credentials componentaccess si vous n'utilisez pas de registre privé
gkectl update credentials privateregistry si vous utilisez un registre privé
Vous constaterez peut-être que gke-connect-agent continue d'utiliser l'ancienne image ou que les pods gke-connect-agent ne peuvent pas être extraits en raison de ImagePullBackOff .
Ce problème sera résolu dans les versions 1.13.8 et 1.14.4 de GKE sur VMware, ainsi que dans les versions ultérieures.
Solution :
Option 1: redéployer gke-connect-agent manuellement:
- Supprimez l'espace de noms
gke-connect :
kubectl --kubeconfig=KUBECONFIG delete namespace gke-connect
- Redéployez
gke-connect-agent avec la clé de compte de service d'enregistrement d'origine (inutile de mettre à jour la clé):
Pour le cluster d'administrateur:
gkectl update credentials register --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG_FILE --admin-cluster
Pour 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 d'extraction d'image regcred , qui est utilisé par le déploiement gke-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-agent . Pour ce faire, procédez 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-agent
- Ajoutez 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'équilibrage de charge
Lorsque 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 renvoie 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 intègrent 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 |
Besoin de faim de montre etcd
Les clusters exécutant etcd version 3.4.13 ou antérieure peuvent rencontrer des problèmes de pénurie de surveillance et de surveillance des ressources non opérationnelles, ce qui peut entraîner les problèmes suivants:
- La planification des pods est interrompue
- Impossible d'enregistrer les nœuds
- le kubelet 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, 1.14.3 et ultérieures de GKE sur VMware. Ces nouvelles versions utilisent la version 3.4.21 d'etcd. Toutes les versions précédentes de GKE sur VMware sont concernées par ce problème.
Solution
Si vous ne pouvez pas effectuer de mise à niveau immédiatement, vous pouvez limiter le risque de défaillance du cluster en réduisant le nombre de nœuds qu'il contient. Supprimez les nœuds jusqu'à ce que la métrique etcd_network_client_grpc_sent_bytes_total soit 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 Sélectionner une métrique, saisissez
Kubernetes Container dans 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 et 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ôle
Lors des redémarrages ou des mises à niveau du cluster, GKE Identity Service peut être submergé par le trafic composé de jetons JWT expirés et transférés depuis kube-apiserver vers GKE Identity Service via le webhook d'authentification. Bien que GKE Identity Service ne plante pas en boucle, il ne répond plus et cesse de diffuser d'autres requêtes.
En fin de compte, ce problème entraîne des latences plus élevées du plan de contrôle.
Ce problème est résolu dans les versions suivantes de GKE sur VMware:
Pour déterminer si vous êtes concerné par ce problème, procédez comme suit:
- Vérifiez si le point de terminaison GKE Identity Service est accessible en externe:
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 pour 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 pod ais et réexécutez la commande curl pour voir si cela résout le problème. Si vous obtenez le code d'état 000 , le problème a été résolu et vous avez terminé. Si vous obtenez toujours un code d'état 400 , le serveur HTTP GKE Identity Service ne démarre pas. Dans ce cas, continuez.
- Vérifiez les journaux de GKE Identity Service et du kube-apiserver :
- Consultez le journal GKE Identity Service:
kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
--kubeconfig KUBECONFIG
Si 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-apiserver de vos clusters:
Dans les commandes suivantes, KUBE_APISERVER_POD est le nom du pod kube-apiserver sur le cluster donné.
Cluster d'administrateur :
kubectl --kubeconfig ADMIN_KUBECONFIG logs \
-n kube-system KUBE_APISERVER_POD kube-apiserver
Cluster d'utilisateur:
kubectl --kubeconfig ADMIN_KUBECONFIG logs \
-n USER_CLUSTER_NAME KUBE_APISERVER_POD kube-apiserver
Si les journaux kube-apiserver contiennent des entrées telles que les suivantes, 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 problématiques pour contourner le problème:
- 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 KUBECONFIG
- Recherchez le contexte de jeton non valide dans le journal du service d'identité GKE:
kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
--kubeconfig KUBECONFIG
- Pour obtenir la charge utile de jeton associée à chaque contexte de jeton non valide, analysez le secret de chaque 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 --decode
- Pour décoder le jeton et afficher le nom et l'espace de noms du pod source, copiez le jeton dans le débogueur à l'adresse jwt.io.
- Redémarrez les pods identifiés à partir des jetons.
|
Opération |
1,8, 1,9, 1,10 |
Le problème d'augmentation de l'utilisation de la mémoire des pods de maintenance etcd
Les pods de maintenance etcd qui utilisent l'image etcddefrag:gke_master_etcddefrag_20210211.00_p0 sont affectés. Le conteneur "etcddefrag" ouvre une nouvelle connexion au serveur etcd pendant chaque cycle de défragmentation, et les anciennes connexions ne sont pas nettoyées.
Solution :
Option 1: effectuez la mise à niveau vers la dernière version du correctif 1.8 vers la version 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 effectuer un scaling à la baisse du pod etcd-maintenance pour le cluster d'administrateur et 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 |
Ne pas effectuer les vérifications d'état des pods du plan de contrôle du cluster d'utilisateur
Le contrôleur d'état du cluster et la commande gkectl diagnose cluster effectuent tous deux un ensemble de vérifications de l'état, y compris celles des pods, pour tous les espaces de noms. Cependant, ils commencent à ignorer les pods du plan de contrôle d'utilisateur par erreur. Si vous utilisez le plan de contrôle v2, cela n'affectera pas votre cluster.
Solution :
Cela n'aura aucune incidence sur la gestion des charges de travail ou 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 et mises à jour |
1.6+, 1.7+ |
Les mises à niveau des clusters d'administrateur 1.6 et 1.7 peuvent être affectées par la redirection k8s.gcr.io vers registry.k8s.io
Kubernetes a redirigé le trafic de k8s.gcr.io vers registry.k8s.io le 20/03/2023. Dans GKE sur VMware 1.6.x et 1.7.x, les mises à niveau du cluster d'administrateur utilisent l'image de conteneur k8s.gcr.io/pause:3.2 . Si vous utilisez un proxy pour votre poste de travail administrateur, que le proxy n'autorise pas registry.k8s.io et que l'image de conteneur k8s.gcr.io/pause:3.2 n'est pas mise en cache localement, les mises à niveau du cluster d'administrateur échoueront lors de l'extraction de l'image du 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 charge
gkectl 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à. Enfin, la vérification préliminaire tente de valider un équilibreur de charge bascule inexistant.
Solution :
Supprimez le fichier de groupe Seesaw existant pour ce cluster. Le nom du fichier est seesaw-for-gke-admin.yaml pour le cluster d'administrateur et seesaw-for-{CLUSTER_NAME}.yaml pour 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 conntrack
GKE sur VMware version 1.14 est sujet aux échecs d'insertion de tables de suivi des connexions Netfilter (conntrack) lors de l'utilisation d'images de système d'exploitation Ubuntu ou COS. Les échecs d'insertion entraînent des délais d'inactivité aléatoires pour l'application et peuvent se produire même lorsque la table conntrack dispose de l'espace pour de nouvelles entrées. Les échecs sont causés par des modifications du noyau 5.15 et versions ultérieures qui limitent les insertions de tables en fonction de la longueur de la chaîne.
Pour savoir si vous êtes concerné par ce problème, vous pouvez consulter les statistiques du système de suivi des connexions 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 chaintoolong dans la réponse est un nombre non nul, vous êtes concerné par ce problème.
Solution
L'atténuation à court terme consiste à augmenter la taille de la table de hachage Netfiler (nf_conntrack_buckets ) et de la table de suivi des connexions Netfilter (nf_conntrack_max ). Exécutez 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 de table est 262144 . Nous vous suggérons de définir une valeur égale à 65 536 fois le nombre de cœurs sur le nœud. Par exemple, si votre nœud comporte huit cœurs, définissez la taille de la table sur 524288 .
|
Mise en réseau |
1.13.0-1.13.2 |
Boucle de plantage calico-typha ou anetd-operator sur les nœuds Windows avec Controlplane v2
Avec le plan de contrôle v2 ou un nouveau modèle d'installation, calico-typha ou anetd-operator peut être programmé sur des nœuds Windows et entrer dans une boucle de plantage.
En effet, les deux déploiements tolèrent tous les rejets, y compris le rejet de nœud 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 éléments spec.template.spec.tolerations suivants:
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
Et 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'utilisateur
Vous ne pourrez peut-être pas créer de cluster d'utilisateur si vous spécifiez la section privateRegistry avec l'identifiant fileRef .
La vérification préliminaire peut échouer avec le message suivant:
[FAILURE] Docker registry access: Failed to login.
Solution :
|
Opérations |
1.10+ |
Anthos Service Mesh et autres maillages de services non compatibles avec Dataplane v2
Dataplane V2 prend en charge l'équilibrage de charge et crée un socket de noyau au lieu d'un DNAT basé sur des paquets. Cela signifie qu'Anthos Service Mesh ne peut pas effectuer d'inspection des paquets, car le pod est contourné et n'utilise jamais IPTables.
Cela se manifeste en mode sans frais du kube-proxy par une perte de connectivité ou un routage du trafic incorrect pour les services utilisant Anthos Service Mesh, car le side-car ne peut pas inspecter les paquets.
Ce problème est présent dans toutes les versions de GKE sur Bare Metal 1.10, mais certaines versions plus récentes de la version 1.10 (1.10.2+) proposent une solution de contournement.
Solution :
Pour une compatibilité totale, passez à la version 1.11. Si vous utilisez la version 1.10.2 ou une version 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: true au 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-manager peut dissocier de manière forcée les volumes persistants après 6 minutes
kube-controller-manager peut expirer lors de la dissociation des PV/PVC au bout de six minutes et de la dissociation forcée. Des journaux détaillés de kube-controller-manager montrent des événements semblables à ce qui suit:
$ 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 du kubelet, des erreurs telles que les suivantes 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 et redémarrez le nœud.
|
Mises à niveau et mises à jour |
1.12+, 1.13+, 1.14+ |
La mise à niveau du cluster est bloquée si un pilote CSI tiers est utilisé
Vous ne pourrez peut-être pas mettre à niveau un cluster si vous utilisez un pilote CSI tiers. La commande gkectl cluster diagnose peut 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-master crée la VM maître administrateur sans mettre à niveau sa version matérielle de VM.
Le nœud maître administrateur créé via gkectl repair admin-master peut utiliser une version de matériel de VM antérieure à celle attendue. Lorsque le problème se produit, l'erreur est indiquée dans le rapport gkectl 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 administrateur, suivez les instructions de la page 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+ |
La VM libère le bail DHCP lors de l'arrêt ou du redémarrage de manière inattendue, ce qui peut entraîner des changements d'adresse IP
Dans systemd v244, systemd-networkd présente un changement de comportement par défaut sur la configuration KeepConfiguration . Avant cette modification, les VM n'envoyaient pas de message de libération du bail DHCP au serveur DHCP au moment 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 publiée peut être réaffecté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/ou au niveau de vSphere) et/ou une modification des adresses IP sur les VM, ce qui peut endommager les clusters de différentes manières.
Par exemple, vous pouvez rencontrer les symptômes suivants.
- L'interface utilisateur de vCenter indique qu'aucune VM n'utilise la même adresse IP, mais
kubectl get
nodes -o wide renvoie 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 d'une 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 annuler le changement de comportement par défaut de systemd-networkd . Les VM qui exécutent ce DaemonSet ne libéreront pas les adresses IP du 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 et 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 a été effacée après la mise à niveau du cluster d'administrateur depuis la version 1.11.x
Ce problème ne concerne 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-key du secret admin-cluster-creds sera vide.
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 la sortie est vide, cela signifie que la clé est effacée.
Une fois la clé du compte de service d'accès au composant supprimée, l'installation de nouveaux clusters d'utilisateur ou la mise à niveau des clusters d'utilisateur existants échoueront. Voici quelques messages d'erreur que vous pouvez rencontrer:
- Échec de la phase préliminaire de validation lente avec le message d'erreur:
"Failed
to create the test VMs: failed to get service account key: service
account is not configured."
- Échec de la préparation avant le
gkectl prepare avec 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 la gcloud CLI, lorsque vous exécutez
gkectl update admin --enable-preview-user-cluster-central-upgrade pour déployer le contrôleur de plate-forme de mise à niveau, la commande échoue avec le message suivant: "failed to download bundle to disk: dialing:
unexpected end of JSON input" . Ce message s'affiche dans le champ status du résultat de kubectl --kubeconfig
ADMIN_KUBECONFIG -n kube-system get onprembundle -oyaml .
Solution:
Ajoutez manuellement la clé du compte de service d'accès au composant dans le 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 le plan de contrôle V2 est activé
Pour les clusters d'utilisateur créés avec Controlplane V2 ou un nouveau modèle d'installation, les pools de nœuds pour lesquels l'autoscaling est activé utilisent toujours leur autoscaling.minReplicas dans le fichier user-cluster.yaml. Le journal du pod de l'autoscaler de cluster indique également que ces pods ne sont pas opérationnels.
> 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ésactiver l'autoscaling dans tous les pools de nœuds avec "gkectl update cluster" jusqu'à la mise à niveau vers une version prenant en charge le correctif
|
Installation |
1.12.0-1.12.4, 1.13.0-1.13.3, 1.14.0 |
Le CIDR n'est pas autorisé dans le fichier de blocs d'adresses IP.
Lorsque les utilisateurs utilisent le routage CIDR dans le fichier de blocs d'adresses 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 les adresses IP individuelles dans le fichier de blocs d'adresses IP jusqu'à la mise à niveau vers une version avec le correctif: 1.12.5, 1.13.4, 1.14.1+.
|
Mises à niveau et 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 que les machines du plan de contrôle de l'utilisateur soient recréées
Lors de la mise à jour du 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éé via Controlplane V2, il est possible que les machines du plan de contrôle d'utilisateur ne terminent pas leur recréation une fois la commande gkectl terminée.
Solution:
Une fois la mise à jour terminée, attendez que les machines du plan de contrôle de l'utilisateur terminent également leur recréation en surveillant les types d'images de leur OS de nœud à l'aide de kubectl --kubeconfig USER_KUBECONFIG get nodes -owide . Par exemple, si vous passez d'Ubuntu à COS, nous devons attendre que toutes les machines du plan de contrôle passent complètement d'Ubuntu à COS, même une fois la commande de mise à jour terminée.
|
Opération |
1.10, 1.11, 1.12, 1.13, 1.14.0 |
Erreurs de création ou de suppression de pod en raison d'un problème de jeton d'authentification pour le compte de service CNI Calico
Un problème avec Calico dans GKE sur VMware 1.14.0 entraîne l'échec de la création et de la suppression des pods, et le message d'erreur suivant s'affiche dans le résultat 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 du cluster ou la mise à niveau vers la version 1.14 à l'aide de Calico.
Les clusters d'administrateur utilisent toujours Calico. 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-cni des nœuds crée un fichier kubeconfig avec un jeton valide pendant 24 heures. Ce jeton doit être renouvelé régulièrement par le pod calico-node . Le pod calico-node ne 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 GKE sur VMware. Effectuez la 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 au DaemonSet calico-node de 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 de votre 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 du routage CIDR
La création du cluster échoue malgré la configuration correcte de l'utilisateur. 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/30 , devient 10.0.0.0/31, 10.0.0.2/31 . Tant qu'il existe des CIDR N+1, où N correspond au nombre de nœuds dans le cluster, cela devrait suffire.
|
Fonctionnement, mises à niveau et 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 la configuration et les clés de chiffrement des secrets toujours activées
Lorsque la fonctionnalité de chiffrement des secrets permanent 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 et la configuration requises par cette fonctionnalité. Par conséquent, la réparation de l'instance maître administrateur avec cette sauvegarde à l'aide de gkectl repair admin-master --restore-from-backup génère 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 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 du cluster. Par exemple, si le cluster exécute une 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 et mises à jour |
1.10+ |
Recréer la VM maîtresse administrateur avec un nouveau disque de démarrage (par exemple, gkectl repair admin-master ) échouera si la fonctionnalité de chiffrement des secrets toujours activé est activée à l'aide de la commande "gkectl update".
Si la fonctionnalité de chiffrement des secrets toujours activé n'est pas activée lors de la création du cluster, mais activée ultérieurement via l'opération gkectl update , gkectl repair admin-master ne 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 permanent des secrets lors de la création du cluster. Il n'existe actuellement aucune mesure d'atténuation.
|
Mises à niveau et 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'utilisateur
La mise à niveau du premier cluster d'utilisateur de la version 1.9 vers la version 1.10 peut recréer des nœuds dans d'autres clusters d'utilisateur du même cluster d'administrateur. La recréation s'effectue de manière roulante.
disk_label a été supprimé de MachineTemplate.spec.template.spec.providerSpec.machineVariables , ce qui a déclenché une mise à jour inattendue de tous les MachineDeployment .
Solution :
Afficher la procédure de contournement
- Réduisez le nombre d'instances répliquées de
clusterapi-controllers à 0 pour tous les clusters d'utilisateur.
kubectl scale --replicas=0 -n=USER_CLUSTER_NAME deployment/clusterapi-controllers --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Mettez à niveau chaque cluster d'utilisateur un par un.
|
Mises à niveau et mises à jour |
1.10.0 |
Docker redémarre fréquemment après la mise à niveau du cluster
La 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 .
Une condition de nœud indiquera si le 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 l'origine du problème, vous devez vous connecter en SSH au nœud concerné et exécuter des commandes telles que sudo journalctl --utc -u docker ou sudo journalctl -x
Solution :
|
Mises à niveau et mises à jour |
1,11, 1,12 |
Composants GMP auto-déployés non conservés après la mise à niveau vers la version 1.12
Si vous utilisez une version de GKE sur VMware antérieure à la version 1.12 et que vous avez configuré manuellement les composants Prometheus géré par Google (GMP) dans l'espace de noms gmp-system de votre cluster, ces 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-system et des objets CRD sont gérés par l'objet stackdriver , avec l'option enableGMPForApplications définie sur false par 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 par stackdriver .
Solution :
|
Opération |
1.11, 1.12, 1.13.0 à 1.13.1 |
Objets ClusterAPI manquants dans le scénario de l'instantané de cluster system
Dans le scénario system , l'instantané du cluster n'inclut aucune ressource sous l'espace de noms default .
Cependant, certaines ressources Kubernetes, telles que les objets d'API Cluster, 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 services
où :
USER_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'utilisateur.
|
Mises à niveau et 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 lors du drainage des nœuds pour la configuration vSAN
Lors de la suppression, de la mise à jour ou de la mise à niveau d'un cluster d'utilisateur, le drainage de nœuds peut être bloqué 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'a été créé par des plug-ins vSphere "in-tree" dans les clusters d'administrateur et d'utilisateur.
Pour identifier le problè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
kubevols est le répertoire par défaut pour le pilote vSphere in-tree. Si aucun objet PVC/PV n'a été créé, il est possible que vous rencontriez un bug qui bloque le drainage des nœuds lors de la recherche de kubevols , car l'implémentation actuelle suppose que kubevols existe toujours.
Solution :
Créez le répertoire kubevols dans le datastore où le nœud est créé. Ce paramètre est défini dans le champ vCenter.datastore des fichiers user-cluster.yaml ou admin-cluster.yaml .
|
Configuration |
1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13, 1,14 |
Cluster Autoscaler clusterrolebinding et clusterrole sont supprimés après la suppression d'un cluster d'utilisateur.
Lors de la suppression d'un cluster d'utilisateur, les éléments clusterrole et clusterrolebinding correspondants 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, les mêmes clusterrole et clusterrolebinding sont utilisés pour tous les pods de l'autoscaler de cluster au sein du même cluster d'administrateur.
Les symptômes sont les suivants:
- Journaux
cluster-autoscaler
kubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-autoscaler
où ADMIN_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'administrateur.
Voici un exemple de messages d'erreur susceptibles de s'afficher:
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 dans 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 le rôle 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 |
Les clusters d'administrateur cluster-health-controller et vsphere-metrics-exporter ne fonctionnent pas après la suppression du cluster d'utilisateur.
Lors de la suppression d'un cluster d'utilisateur, le clusterrole correspondant est également supprimé, ce qui entraîne le dysfonctionnement de la réparation automatique et de l'exportateur de métriques vSphere.
Les symptômes sont les suivants:
- Journaux
cluster-health-controller
kubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-health-controller
où ADMIN_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'administrateur.
Voici un exemple de messages d'erreur susceptibles de s'afficher:
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-exporter
kubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
vsphere-metrics-exporter
où ADMIN_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'administrateur.
Voici un exemple de messages d'erreur susceptibles de s'afficher:
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 contournement
Appliquer le fichier YAML suivant au cluster d'administrateur
- Pour vSphere-metrics-exporter
kind: 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-system
Pour cluster-health-controller
apiVersion: 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 gkectl check-config lors de la validation de l'image de l'OS
Problème connu pouvant faire échouer gkectl check-config sans exécuter gkectl prepare . Cela peut prêter à confusion, car nous vous suggérons d'exécuter la commande avant d'exécuter gkectl 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 prepare pour importer les images d'OS manquantes.
Option 2: utilisez gkectl check-config --skip-validation-os-images pour ignorer la validation des images de l'OS.
|
Mises à niveau et mises à jour |
1,11, 1,12, 1,13 |
Échec de la mise à jour des groupes anti-affinité par gkectl update admin/cluster
Problème connu susceptible d'entraîner l'échec de l'gkectl update admin/cluster lors de la mise à jour de anti 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 contournement
Pour que la mise à jour soit prise en compte, les machines doivent être recréées after la mise à jour ayant échoué.
Pour mettre à jour le cluster d'administrateur, les nœuds maîtres et les nœuds complémentaires d'administrateur doivent être recréés
Pour pouvoir mettre à jour un cluster d'utilisateur, vous devez recréer les nœuds de calcul de l'utilisateur
Pour recréer les nœuds de calcul d'un utilisateur
Option 1 Suivez la mise à jour d'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 : utiliser la commande "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 utilisateur
Option 1 Suivez les instructions de la section 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 : utiliser la commande "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 modules complémentaires administrateur
Utiliser la commande "kubectl delete" pour recréer les machines une par une
kubectl delete machines MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG
|
Installation, mises à niveau et 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 et de la mise à jour du cluster, ainsi que de la réparation automatique des nœuds, lorsque ipMode.type est défini sur static et que le nom d'hôte configuré dans le fichier de blocs d'adresses IP contient un ou plusieurs points. Dans ce cas, les demandes de signature de certificat pour un nœud ne sont pas automatiquement approuvées.
Pour afficher les demandes de signature de certificat 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 du cluster d'administrateur pour le conteneur
clusterapi-controller-manager dans le pod clusterapi-controllers :
kubectl logs clusterapi-controllers-POD_NAME \
-c clusterapi-controller-manager -n kube-system \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG
- Pour 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_KUBECONFIG
où :
- ADMIN_CLUSTER_KUBECONFIG est le fichier kubeconfig du cluster d'administrateur.
- USER_CLUSTER_NAME est le nom du cluster d'utilisateur.
Voici un exemple de messages d'erreur susceptibles de s'afficher: "msg"="failed
to validate token id" "error"="failed to find machine for node
node-worker-vm-1" "validate"="csr-5jpx9"
- Affichez les journaux
kubelet sur le nœud problématique:
journalctl --u kubelet
Voici un exemple de messages d'erreur susceptibles de s'afficher: "Error getting
node" err="node \"node-worker-vm-1\" not found"
Si vous spécifiez un nom de domaine dans le champ de nom d'hôte d'un fichier de blocs d'adresses IP, tous les caractères situés après le premier point seront ignorés. Par exemple, si vous spécifiez bob-vm-1.bank.plc comme nom d'hôte, le nom d'hôte de la VM et le nom du nœud seront définis sur bob-vm-1 .
Lorsque la validation de l'ID de nœud est activée, l'approbateur CSR compare le nom du nœud au nom d'hôte indiqué dans les spécifications de la machine, et ne parvient pas à rapprocher le nom. L'approbateur rejette la requête de signature de certificat et le nœud ne parvient pas à amorcer la session.
Solution :
Cluster d'utilisateur
Désactivez la validation de l'ID de nœud en procédant comme suit:
- Ajoutez les champs suivants dans le fichier de configuration de votre cluster d'utilisateur:
disableNodeIDVerification: true
disableNodeIDVerificationCSRSigning: true
- Enregistrez le fichier et mettez à jour le cluster d'utilisateur en exécutant la commande suivante:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--config USER_CLUSTER_CONFIG_FILE
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 de votre cluster d'utilisateur.
Cluster d'administrateur
- Ouvrez la ressource personnalisée
OnPremAdminCluster pour la modifier:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
edit onpremadmincluster -n kube-system
- Ajoutez l'annotation suivante à la ressource personnalisée:
features.onprem.cluster.gke.io/disable-node-id-verification: enabled
- Modifiez le fichier manifeste
kube-controller-manager dans le plan de contrôle du cluster d'administrateur :
- Connectez-vous en SSH au nœud de plan de contrôle du cluster d'administrateur.
- Ouvrez le fichier manifeste
kube-controller-manager pour le modifier:
sudo vi /etc/kubernetes/manifests/kube-controller-manager.yaml
- Recherchez la liste de
controllers :
--controllers=*,bootstrapsigner,tokencleaner,-csrapproving,-csrsigning
- Mettez à jour cette section comme indiqué ci-dessous:
--controllers=*,bootstrapsigner,tokencleaner
- Ouvrez le contrôleur de l'API Deployment Cluster pour le modifier:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
edit deployment clusterapi-controllers -n kube-system
- Remplacez les valeurs de
node-id-verification-enabled et node-id-verification-csr-signing-enabled par false :
--node-id-verification-enabled=false
--node-id-verification-csr-signing-enabled=false
|
Installation, mises à niveau et mises à jour |
1.11.0-1.11.4 |
Échec du démarrage de la machine du plan de contrôle d'administrateur causé par le groupe de certificats du registre privé
La création/mise à niveau du cluster d'administrateur est bloquée indéfiniment dans le journal suivant et finit par expirer:
Waiting for Machine gke-admin-master-xxxx to become ready...
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.caCertPath in
the admin cluster config file.
Or upgrade to a version with the fix when available.
|
Mise en réseau |
1.10, 1.11.0-1.11.3, 1.12.0-1.12.2, 1.13.0 |
NetworkGatewayNodes marqué comme non opérationnel en raison d'un conflit de mise à jour simultanée de l'état
Dans networkgatewaygroups.status.nodes , certains nœuds basculent entre NotHealthy et Up .
Les journaux du pod ang-daemon exécuté sur ce nœud révèlent des erreurs répétées:
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 NotHealthy empêche le contrôleur d'attribuer des adresses IP flottantes supplémentaires au nœud. Cela peut entraîner une charge plus importante pour les autres nœuds ou un manque de redondance pour la haute disponibilité.
L'activité de Dataplane n'est pas affectée par les autres opérations.
Les conflits sur l'objet networkgatewaygroup entraînent l'échec de certaines mises à jour d'état en raison d'une erreur dans la gestion des nouvelles tentatives. Si un trop grand nombre de mises à jour d'état échoue, ang-controller-manager considère que le nœud a dépassé sa limite de temps de pulsation et le marque comme NotHealthy .
L'erreur de traitement des nouvelles tentatives a été corrigée dans les versions ultérieures.
Solution :
Effectuez la mise à niveau vers une version corrigée, si disponible.
|
Mises à niveau et mises à jour |
1.12.0-1.12.2, 1.13.0 |
Une condition de concurrence bloque la suppression d'objets machine pendant et la mise à jour ou la mise à niveau
Problème connu pouvant entraîner le blocage de la mise à niveau ou de la mise à jour du cluster dans l'attente de la suppression de l'ancien objet machine. En effet, le finaliseur ne peut pas être supprimé de l'objet machine. Cela affecte toute opération de mise à jour progressive des pools de nœuds.
Le problème est que la commande gkectl expire et que le message d'erreur suivant s'affiche:
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 des pods clusterapi-controller , les erreurs sont les suivantes:
$ 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 en cas d'exécution réussie, même sans ce problème. Dans la plupart des cas, elle peut se dérouler rapidement, mais dans de rares cas, elle peut rester bloquée dans cette condition de concurrence 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é, qui est bloqué lors de la suppression du finaliseur en raison de mises à jour très fréquentes d'autres contrôleurs.
Cela peut entraîner le délai avant expiration de la commande gkectl , mais le contrôleur n'arrête pas de rapprocher le cluster pour que le processus de mise à niveau ou de mise à jour se termine.
Solution :
Nous avons préparé plusieurs options d'atténuation pour ce problème, qui dépendent de votre environnement et de vos exigences.
Si vous rencontrez ce problème et que la mise à niveau ou la mise à jour ne peuvent toujours pas s'effectuer au bout d'un certain temps, contactez notre équipe d'assistance pour obtenir des mesures d'atténuation.
|
Installation, mises à niveau et mises à jour |
1.10.2, 1.11, 1.12, 1.13 |
Échec de la préparation de la validation de l'image de l'OS par gkectl
Échec de la commande gkectl prepare avec:
- 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 prepare comprenaient une validation incorrecte.
Solution :
Exécutez la même commande avec une option supplémentaire --skip-validation-os-images .
|
Installation |
1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13 |
L'URL vCenter avec le préfixe https:// ou http:// peut entraîner un échec de démarrage du cluster
Échec de la création du cluster d'administrateur avec:
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:// ou http:// du champ vCenter.Address du fichier YAML du cluster d'administrateur ou de la configuration du cluster d'utilisateur.
|
Installation, mises à niveau et mises à jour |
1,10, 1,11, 1,12, 1,13 |
Panique gkectl prepare sur util.CheckFileExists
gkectl prepare peut paniquer 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 prepare a créé le répertoire de certificats du registre privé avec une autorisation incorrecte.
Solution :
Pour résoudre ce problème, veuillez exécuter 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 et mises à jour |
1,10, 1,11, 1,12, 1,13 |
gkectl repair admin-master et la mise à niveau administrateur avec reprise 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 de tentatives ultérieures de mise à niveau de l'administrateur, telles qu'une coupure de courant du maître administrateur ou l'inaccessibilité de la VM.
Solution :
Si vous avez déjà rencontré ce scénario d'échec, contactez l'assistance.
|
Mises à niveau et mises à jour |
1,10, 1,11 |
La reprise de la mise à niveau du cluster d'administrateur peut entraîner l'absence du modèle de VM du plan de contrôle administrateur
Si la machine du plan de contrôle administrateur n'est pas recréée après la reprise d'une tentative de mise à niveau du cluster d'administrateur, 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 d'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 pourrait affecter les charges de travail
Dans la version 1.12.0, cgroup v2 (unifié) est activé par défaut pour les nœuds Container Optimized OS (COS). Cela peut entraîner une instabilité pour 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 sa publication.
|
Identité |
1,10, 1,11, 1,12, 1,13 |
Ressource personnalisée ClientConfig
gkectl update annule toutes 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-IP
La 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 d'un problème lié à l'élection du responsable de cert-manager/ca-injector
Vous pouvez constater un échec d'installation dû à cert-manager-cainjector dans une boucle de plantage lorsque le serveur d'API/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 contournement
Exécutez les commandes suivantes pour atténuer le problème.
Commencez par réduire le monitoring-operator pour ne pas annuler les modifications apportées au déploiement cert-manager :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
scale deployment monitoring-operator --replicas=0
Modifiez le déploiement cert-manager-cainjector pour désactiver l'élection du responsable, car une seule instance répliquée est en cours d'exécution. Elle n'est pas requise pour une seule instance répliquée:
# Add a command line flag for cainjector: `--leader-elect=false`
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit \
-n kube-system deployment cert-manager-cainjector
L'extrait de code YAML correspondant au déploiement de cert-manager-cainjector doit 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 monitoring-operator instances répliquées à 0 pour réduire les risques liés à ce dernier 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-operator pour les opérations du jour 2:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
scale deployment monitoring-operator --replicas=1
Après chaque mise à niveau, les modifications sont annulées. Répétez ces étapes pour atténuer le problème jusqu'à ce qu'il soit résolu dans une prochaine version.
|
VMware |
1,10, 1,11, 1,12, 1,13 |
Redémarrer ou mettre à niveau vCenter pour les versions antérieures à la version 7.0U2
Si 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 sur la VM de vCenter est incorrect et entraîne le passage de la machine à l'état Unavailable . Les nœuds sont alors réparés automatiquement pour en créer d'autres.
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. Ensuite, la reconnexion, ce qui force une 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 distant
Pour GKE sur VMware version 1.7.2 et ultérieures, les images de l'OS Ubuntu sont renforcées par le
benchmark CIS L1 Server.
Pour respecter la règle CIS "5.2.16 Assurez-vous que l'intervalle d'inactivité SSH est configuré", /etc/ssh/sshd_config dispose des paramètres suivants:
ClientAliveInterval 300
ClientAliveCountMax 0
L'objectif de ces paramètres est de mettre fin à une session cliente après cinq minutes d'inactivité. Cependant, la valeur ClientAliveCountMax 0 entraîne un comportement inattendu. Lorsque vous utilisez la session SSH sur le poste de travail administrateur ou sur 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. Votre commande peut être arrêtée avec le message suivant:
Connection to [IP] closed by remote host.
Connection to [IP] closed.
Solution :
Vous disposez des options suivantes :
Veillez à reconnecter votre session SSH.
|
Installation |
1,10, 1,11, 1,12, 1,13 |
Installation en conflit avec cert-manager
Dans les versions 1.13, monitoring-operator installera cert-manager dans l'espace de noms cert-manager . Si, pour certaines raisons, vous devez installer votre propre gestionnaire de certification, suivez les instructions suivantes afin d'éviter les conflits:
Vous n'avez besoin d'appliquer cette solution qu'une seule fois pour chaque cluster. Les modifications seront conservées lors de la mise à niveau du cluster.
Remarque: Lors de l'installation de votre propre cert-manager, un symptôme courant est que l'ancienne version ou l'image cert-manager (par exemple, v1.7.2) est rétablie. Cela est dû au fait que monitoring-operator tente de rapprocher cert-manager et de rétablir la version au cours du processus.
Solution :
É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 suivantes pour restaurer votre propre
cert-manager .
Restaurer votre propre cert-manager dans des clusters d'utilisateur
- Définissez le déploiement
monitoring-operator sur 0:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n USER_CLUSTER_NAME \
scale deployment monitoring-operator --replicas=0
- Définissez le scaling des déploiements
cert-manager gérés par monitoring-operator sur 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=0
- Ré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 votre cert-manager est installé dans l'espace de noms
cert-manager .
Sinon, copiez le certificat cert-manager.io/v1 metrics-ca et les ressources d'émetteur metrics-pki.cluster.local de cert-manager dans l'espace de noms des ressources de cluster du gestionnaire 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 certificat cert-manager dans les clusters d'administrateur
En général, vous ne devriez pas avoir besoin de réinstaller cert-manager dans les clusters d'administrateur, car les clusters d'administrateur n'exécutent que les charges de travail du plan de contrôle GKE sur VMware. Dans les rares cas où vous devez également installer votre propre cert-manager dans des clusters d'administrateur, veuillez suivre les instructions suivantes pour éviter les conflits. Veuillez noter que si vous êtes un client Apigee et que vous n'avez besoin que de cert-manager pour Apigee, vous n'avez pas besoin d'exécuter les commandes du cluster d'administrateur.
- Effectuez le scaling du déploiement
monitoring-operator à 0.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n kube-system scale deployment monitoring-operator --replicas=0
- Mettez à l'échelle les déploiements
cert-manager gérés par monitoring-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=0
- Ré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 votre cert-manager est installé dans l'espace de noms
cert-manager .
Sinon, copiez le certificat cert-manager.io/v1 metrics-ca et les ressources d'émetteur metrics-pki.cluster.local de cert-manager dans l'espace de noms des ressources de cluster du gestionnaire 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 images Docker, containerd et runc des images de l'OS Ubuntu livrées avec GKE sur VMware sont épinglées à des versions spéciales à l'aide de Ubuntu PPA. Cela garantit que toutes les modifications apportées à l'environnement d'exécution du conteneur seront qualifiées par GKE sur VMware avant chaque version.
Cependant, les versions spéciales ne sont pas connues de l'outil Ubuntu CVE Tracker, qui est utilisé comme flux de failles par divers outils d'analyse CVE. Par conséquent, vous verrez des faux positifs dans les résultats d'analyse des failles de Docker, containerd et runc.
Par exemple, les faux positifs suivants peuvent apparaître dans les résultats de votre analyse CVE. Ces failles CVE sont déjà corrigées dans les dernières versions de correctif de GKE sur VMware.
Reportez-vous aux notes de version] pour découvrir les correctifs CVE.
Solution :
L'organisation est au courant de ce problème, et le correctif est disponible à l'adresse
https://github.com/canonical/sec-cvescan/issues/73.
|
Mises à niveau et 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 vers la version 1.10, vous remarquerez peut-être que kubectl exec , kubectl log et le webhook sur les clusters d'utilisateur peuvent être indisponibles pendant une courte période. Ce temps d'arrêt peut durer jusqu'à une minute. En effet, la requête entrante (kubectl exec, kubectl log et webhook) est gérée par le kube-apiserver pour le cluster d'utilisateur. L'utilisateur kube-apiserver est un
Statefulset. Dans un cluster standard, il n'existe qu'une seule instance répliquée pour Statefulset. Lors de la mise à niveau, il est donc possible que l'ancien kube-apiserver ne soit pas disponible alors que le nouveau kube-apiserver ne l'est pas encore.
Solution :
Ce temps d'arrêt ne se produit que pendant le processus de mise à niveau. Si vous souhaitez réduire le temps d'arrêt pendant la mise à niveau, nous vous recommandons de passer à des clusters à haute disponibilité.
|
Installation, mises à niveau et mises à jour |
1,10, 1,11, 1,12, 1,13 |
Échec de la vérification de l'aptitude de Konnectivity dans le diagnostic du cluster à haute disponibilité après la création ou la mise à niveau du cluster
Si vous créez ou mettez à niveau un cluster à haute disponibilité et que vous remarquez que la vérification de l'aptitude à la connectivité a échoué dans le diagnostic du cluster, dans la plupart des cas, cela n'affectera pas le fonctionnement de GKE sur VMware (kubectl exec, kubectl kubectl log et webhook). Cela est dû au fait qu'une ou deux instances répliquées de type "konnectivity" 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 à une heure, puis réexécutez le diagnostic du cluster.
|
Système d'exploitation |
1,7, 1,8, 1,9, 1,10, 1,11 |
/etc/cron.daily/aide Problème de pic de mémoire et de processeur
À partir de la version 1.7.2 de GKE sur VMware, les images de l'OS Ubuntu sont renforcées par le benchmark CIS L1 Server.
Par conséquent, le script Cron /etc/cron.daily/aide a été installé de sorte qu'une vérification aide soit planifiée, de manière à s'assurer que la règle de serveur CIS L1 "1.4.2 Assurez-vous que l'intégrité du système de fichiers est régulièrement vérifiée" est suivie.
La job Cron'exécute tous les jours à 6h25 (UTC). En fonction du nombre de fichiers sur le système de fichiers, vous pouvez rencontrer des pics d'utilisation du processeur et de la mémoire à ce moment-là, causés par ce 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 GKE sur VMware 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-operator peut ne pas créer le fichier ConfigMap gke-metrics-agent-conf , ce qui peut entraîner une boucle de plantage de gke-connect-agent pods.
Le problème sous-jacent est que les règles de pare-feu distribuées NSX-T avec état 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 GKE sur VMware qui utilisent Seesaw. Vous pouvez rencontrer des problèmes de connexion similaires dans vos propres applications lorsqu'elles créent des objets Kubernetes volumineux dont la taille dépasse 32 Ko.
Solution :
Suivez
ces instructions pour désactiver les règles de pare-feu distribuées NSX-T ou pour 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 de sorte qu'il réinitialise 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 en cas de panne d'une instance de serveur.
|
Journalisation et surveillance |
1,10, 1,11, 1,12, 1,13, 1,14, 1,15 |
Facturation de surveillance inattendue
Pour les versions 1.10 à 1.15 de GKE sur VMware, certains clients ont constaté une facturation anormalement élevée pour Metrics volume sur la page Facturation. Ce problème ne vous concerne que si toutes les conditions suivantes s'appliquent:
- 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 d'Anthos 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 voyez des frais facturés pour des métriques indésirables avec le préfixe de nom external.googleapis.com/prometheus et que enableStackdriverForApplications est défini sur "true" dans la réponse de kubectl -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 une version ultérieure, de cesser d'utiliser l'option enableStackdriverForApplications et de passer à la nouvelle solution de surveillance des applications managed-service-for-prometheus, qui ne repose plus sur l'annotation prometheus.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 options enableCloudLoggingForApplications et enableGMPForApplications , respectivement.
Pour arrêter d'utiliser l'indicateur enableStackdriverForApplications , ouvrez l'objet "stackdriver" afin de le modifier:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Supprimez la ligne enableStackdriverForApplications: true , enregistrez et fermez l'éditeur.
Si vous ne pouvez pas quitter la collecte de métriques basées 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=true du pod ou du service. Si l'annotation est ajoutée par Anthos Service Mesh, envisagez de configurer Anthos 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 GKE sur VMware peut échouer si les rôles personnalisés sont liés au mauvais niveau d'autorisation.
Lorsque la liaison de rôle est incorrecte, la création d'un disque de données vSphere avec govc se bloque et le disque est 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 contrôleur de domaine (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ôles, consultez la section
Droits de compte d'utilisateur 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 constaterez peut-être un trafic réseau important vers monitoring.googleapis.com , même dans un nouveau cluster ne recevant aucune charge de travail 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 a été résolu dans les versions 1.10.2 et 1.9.5.
Solution :
Afficher la procédure de contournement
Effectuez la mise à niveau vers la version 1.10.2/1.9.5 ou une version ultérieure.
Pour résoudre ce problème dans une version antérieure, procédez comme suit :
- Effectuer un scaling à la baisse de "stackdriver-operator" :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system \
scale deployment stackdriver-operator --replicas=0
Remplacez USER_CLUSTER_KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster d'utilisateur.
- Ouvrez le fichier ConfigMap
gke-metrics-agent-conf pour le modifier :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system \
edit configmap gke-metrics-agent-conf
- Augmentez 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: 200
- Fermez la session de modification.
- Remplacez la version du DaemonSet
gke-metrics-agent par 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-agent présente des erreurs CrashLoopBackOff récurrentes
Pour GKE sur VMware version 1.10 et ultérieures, le DaemonSet "gke-metrics-agent" présente des erreurs CrashLoopBackOff fréquentes lorsque "enableStackdriverForApplications" est défini sur "true" dans l'objet "stackdriver".
Solution :
Pour atténuer ce problème, désactivez la collecte des métriques d'application en exécutant les commandes suivantes. Ces commandes ne désactivent pas la collecte des journaux d'application.
- Pour éviter l'annulation des modifications suivantes, réduisez la taille de
stackdriver-operator :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system scale deploy stackdriver-operator \
--replicas=0
Remplacez USER_CLUSTER_KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster d'utilisateur.
- Ouvrez le fichier ConfigMap
gke-metrics-agent-conf pour le modifier :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system edit configmap gke-metrics-agent-conf
- Sous
services.pipelines , mettez en commentaire toute la section metrics/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/metrics
- Fermez 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 bord
Si des métriques obsolètes sont utilisées dans vos tableaux de bord OOTB, des graphiques vides s'affichent. Pour rechercher 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 métriques de remplacement.
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 dans le tableau de bord Google Cloud Monitoring. Réinstallez l'état du nœud GKE On-Prem en suivant
ces instructions.
- Supprimez "Utilisation des nœuds GKE On-Prem" dans le tableau de bord Google Cloud Monitoring. Réinstallez "Utilisation des nœuds GKE On-Prem" en suivant
ces instructions.
- Supprimez l'état "État des VM vSphere GKE On-Prem" dans le tableau de bord Google Cloud Monitoring. Réinstallez l'état "État des VM vSphere de GKE On-Prem" en suivant
ces instructions.
Cet abandon est dû à la mise à niveau de l'agent
kube-state-metrics de la version 1.9 vers la version 2.4, qui est requise pour Kubernetes 1.22. Vous pouvez remplacer toutes les métriques kube-state-metrics obsolètes, portant le préfixe kube_ , dans vos règles d'alerte ou vos tableaux de bord personnalisés.
|
Journalisation et surveillance |
1,10, 1,11, 1,12, 1,13 |
Données de métriques inconnues dans Cloud Monitoring
Pour GKE sur VMware 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
Les autres types de métriques pouvant contenir des métriques récapitulatives non pertinentes sont les suivantes : :
apiserver_admission_step_admission_duration_seconds_summary
go_gc_duration_seconds
scheduler_scheduling_duration_seconds
gkeconnect_http_request_duration_seconds_summary
alertmanager_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-agent pour le moment.
|
Journalisation et surveillance |
1,10, 1,11, 1,12, 1,13 |
Métriques manquantes sur certains nœuds
Vous constaterez peut-être que les métriques suivantes sont manquantes sur certains nœuds, mais pas tous:
kubernetes.io/anthos/container_memory_working_set_bytes
kubernetes.io/anthos/container_cpu_usage_seconds_total
kubernetes.io/anthos/container_network_receive_bytes_total
Solution :
Pour résoudre ce problème, suivez la procédure ci-dessous. Pour les [version 1.9.5+, 1.10.2+, 1.11.0]: augmentez le nombre de processeurs pour gke-metrics-agent en suivant les étapes 1 à 4.
- Ouvrez votre ressource
stackdriver pour la modifier :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system edit stackdriver stackdriver
- Pour faire passer la demande de processeur pour
gke-metrics-agent de 10m à 50m , la limite de processeur de 100m à 200m ajoutez la section resourceAttrOverride suivante au fichier manifeste stackdriver :
spec:
resourceAttrOverride:
gke-metrics-agent/gke-metrics-agent:
limits:
cpu: 100m
memory: 4608Mi
requests:
cpu: 10m
memory: 200Mi
Votre 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: 200Mi
- Enregistrez 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étecte cpu: 50m si vos modifications ont été appliquées.
|
Journalisation et surveillance |
1.11.0-1.11.2, 1.12.0 |
Métriques de programmeur et de 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 programmeur 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 :
Effectuez une mise à niveau vers la version 1.11.3 ou ultérieure, la version 1.12.1 ou ultérieure, ou la version 1.13 ou ultérieure.
|
|
1.11.0-1.11.2, 1.12.0 |
Métriques de programmeur et de gestionnaire de contrôleurs manquantes dans le cluster d'utilisateur
Si votre cluster d'utilisateur est concerné par ce problème, il manque les métriques du programmeur et du gestionnaire de contrôleurs. 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 GKE sur VMware 1.13.0 et versions ultérieures.
Mettez à niveau votre cluster vers une version avec le correctif.
|
Installation, mises à niveau et mises à jour |
1,10, 1,11, 1,12, 1,13 |
Échec de l'enregistrement du cluster d'administrateur lors de la création
Si vous créez un cluster d'administrateur pour la version 1.9.x ou 1.10.0, et si le cluster d'administrateur ne parvient pas à s'enregistrer avec la spécification gkeConnect fournie lors de sa création, l'erreur suivante s'affiche.
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 tentez ultérieurement de mettre à niveau le cluster d'administrateur vers la version 1.10.y.
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 contournement
Si 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 admin pour enregistrer le cluster d'administrateur avec la clé de compte de service appropriée.
- Créez un compte de service dédié pour l'application de correctifs à 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
EOF
Remplacez ADMIN_CLUSTER_KUBECONFIG par le chemin d'accès au fichier kubeconfig de votre cluster d'administrateur.
- Exécutez les commandes suivantes 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/status
- Réessayez 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-checkpoint
Remplacez 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 du service d'identité GKE peut entraîner le redémarrage imprévisible de l'agent Connect
Si vous utilisez la fonctionnalité GKE Identity Service pour gérer
GKE Identity Service ClientConfig, 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:
|
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 ne fonctionne pas par défaut dans Cisco ACI en raison de l'apprentissage des adresses IP dans le plan de données.
Solution :
Une solution de contournement possible consiste à désactiver l'apprentissage des adresses IP en ajoutant l'adresse IP Seesaw en tant qu'adresse IP virtuelle L4-L7 dans l'APIC (Application Policy Infrastructure Controller) de Cisco.
Vous pouvez configurer l'option d'adresse IP virtuelle L4 à L7 en accédant à Tenant > Application Profiles > Application EPG (Tenant > Profils d'application > EPG d'application) ou uSeg EPG. Si vous ne désactivez pas l'apprentissage des adresses IP, les points de terminaison des adresses IP passeront d'un emplacement à l'autre dans 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.0
VMWare a récemment identifié des problèmes critiques avec les versions suivantes de vSphere 7.0 Update 3:
- vSphere ESXi 7.0 Update 3 (build 18644231)
- vSphere ESXi 7.0 Update 3a (build 18825058)
- vSphere ESXi 7.0 Update 3b (build 18905247)
- vSphere vCenter 7.0, mise à niveau 3b (version 18901211)
Solution :
VMWare a depuis supprimé ces versions. Vous devez mettre à niveau vos serveurs 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 exec dans le pod exécuté sur des nœuds COS
Pour les pods exécutés sur des nœuds utilisant des images COS (Container-Optimized OS), vous ne pouvez pas installer le volume emptyDir en tant que exec . Il s'installe en tant que noexec et 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
Et dans le pod de test, si vous exécutez mount | grep test-volume , l'option noexec s'affiche:
/dev/sda1 on /test-volume type ext4 (rw,nosuid,nodev,noexec,relatime,commit=30)
Solution :
Afficher la procédure de contournement
Appliquez 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 et mises à jour |
1,10, 1,11, 1,12, 1,13 |
La mise à jour des instances répliquées du pool de nœuds du cluster ne fonctionne pas une fois l'autoscaling désactivé sur le pool de nœuds
Les instances répliquées du pool de nœuds ne sont pas mises à jour une fois que l'autoscaling est activé et désactivé sur un pool de nœuds.
Solution :
Suppression des annotations cluster.x-k8s.io/cluster-api-autoscaler-node-group-max-size et cluster.x-k8s.io/cluster-api-autoscaler-node-group-min-size du déploiement de 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, dans les tableaux de bord de surveillance prêts à l'emploi, le tableau de bord d'état des pods Windows et le tableau de bord d'état des nœuds Windows affichent également les données des clusters Linux. En effet, les métriques de nœud et de pod Windows sont également exposées sur les clusters Linux.
|
Journalisation et surveillance |
1.10, 1.11, 1.12 |
stackdriver-log-forwarder en constante CrashLoopBackOff
Pour GKE sur VMware versions 1.10, 1.11 et 1.12, le DaemonSet stackdriver-log-forwarder peut présenter des erreurs CrashLoopBackOff lorsque des journaux mis en mémoire tampon ne fonctionnent pas sur le disque.
Solution :
Pour atténuer ce problème, nous devons nettoyer les journaux en mémoire tampon sur le nœud.
- Pour éviter tout comportement inattendu, réduisez la taille 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 au fichier kubeconfig du cluster d'utilisateur.
- Déployez le DaemonSet de nettoyage pour nettoyer les fragments rompus:
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
EOF
- Pour vous assurer que le DaemonSet de nettoyage a nettoyé tous les fragments, vous pouvez exécuter les commandes suivantes. Le résultat des deux commandes doit correspondre au nombre de nœuds dans le 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 -l
- Supprimez le DaemonSet de nettoyage:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system delete ds fluent-bit-cleanup
- Reprendre
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-forwarder n'envoie pas de journaux à Cloud Logging
Si vous ne voyez pas dans Cloud Logging les journaux de vos clusters et que vous remarquez l'erreur suivante 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 Logging, ce qui empêche stackdriver-log-forwarder d'envoyer des journaux.
Ce problème se produit dans toutes les versions de GKE sur VMware.
Solution :
Pour atténuer ce problème, vous devez augmenter la limite de ressources de l'agent Logging.
- Ouvrez votre ressource
stackdriver pour la modifier :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system edit stackdriver stackdriver
- Pour augmenter la demande de ressources de processeur pour
stackdriver-log-forwarder , ajoutez la section resourceAttrOverride suivante au fichier manifeste stackdriver :
spec:
resourceAttrOverride:
stackdriver-log-forwarder/stackdriver-log-forwarder:
limits:
cpu: 1200m
memory: 600Mi
requests:
cpu: 600m
memory: 600Mi
Votre 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: 600Mi
- Enregistrez 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étecte cpu: 1200m si vos modifications ont été appliquées.
|
Sécurité |
1.13 |
Le service Kubelet sera temporairement indisponible après NodeReady
le nœud est prêt pendant une courte période,
mais le certificat du serveur kubelet ne l'est pas. kubectl exec et kubectl logs ne sont pas disponibles pendant ces dizaines de secondes.
En effet, le nouvel approbateur de certificat du serveur a besoin d'un certain temps pour voir les adresses IP valides mises à jour du nœud.
Ce problème n'affecte que le certificat du serveur kubelet et n'affecte pas la planification des pods.
|
Mises à niveau et mises à jour |
1.12 |
La mise à niveau partielle du cluster d'administrateur ne bloque pas la mise à niveau ultérieure du cluster d'utilisateur
Échec de la mise à niveau du cluster d'utilisateur avec:
.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'a pas été entièrement mis à niveau et la version d'é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 échoue en raison d'un problème de décalage de version.
Solution :
Effectuez d'abord la mise à niveau du 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 |
Datastore signale à tort un espace disponible insuffisant
Échec de la commande gkectl diagnose cluster avec:
Checking VSphere Datastore FreeSpace...FAILURE
Reason: vCenter datastore: [DATASTORE_NAME] insufficient FreeSpace, requires at least [NUMBER] GB
La validation de l'espace disponible 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 ignorer la validation en utilisant --skip-validation-infra .
|
Opérations, mise en réseau |
1.11, 1.12.0-1.12.1 |
Vous ne pourrez peut-être pas ajouter de cluster d'utilisateur si votre cluster d'administrateur est configuré avec une configuration d'équilibreur de charge MetalLB.
Le processus de suppression du cluster d'utilisateur peut rester bloqué pour une raison quelconque, ce qui entraîne une invalidation du ConfigMap de MatalLB. Il ne sera pas possible d'ajouter un nouveau 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'utilisateur
Si osImageType utilise cos pour le cluster d'administrateur et que gkectl check-config est exécuté après la création du cluster d'administrateur et avant celle du cluster d'utilisateur, il échouera:
Failed to create the test VMs: VM failed to get IP addresses on the network.
La VM de test créée par défaut pour le cluster d'utilisateur check-config utilise le même osImageType que celui du cluster d'administrateur. La VM de test actuellement n'est pas encore compatible avec COS.
Solution :
Pour éviter la lenteur de la vérification préliminaire 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 |
Impossible d'atteindre les clusters d'utilisateur dans Grafana du cluster d'administrateur
Ce 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 GKE sur VMware. Elle est due à une non-concordance des certificats client pushprox dans les clusters d'utilisateur et de la liste d'autorisation du serveur pushprox du cluster d'administrateur.
Le problème est que le client pushprox dans les clusters d'utilisateur imprime des journaux d'erreurs semblables à ce qui 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 contournement
procédez comme suit:
- Scaling à la baisse du 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=0
- Modifiez le ConfigMap
pushprox-server-rbac-proxy-config dans l'espace de noms kube-system du cluster d'administrateur.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--namespace kube-system edit cm pushprox-server-rbac-proxy-config
Recherchez la ligne principals de l'écouteur external-pushprox-server-auth-proxy et corrigez la principal_name pour tous les clusters d'utilisateur en supprimant la sous-chaîne kube-system de pushprox-client.metrics-consumers.kube-system.cluster. . La nouvelle configuration doit se présenter comme 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-server dans le cluster d'administrateur et le déploiement pushprox-client dans 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-client
- Les étapes précédentes devraient résoudre le problème. Une fois le cluster mis à niveau vers la version 1.12.2 et une fois le problème résolu, effectuez un scaling à la hausse du cluster d'administrateur kube-system monitoring-operator 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-master ne fournit pas le modèle de VM à utiliser pour la récupération
Échec de la commande gkectl repair admin-master avec:
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-master ne peut pas extraire le modèle de VM à utiliser pour réparer la VM du plan de contrôle administrateur si son nom se termine par les caractères t , m , p ou l .
Solution :
Réexécutez 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 que pour les clusters d'utilisateur via GKE Hub.
Il est recommandé d'avoir 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 Cloud Audit Logs, afin que le cluster d'administrateur dispose de l'autorisation requise.
Toutefois, si 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 peuvent pas être injectés dans Google Cloud. Le symptôme est une série d'erreurs Permission Denied dans le pod audit-proxy du cluster d'administrateur.
Solution :
Afficher la procédure de contournement
Pour résoudre ce problème, vous pouvez configurer l'autorisation en interagissant avec la fonctionnalité Hub cloudauditlogging :
- Commencez par vérifier les comptes de service existants ajoutés à la liste d'autorisation 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/cloudauditlogging
- Selon 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'est ajouté à la liste d'autorisation pour cet ID de projet. Vous pouvez ajouter un compte de service à la liste d'autorisation en activant la fonctionnalité Hub cloudauditlogging :
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 dans allowlistedServiceAccounts , cela signifie que des comptes de service existants sont autorisés pour ce projet. Vous pouvez soit utiliser un compte de service de cette liste dans votre cluster, soit ajouter un 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 champ description de la réponse ou sauvegardez la liste d'autorisation actuelle, supprimez la fonctionnalité du hub cloudauditlogging, puis réactivez-la en suivant à nouveau l'étape 1 de cette section. Vous pouvez supprimer la fonctionnalité Hub cloudauditlogging de l'une des manières suivantes:
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 :
|
Opérations, sécurité |
1.11 |
Échec de la vérification du certificat par gkectl diagnose
Si votre poste de travail n'a pas accès aux nœuds de calcul du cluster d'utilisateur, il recevra 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 d'administrateur, 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 :
Si vous pouvez ignorer ces messages.
|
Système d'exploitation |
1,8, 1,9, 1,10, 1,11, 1,12, 1,13 |
/var/log/audit/ remplit 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écutant sudo du -h -d 1 /var/log/audit .
Certaines commandes gkectl sur le poste de travail administrateur, par exemple gkectl diagnose snapshot , contribuent à l'utilisation de l'espace disque.
Depuis la version 1.8 de GKE sur VMware, l'image Ubuntu est renforcée par 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 automatiquement supprimés", garantit le paramètre auditd max_log_file_action = keep_logs . Toutes les règles d'audit sont ainsi conservées sur le disque.
Solution :
Afficher la procédure de contournement
Poste de travail administrateur
Pour le poste 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 permettrait à auditd d'alterner automatiquement ses journaux une fois qu'il a généré plus de 250 fichiers (chacun d'une taille 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 effectuer de mise à niveau vers 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 la configuration auditd enfreindrait la règle CIS de niveau 2 "4.1.2.2 Assurez-vous que les journaux d'audit ne sont pas automatiquement supprimés".
|
Mise en réseau |
1.10, 1.11.0-1.11.3, 1.12.0-1.12.2, 1.13.0 |
NetworkGatewayGroup L'adresse IP flottante est en conflit avec l'adresse du nœud
Les utilisateurs ne peuvent pas créer ni mettre à jour des objets NetworkGatewayGroup en raison de l'erreur de validation suivante du webhook:
[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 s'associer par erreur à une adresse IP flottante attribuée au nœud et signaler cette adresse en tant qu'adresse de nœud dans node.status.addresses . Le webhook de validation vérifie les adresses IP flottantes NetworkGatewayGroup par rapport à tous les node.status.addresses du cluster et considère cela comme un conflit.
Solution :
Dans le cluster où la création ou la mise à jour des objets NetworkGatewayGroup échoue, désactivez temporairement le webhook de validation de l'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.yaml
- Modifiez la configuration du webhook:
kubectl -n kube-system edit validatingwebhookconfiguration \
ang-validating-webhook-configuration
- Supprimez l'élément
vnetworkgatewaygroup.kb.io de la liste des configurations du webhook, puis fermez la page pour appliquer les modifications.
- Créez ou modifiez votre objet
NetworkGatewayGroup .
- Réappliquez la configuration du webhook d'origine:
kubectl -n kube-system apply -f webhook-config.yaml
|
Installation, mises à niveau et mises à jour |
1.10.0-1.10.2 |
Création ou mise à niveau du délai avant expiration du cluster d'administrateur
Lors d'une tentative de mise à niveau du cluster d'administrateur, la VM du plan de contrôle administrateur peut se bloquer 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 GKE sur VMware tente d'obtenir l'adresse IP du nœud dans le script de démarrage, il utilise grep -v
ADMIN_CONTROL_PLANE_VIP pour 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 comportant un préfixe d'adresse IP virtuelle du plan de contrôle, ce qui entraîne 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 du plan de contrôle du cluster d'administrateur a le même préfixe (par exemple, 192.168.1.254), la VM du plan de contrôle sera 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 :
|
Système d'exploitation, mises à niveau et 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 du maître d'administrateur
DataDisk ne peut pas être installé correctement sur le nœud maître du cluster d'administrateur lorsque vous utilisez une 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 du maître d'administrateur. (le cluster d'administrateur utilisant l'image COS est une fonctionnalité en preview)
Solution :
Recréer le cluster d'administrateur en définissant osImageType 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 d'administrateur.
df -h résultat contient /dev/sdb1 98G 209M 93G
1% /opt/data . Et lsblk résultat contient -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 .local
Dans GKE sur VMware version 1.10.0, les résolutions de noms sur Ubuntu sont acheminées vers l'écoute locale résolue par système sur 127.0.0.53 par défaut. En effet, sur l'image Ubuntu 20.04 utilisée dans la version 1.10.0, /etc/resolv.conf est lié par symbolisation à /run/systemd/resolve/stub-resolv.conf , qui pointe vers le bouchon DNS de l'hôte local 127.0.0.53 .
Par conséquent, la résolution de noms DNS localhost refuse de rechercher les noms avec un suffixe .local dans les serveurs DNS en amont (spécifiés dans /run/systemd/resolve/resolv.conf ), sauf si ces noms sont 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, kubelet échoue lors de l'extraction d'images d'un registre privé avec un suffixe .local . La spécification d'une adresse vCenter avec un suffixe .local ne fonctionne pas sur un poste de travail administrateur.
Solution :
Pour éviter ce problème pour les nœuds de cluster, spécifiez le champ searchDomainsForDNS dans le fichier de configuration de votre cluster d'administrateur et le fichier de configuration du cluster d'utilisateur afin d'inclure les domaines.
Actuellement, gkectl update ne permet pas encore de mettre à jour le champ searchDomainsForDNS .
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 le bouchon local résolu par le système en remplaçant le lien symbolique de /etc/resolv.conf par /run/systemd/resolve/stub-resolv.conf (qui contient le bouchon local 127.0.0.53 ) par /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, gkeadm ne permet pas de spécifier des domaines de recherche. Vous devez donc contourner ce problème à l'aide de cette étape manuelle.
Cette solution ne s'applique pas lors de la recréation de VM. Vous devez appliquer à nouveau cette solution de contournement chaque fois que les VM sont recréées.
|
Installation, système d'exploitation |
1.10 |
L'adresse IP du pont Docker utilise 172.17.0.1/16 au lieu de 169.254.123.1/24
GKE sur VMware spécifie un sous-réseau dédié pour l'adresse IP du pont Docker qui utilise --bip=169.254.123.1/24 , de sorte qu'il ne réserve pas le sous-réseau 172.17.0.1/16 par défaut. Toutefois, dans la version 1.10.0, la configuration Docker personnalisée a été ignorée en raison d'un bug dans l'image de l'OS Ubuntu.
Par conséquent, Docker choisit le 172.17.0.1/16 par défaut comme sous-réseau d'adresse IP de pont. Cela peut entraîner un conflit d'adresses IP si une charge de travail est déjà en cours d'exécution dans cette plage d'adresses IP.
Solution :
Pour contourner ce problème, vous devez renommer le fichier de configuration systemd suivant pour Dockerd, puis redémarrer 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 docker
Vérifiez que Docker sélectionne l'adresse IP de liaison correcte :
ip a | grep docker0
Cette solution ne s'applique pas lors de la recréation de VM. Vous devez appliquer à nouveau cette solution de contournement chaque fois que les VM sont recréées.
|
Mises à niveau et mises à jour |
1.11 |
Passer à la version 1.11 bloquée par Stackdriver readiness
Dans GKE sur VMware version 1.11.0, la définition des ressources personnalisées liées à la journalisation et à la surveillance a été modifiée:
- Le nom de groupe de la ressource personnalisée
stackdriver (addons.sigs.k8s.io ) a été remplacé par addons.gke.io .
- Le nom du groupe des ressources personnalisées
monitoring et metricsserver (addons.k8s.io ) a été remplacé par addons.gke.io .
- Les spécifications des ressources ci-dessus commencent à être évaluées par rapport à son schéma. En particulier, les spécifications resourceAttrOverride et storageSizeOverride dans la ressource personnalisée
stackdriver doivent comporter un type de chaîne dans les valeurs des demandes et limites de taille de processeur, de mémoire et de stockage.
Les changements de nom de groupe sont apportés pour se conformer aux mises à jour CustomResourceDefinition dans Kubernetes 1.22.
Aucune action n'est requise de votre part si vous ne disposez pas d'une logique supplémentaire pour appliquer ou modifier les ressources personnalisées concernées. Le processus de mise à niveau de GKE sur VMware 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, une attention particulière est requise. 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
Ensuite, assurez-vous que les valeurs de spécification resourceAttrOverride et storageSizeOverride sont 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: 3000Mi
Dans le cas contraire, les modifications ne seront pas prises en compte et risquent d'entraîner un état inattendu dans les composants de journalisation et de surveillance. Les symptômes possibles sont les suivants:
- Journaux d'erreurs de rapprochement 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 selon la spécification Stackdriver CR était déjà présent avant la mise à niveau. Pour contourner ce problème, vous pouvez modifier manuellement la RS Stackdriver sous l'ancien nom de groupe kubectl edit stackdrivers.addons.sigs.k8s.io stackdriver , puis procéder comme suit:
- Définir les demandes et les limites de ressources sur le type de chaîne
- Supprimez toute annotation
addons.gke.io/migrated-and-deprecated: true , le cas échéant.
Ensuite, reprenez ou relancez le processus de mise à niveau.
|
Système d'exploitation |
1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16 |
Les VM COS n'affichent aucune adresse IP lorsque les VM sont déplacées lors d'un arrêt normal 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 le 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 cible
Le GARP périodique (ARP gratuit) envoyé par Seesaw toutes les 20 secondes ne définit pas l'adresse IP cible dans l'en-tête ARP. Certains réseaux peuvent ne pas accepter de tels paquets (comme Cisco ACI). Cela peut entraîner un temps d'arrêt du service plus long après la récupération d'un split-brain (en raison de la suppression de paquets VRRP).
Solution :
Déclenchez un basculement Seeaw en exécutant sudo seesaw -c failover sur l'une des VM Seesaw. Cela devrait restaurer le trafic.
|
Système d'exploitation |
1.16, 1.28.0-1.28.200 |
Le 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"
|