Les sections suivantes décrivent les problèmes que vous pouvez rencontrer lors de l'utilisation de GKE On-Prem et comment les résoudre.
Avant de commencer
Consultez les sections suivantes avant de commencer à résoudre un problème.
Diagnostiquer des problèmes de cluster à l'aide de gkectl
Utilisez les commandes gkectl diagnose
pour identifier les problèmes de cluster et partager des informations de cluster avec Google. Consultez la page Diagnostiquer les problèmes de cluster.
Comportement de journalisation par défaut
Pour gkectl
et gkeadm
, l'utilisation des paramètres de journalisation par défaut est suffisante :
-
Par défaut, les entrées de journal sont enregistrées comme suit :
-
Pour
gkectl
, le fichier journal par défaut est/home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log
, et le fichier est lié symboliquement au fichierlogs/gkectl-$(date).log
dans le répertoire local où vous exécutezgkectl
. -
Pour
gkeadm
, le fichier journal par défaut estlogs/gkeadm-$(date).log
dans le répertoire local où vous exécutezgkeadm
.
-
Pour
- Toutes les entrées de journal sont enregistrées dans le fichier journal, même si elles ne sont pas affichées sur le terminal (lorsque
--alsologtostderr
a la valeurfalse
). - Le niveau de verbosité
-v5
(par défaut) couvre toutes les entrées de journal requises par l'équipe d'assistance. - Le fichier journal contient également la commande exécutée et le message d'échec.
Nous vous recommandons d'envoyer le fichier journal à l'équipe d'assistance lorsque vous avez besoin d'aide.
Spécifier un emplacement autre que celui par défaut pour le fichier journal
Pour spécifier un emplacement autre que celui par défaut pour le fichier journal gkectl
, utilisez l'option --log_file
. Le fichier journal que vous spécifiez ne sera pas lié symboliquement au répertoire local.
Pour spécifier un emplacement autre que celui par défaut pour le fichier journal gkeadm
, utilisez l'option --log_file
.
Localiser des journaux de l'API Cluster dans le cluster d'administrateur
Si une VM ne démarre pas après le démarrage du plan de contrôle d'administrateur, vous pouvez essayer de la déboguer en inspectant les journaux des contrôleurs de l'API Cluster dans le cluster d'administrateur :
Recherchez le nom du pod des contrôleurs d'API Cluster dans l'espace de noms
kube-system
, où [ADMIN_CLUSTER_KUBECONFIG] est le chemin d'accès au fichier kubeconfig du cluster d'administrateur :kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system get pods | grep clusterapi-controllers
Ouvrez les journaux du pod, où [POD_NAME] correspond au nom du pod. Vous pouvez éventuellement utiliser
grep
ou un outil similaire pour rechercher les erreurs :kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system logs [POD_NAME] vsphere-controller-manager
Installation
Résoudre les problèmes F5 BIG-IP à l'aide du fichier kubeconfig du nœud de plan de contrôle du cluster d'administrateur
Après une installation, GKE On-Prem génère un fichier kubeconfig nommé internal-cluster-kubeconfig-debug
dans le répertoire d'accueil de votre poste de travail administrateur. Ce fichier kubeconfig est identique à celui de votre cluster d'administrateur, sauf qu'il pointe directement vers le nœud de plan de contrôle du cluster d'administrateur, où s'exécute le plan de contrôle d'administrateur. Vous pouvez utiliser le fichier internal-cluster-kubeconfig-debug
pour résoudre les problèmes F5 BIG-IP.
Échec de la validation de gkectl check-config
: impossible de trouver les partitions F5 BIG-IP
- Symptômes
La validation échoue, car les partitions F5 BIG-IP sont introuvables, même si elles existent.
- Causes probables
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.
Échec de gkectl prepare --validate-attestations
: impossible de valider l'attestation de version
- Symptômes
L'exécution de
gkectl prepare
avec l'option facultative--validate-attestations
renvoie l'erreur suivante :could not validate build attestation for gcr.io/gke-on-prem-release/.../...: VIOLATES_POLICY
- Causes probables
Une attestation peut ne pas exister pour la ou les images affectées.
- Solution
Essayez à nouveau de télécharger et de déployer le fichier OVA du poste de travail administrateur, comme indiqué sur la page Créer un poste de travail administrateur. Si le problème persiste, contactez Google pour obtenir de l'aide.
Déboguer à l'aide des journaux du cluster d'amorçage
Lors de l'installation, GKE On-Prem crée un cluster d'amorçage temporaire. Après une installation réussie, GKE On-Prem supprime le cluster d'amorçage, vous laissant ainsi votre cluster d'administrateur et votre cluster d'utilisateur. En règle générale, vous ne devriez avoir aucune raison d'interagir avec ce cluster.
Si une erreur se produit lors d'une installation et que vous avez transmis --cleanup-external-cluster=false
à gkectl create cluster
, il peut être utile d'effectuer un débogage à l'aide des journaux du cluster d'amorçage. Vous pouvez trouver le pod, puis obtenir ses journaux :
kubectl --kubeconfig /home/ubuntu/.kube/kind-config-gkectl get pods -n kube-system
kubectl --kubeconfig /home/ubuntu/.kube/kind-config-gkectl -n kube-system get logs [POD_NAME]
Poste de travail administrateur
openssl
ne peut pas valider le fichier OVA du poste de travail administrateur.
- Symptômes
L'exécution de
openssl dgst
sur le fichier OVA du poste de travail administrateur ne renvoie pasVerified OK
.- Causes probables
Le fichier OVA comporte un problème qui empêche la validation.
- Solution
Essayez à nouveau de télécharger et de déployer le fichier OVA du poste de travail administrateur, comme indiqué dans la section Télécharger le fichier OVA du poste de travail administrateur. Si le problème persiste, contactez Google pour obtenir de l'aide.
Connect
Impossible d'enregistrer un cluster d'utilisateur
Si vous rencontrez des problèmes pour enregistrer des clusters d'utilisateur, contactez Google afin d'obtenir de l'aide.
L'enregistrement du cluster en version alpha a été annulé
Consultez la page Enregistrer un cluster d'utilisateur dans la documentation de Connect.
Vous pouvez également choisir de supprimer et de recréer le cluster.
Stockage
Impossible d'associer un volume
Symptômes
Le résultat de la commande gkectl diagnose cluster
se présente comme suit :
Checking cluster object...PASS Checking machine objects...PASS Checking control plane pods...PASS Checking gke-connect pods...PASS Checking kube-system pods...PASS Checking gke-system pods...PASS Checking storage...FAIL PersistentVolume pvc-776459c3-d350-11e9-9db8-e297f465bc84: virtual disk "[datastore_nfs] kubevols/kubernetes-dynamic-pvc-776459c3-d350-11e9-9db8-e297f465bc84.vmdk" IS attached to machine "gsl-test-user-9b46dbf9b-9wdj7" but IS NOT listed in the Node.Status 1 storage errors
Un ou plusieurs pods sont bloqués à l'état ContainerCreating
avec un avertissement semblable au suivant :
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedAttachVolume 6s (x6 over 31s) attachdetach-controller AttachVolume.Attach failed for volume "pvc-776459c3-d350-11e9-9db8-e297f465bc84" : Failed to add disk 'scsi0:6'.
Causes probables
Si un disque virtuel est associé à la mauvaise machine virtuelle, cela peut être dû au problème #32727 dans Kubernetes 1.12.
Solution
Si un disque virtuel est associé à la mauvaise machine virtuelle, vous devrez peut-être le dissocier manuellement :
- Drainez le nœud.
Consultez la page Drainer un nœud en toute sécurité. Vous pouvez inclure les options
--ignore-daemonsets
et--delete-local-data
dans votre commandekubectl drain
. - Mettez la VM hors tension.
- Modifiez la configuration matérielle de la VM dans vCenter pour supprimer le volume.
- Mettez la VM sous tension.
- Dissociez le nœud.
Le volume est perdu.
Symptômes
Le résultat de la commande gkectl diagnose cluster
se présente comme suit :
Checking cluster object...PASS Checking machine objects...PASS Checking control plane pods...PASS Checking gke-connect pods...PASS Checking kube-system pods...PASS Checking gke-system pods...PASS Checking storage...FAIL PersistentVolume pvc-52161704-d350-11e9-9db8-e297f465bc84: virtual disk "[datastore_nfs] kubevols/kubernetes-dynamic-pvc-52161704-d350-11e9-9db8-e297f465bc84.vmdk" IS NOT found 1 storage errors
Un ou plusieurs pods sont bloqués à l'état ContainerCreating
avec un avertissement semblable au suivant :
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedAttachVolume 71s (x28 over 42m) attachdetach-controller AttachVolume.Attach failed for volume "pvc-52161704-d350-11e9-9db8-e297f465bc84" : File []/vmfs/volumes/43416d29-03095e58/kubevols/ kubernetes-dynamic-pvc-52161704-d350-11e9-9db8-e297f465bc84.vmdk was not found
Causes probables
Si une erreur "introuvable" s'affiche pour votre fichier VMDK, cela signifie vraisemblablement que le disque virtuel a été définitivement supprimé. Cela peut se produire si un opérateur supprime manuellement un disque virtuel ou la machine virtuelle à laquelle ce disque est associé. Pour éviter cela, gérez vos machines virtuelles comme décrit sur les pages Redimensionner un cluster d'utilisateur et Mettre à jour des clusters.
Solution
Si un disque virtuel a été définitivement supprimé, vous devrez peut-être nettoyer manuellement les ressources Kubernetes associées :
- Supprimez le PVC associé au PV en exécutant la commande
kubectl delete pvc [PVC_NAME].
. - Supprimez le pod associé au PVC en exécutant la commande
kubectl delete pod [POD_NAME].
. - Répétez l'étape 2. (Oui. Consultez le problème Kubernetes 74374.)
Échec de la dissociation du volume CSI vSphere
Symptômes
Si vous constatez que des pods sont bloqués dans la phase ContainerCreating
avec des avertissements FailedAttachVolume
, cela peut être dû à un échec de dissociation sur un autre nœud.
Exécutez la commande suivante pour rechercher les erreurs de dissociation CSI :
kubectl get volumeattachments -o=custom-columns=NAME:metadata.name,DETACH_ERROR:status.detachError.message
Le résultat doit se présenter sous la forme suivante :
NAME DETACH_ERROR csi-0e80d9be14dc09a49e1997cc17fc69dd8ce58254bd48d0d8e26a554d930a91e5 rpc error: code = Internal desc = QueryVolume failed for volumeID: "57549b5d-0ad3-48a9-aeca-42e64a773469". ServerFaultCode: NoPermission csi-164d56e3286e954befdf0f5a82d59031dbfd50709c927a0e6ccf21d1fa60192dcsi-8d9c3d0439f413fa9e176c63f5cc92bd67a33a1b76919d42c20347d52c57435c csi-e40d65005bc64c45735e91d7f7e54b2481a2bd41f5df7cc219a2c03608e8e7a8
Causes probables
Le droit CNS > Searchable
n'a pas été accordé à l'utilisateur vSphere.
Solution
Ajoutez le droit CNS > Searchable
à votre compte utilisateur vCenter. L'opération de dissociation fait automatiquement l'objet de plusieurs tentatives jusqu'à ce qu'elle aboutisse.
Licences
À propos des temps d'arrêt pendant les mises à niveau
Ressource | Description |
---|---|
Cluster d'administrateur | En cas de panne d'un cluster d'administrateur, les plans de contrôle et les charges de travail des clusters d'utilisateur continuent de s'exécuter, sauf s'ils sont affectés par une panne ayant provoqué le temps d'arrêt. |
Plan de contrôle du cluster d'utilisateur | En règle générale, les plans de contrôle des clusters d'utilisateur ne font pas l'objet de temps d'arrêt significatifs. Cependant, les connexions de longue durée au serveur d'API Kubernetes peuvent être interrompues et doivent être rétablies. Dans ce cas, l'appelant de l'API doit effectuer de nouvelles tentatives jusqu'à ce qu'il établisse une connexion. Dans le pire des cas, le temps d'arrêt peut durer jusqu'à une minute pendant une mise à niveau. |
Nœuds de cluster d'utilisateur | Si une mise à niveau nécessite une modification des nœuds de cluster d'utilisateur, GKE On-Prem recrée les nœuds de manière progressive et replanifie les pods exécutés sur ces nœuds. Vous pouvez éviter l'impact sur vos charges de travail en configurant des règles PodDisruptionBudgets et d'anti-affinité appropriées. |
Redimensionner des clusters d'utilisateur
Échec du redimensionnement d'un cluster d'utilisateur
- Symptômes
Échec d'une opération de redimensionnement sur un cluster d'utilisateur.
- Causes probables
Plusieurs facteurs peuvent entraîner l'échec des opérations de redimensionnement.
- Solution
Si un redimensionnement échoue, procédez comme suit :
Examinez l'état MachineDeployment du cluster pour vérifier s'il y a des événements ou des messages d'erreur :
kubectl describe machinedeployments [MACHINE_DEPLOYMENT_NAME]
Déterminez s'il existe des erreurs sur les machines nouvellement créées :
kubectl describe machine [MACHINE_NAME]
Erreur : "aucune adresse ne peut être allouée"
- Symptômes
Après avoir redimensionné un cluster d'utilisateur,
kubectl describe machine [MACHINE_NAME]
affiche l'erreur suivante :Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Failed 9s (x13 over 56s) machineipam-controller ipam: no addresses can be allocated
- Causes probables
Il n'y a pas suffisamment d'adresses IP disponibles pour le cluster d'utilisateur.
- Solution
Attribuez des adresses IP supplémentaires au cluster. Supprimez ensuite la machine concernée :
kubectl delete machine [MACHINE_NAME]
Si le cluster est correctement configuré, une machine de remplacement est créée avec une adresse IP.
Un nombre suffisant d'adresses IP est alloué, mais la machine ne parvient pas à s'enregistrer auprès du cluster.
- Symptômes
Le réseau dispose de suffisamment d'adresses allouées, mais la machine ne parvient toujours pas à s'enregistrer auprès du cluster d'utilisateur.
- Causes possibles :
Il y a peut-être un conflit d'adresses IP. L'adresse IP peut être utilisée par une autre machine ou par votre équilibreur de charge.
- Solution
Vérifiez que l'adresse IP de la machine concernée est disponible. En cas de conflit, vous devez le résoudre dans votre environnement.
vSphere
Déboguer avec govc
Si vous rencontrez des problèmes spécifiques à vSphere, vous pouvez utiliser govc
pour les résoudre. Par exemple, vous pouvez facilement confirmer les autorisations et l'accès de vos comptes utilisateur vCenter, et collecter les journaux vSphere.
Modifier le certificat vCenter
Si vous exécutez un serveur vCenter en mode d'évaluation ou de configuration par défaut, et que celui-ci dispose d'un certificat TLS, ce certificat peut évoluer au fil du temps. Si le certificat a été modifié, vous devez le signaler aux clusters en cours d'exécution :
Récupérez le nouveau certificat vCenter et enregistrez-le dans un fichier :
true | openssl s_client -connect [VCENTER_IP_ADDRESS]:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem
Désormais, pour chaque cluster, supprimez le fichier ConfigMap contenant le certificat vSphere et vCenter, puis créez un fichier ConfigMap avec le nouveau certificat. Exemple :
kubectl --kubeconfig kubeconfig delete configmap vsphere-ca-certificate -n kube-system
kubectl --kubeconfig kubeconfig delete configmap vsphere-ca-certificate -n user-cluster1
kubectl --kubeconfig kubeconfig create configmap -n user-cluster1 --dry-run vsphere-ca-certificate --from-file=ca.crt=vcenter.pem -o yaml | kubectl --kubeconfig kubeconfig apply -f -
kubectl --kubeconfig kubeconfig create configmap -n kube-system --dry-run vsphere-ca-certificate --from-file=ca.crt=vcenter.pem -o yaml | kubectl --kubeconfig kubeconfig apply -f -
Supprimez le pod clusterapi-controllers de chaque cluster. Lorsque le pod redémarre, il commence à utiliser le nouveau certificat. Exemple :
kubectl --kubeconfig kubeconfig -n kube-system get pods
kubectl --kubeconfig kubeconfig -n kube-system delete pod clusterapi-controllers-...
Divers
Limite de session du fournisseur vSphere Terraform
GKE On-Prem utilise le fournisseur vSphere de Terraform pour afficher les VM dans votre environnement vSphere. La limite de session du fournisseur est de 1 000 sessions. La mise en œuvre actuelle ne ferme pas les sessions actives après utilisation. Vous pouvez rencontrer des erreurs 503 si trop de sessions sont en cours d'exécution.
Les sessions sont automatiquement fermées après 300 secondes.
- Symptômes
Si trop de sessions sont en cours d'exécution, vous pouvez rencontrer l'erreur suivante :
Error connecting to CIS REST endpoint: Login failed: body: {"type":"com.vmware.vapi.std.errors.service_unavailable","value": {"messages":[{"args":["1000","1000"],"default_message":"Sessions count is limited to 1000. Existing sessions are 1000.", "id":"com.vmware.vapi.endpoint.failedToLoginMaxSessionCountReached"}]}}, status: 503 Service Unavailable
- Causes probables
Trop de sessions de fournisseur Terraform s'exécutent dans votre environnement.
- Solution
Actuellement, cela fonctionne comme prévu. Les sessions sont automatiquement fermées après 300 secondes. Pour en savoir plus, reportez-vous au problème GitHub #618.
Utiliser un proxy pour Docker : oauth2: cannot fetch token
- Symptômes
Lorsque vous utilisez un proxy, vous rencontrez l'erreur suivante :
oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: proxyconnect tcp: tls: oversized record received with length 20527
- Causes probables
Vous avez peut-être fourni un proxy HTTPS au lieu d'un proxy HTTP.
- Solution
Dans votre configuration Docker, définissez l'adresse du proxy sur
http://
au lieu dehttps://
.
Vérifier la validité des licences
N'oubliez pas de vérifier que vos licences sont valides, en particulier si vous utilisez des licences d'essai. Des échecs inattendus peuvent se produire si vos licences F5, vos licences vCenter ou vos licences d'hôte ESXi sont arrivées à expiration.