Cette page explique comment résoudre les problèmes que vous pouvez rencontrer lors de l'installation ou de la mise à niveau du mode privé d'Anthos.
Conditions préalables au dépannage
Le mode privé d'Anthos nécessite une connexion à un poste de travail d'administrateur pour que vous puissiez commencer à résoudre les problèmes. Pour vous connecter à votre poste de travail d'administrateur, exécutez la commande suivante :
ssh <USERNAME>@<WORKSTATION>
cd ./anthos-baremetal-private-mode
export PATH=$PWD/bin:$PATH
Créer un cluster
Cette section explique comment résoudre les problèmes liés à la création de clusters en mode privé d'Anthos.
Échec de la création du cluster d'administrateur
Cette section présente les erreurs courantes de configuration du cluster d'administrateur et les erreurs préliminaires, ainsi que des suggestions pour les corriger.
Erreurs de configuration
Les problèmes de configuration courants du cluster d'administrateur incluent une annotation manquante dans la configuration, l'absence de configuration d'authentification pour le registre et une erreur lors de la création du cluster d'amorçage.
Annotation manquante dans la configuration
Si lors de la création de ressources du pool de nœuds, votre fichier de configuration n'inclut pas d'annotation, vous pouvez rencontrer l'erreur suivante :
Cluster.baremetal.cluster.gke.io "admin" is invalid: [Spec.LoadBalancer.AddressPools: Forbidden: Field not allowed for admin clusters, Spec.GKEConnect: Required value: Field is required].
Pour résoudre ce problème, ajoutez une annotation à votre fichier de configuration de cluster d'administrateur et définissez l'annotation sur true
:
annotations:
baremetal.cluster.gke.io/private-mode: "true"
Consultez la section Cluster d'administrateur et pool de nœuds pour obtenir un exemple d'annotation appliquée dans un fichier de configuration de cluster d'administrateur.
Configuration de l'authentification manquante pour le registre
Si la configuration de l'authentification est manquante, vous pouvez rencontrer l'erreur no auth config found for the registry
.
Assurez-vous que la valeur pullCredentialConfigPath
spécifiée dans le fichier admin.yaml
contient la configuration d'authentification pour le point de terminaison.
Par exemple, si le point de terminaison est https://10.200.0.2
et que la valeur de pullCredentialConfigPath
est /root/.docker/config.json
, le fichier config.json
contient l'entrée d'authentification suivante :
{
"auths": {
"10.200.0.2": {
"auth": "<base64 encoded auth>"
}
}
}
Si l'entrée d'authentification du registre est absente, mettez à jour le fichier config.json
en vous connectant au registre :
docker login <registry> -u <username> -p <password>
Erreur lors de la création du cluster d'amorçage
Vous pouvez rencontrer l'erreur suivante lors de la création de votre cluster :
failed: error creating bootstrap cluster: failed to pull kind image kindest/node:v0.11.1-gke.7-v1.20.9-gke.101 from registry mirror(s)
Si vous rencontrez une erreur lors de la création du cluster d'amorçage, assurez-vous que toutes les images sont importées dans le registre privé :
actl images push --private-registry=<registry>
Voici un exemple de commande :
actl images push --private-registry=10.200.0.2/library
Échecs préliminaires
Lorsque vous créez un cluster d'administrateur sur le mode privé d'Anthos, vous devrez peut-être corriger un échec lié à la création du cluster avec des erreurs préliminaires, au blocage de la création du cluster, ou effectuer des opérations de dépannage générales.
Échec de la création du cluster avec des erreurs préliminaires
Si la vérification préliminaire a échoué, le message d'erreur suivant peut s'afficher :
unable to create cluster: unable to create cluster: preflight check failed
Le mode privé d'Anthos collecte les journaux d'erreur correspondants dans le répertoire actl-workspace/admin/log/preflight-<timestamp>/
, par exemple actl-workspace/admin/log/preflight-20210907-205726/
.
Pour résoudre le problème, vérifiez les points suivants :
- Chaque journal de nœuds ayant échoué dans le fichier nommé comme étant l'adresse IP du nœud
- Les journaux liés au réseau dans le fichier
node-network
En fonction des données des journaux, assurez-vous qu'il n'y a pas d'erreur évidente (par exemple, des exigences minimales de machine non remplies ou des ports en conflit). Mettez à jour les machines, puis réessayez.
Blocage de la création du cluster
Si la création d'un cluster à trois nœuds prend beaucoup de temps, par exemple plus de 30 minutes, vérifiez que le cluster d'amorçage local ne comporte pas d'erreurs lors de l'extraction de l'image :
kubectl --kubeconfig actl-workspace/.kindkubeconfig get pods -A
Si les pods affichent l'état ImagePullErr
, assurez-vous que ces images sont importées dans le registre :
actl images push --private-registry=<registry>
Voici un exemple de commande :
actl images push --private-registry=10.200.0.2/library
Si une tâche de création de cluster spécifique possède l'état Error
, consultez les journaux du pod correspondant :
kubectl --kubeconfig actl-workspace/.kindkubeconfig get pods -n cluster-admin
kubectl --kubeconfig actl-workspace/.kindkubeconfig logs <pod-name> -n cluster-admin
Examinez les journaux pour voir si des erreurs peuvent être corrigées manuellement sur la machine. Vous pouvez obtenir des erreurs supplémentaires à partir de la machine elle-même en utilisant SSH pour vous connecter à la machine et en exécutant journalctl --no-pager -l
.
Pour vous assurer que les services importants fonctionnent, exécutez la commande suivante :
service containerd status
service kubelet status
journalctl -u containerd
journalctl -u kubelet
# If needed sudo systemctl restart <service> to fix issues.
# sudo service <service> restart
# e.g.,
# sudo service containerd restart
Problèmes d'ordre général
Pour dépanner un nœud en général, utilisez SSH pour vous connecter à un nœud et exécutez la commande suivante :
journalctl --no-pager -l
Recherchez d'éventuelles erreurs dans les journaux.
Échec de la création du cluster
Utilisez SSH pour vous connecter à la machine du plan de contrôle et consultez les pods du cluster :
sudo kubectl --kubeconfig /etc/kubernetes/admin.conf get po -A
Problèmes de réseau
Cette section décrit les problèmes de réseau les plus courants dans le mode privé d'Anthos et illustre les étapes à suivre pour les résoudre.
- Utilisez la commande
ip route
pour afficher les connexions entre chaque nœud et vérifier les erreurs liées au réseau. Lorsque l'adresse IP virtuelle du plan de contrôle n'est pas accessible, utilisez SSH pour vous connecter à un nœud du plan de contrôle et exécutez la commande suivante :
journalctl -u containerd --no-pager -l # Check the logs of those pods as well. sudo kubectl --kubeconfig /etc/kubernetes/admin.conf -n kube-system get po | grep -E "haproxy|keepalived" sudo crictl logs `sudo crictl ps | grep anthos-baremetal-haproxy | awk '{print $1}'` sudo crictl logs `sudo crictl ps | grep anthos-baremetal-keepalived | awk '{print $1}'`
Ce problème peut se produire si les images
keepalived
ethaproxy
ne sont pas chargées dans un registre privé.(À n'utiliser qu'après la création réussie du cluster d'administrateur). Si les adresses IP de services ne sont pas accessibles, consultez les journaux des pods
metallb
:kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -l app=metallb -l component=controller -n kube-system kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -l app=metallb -l component=speaker -n kube-system
Si tous les pods sont bloqués lors de la création du conteneur, effectuez l'une des opérations suivantes :
- Vérifiez les déploiements anetd-operator et les journaux anetd daemonset.
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get pods -l name=cilium-operator -n kube-system kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -l name=cilium-operator -n kube-system kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get pods -l k8s-app=cilium -n kube-system kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -l k8s-app=cilium -n kube-system
- Si aucune passerelle par défaut n'est définie, les iptables risquent de ne pas fonctionner correctement et anetd-operator pourrait ne pas pouvoir accéder au serveur kube-api.
ip route add default via <some-ip> iptables-save -t nat iptables-save -t filter
Redémarrez le nœud pour voir si le problème est résolu.
Erreurs fréquentes
Les commandes kubectl ne fonctionnent pas
Si vous n'avez pas configuré l'outil de ligne de commande kubectl pour vous connecter à un serveur d'API Kubernetes distant, le message d'erreur suivant s'affiche :
$ kubectl ...
The connection to the server localhost:8080 was refused - did you specify the right host or port?
Assurez-vous d'avoir défini un fichier kubeconfig. Pour ce faire, définissez la variable d'environnement KUBECONFIG ou exécutez les commandes avec l'option --kubeconfig
.
Par exemple, pour définir le fichier kubeconfig d'administrateur, effectuez l'une des opérations suivantes :
- Définissez la variable d'environnement sur le fichier kubeconfig d'administrateur :
export KUBECONFIG=$HOME/anthos-baremetal-private-mode/actl-workspace/admin/admin-kubeconfig
- Utilisez l'option de ligne de commande kubeconfig :
kubectl --kubeconfig=$HOME/anthos-baremetal-private-mode/actl-workspace/admin/admin-kubeconfig
Pour en savoir plus, consultez la section Organiser l'accès au cluster à l'aide de fichiers kubeconfig.
Échec de la création du cluster d'utilisateur
Sur votre poste de travail, pour accéder au cluster d'administrateur et afficher les pods associés au cluster d'utilisateur, utilisez la commande suivante :
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get po -n cluster-CLUSTER_NAME
Remplacez CLUSTER_NAME
par le nom de votre cluster.
Si le cluster d'utilisateur échoue toujours, essayez de supprimer un cluster d'utilisateur et appliquez à nouveau la configuration suivante :
# Delete user cluster export ADMIN_KUBECONFIG=$(pwd)/actl-workspace/admin/admin-kubeconfig export USER_CLUSTER_NAME=user-1 kubectl -n cluster-${USER_CLUSTER_NAME} delete Cluster $USER_CLUSTER_NAME --kubeconfig=${ADMIN_KUBECONFIG} # Re-apply the user cluster YAML file KUBECONFIG=${ADMIN_KUBECONFIG} kubectl apply -f user.yaml # Wait until client config ready and stored in the path "$(pwd)/${USER_CLUSTER_NAME}-kubeconfig" export USER_KUBECONFIG=$(pwd)/${USER_CLUSTER_NAME}-kubeconfig waittime="5 minutes" endtime=$(date -ud "$waittime" +%s) while ! KUBECONFIG=${ADMIN_KUBECONFIG} actl clusters baremetal get-credentials -c "${USER_CLUSTER_NAME}" -o "${USER_KUBECONFIG}"; do if [[ $endtime -le $(date -u +%s) ]]; then echo "Client config not ready in $waittime, terminating" exit 1 fi echo "client config not ready, sleeping 30s" sleep 30 done # Check the user cluster status until all nodes are ready KUBECONFIG=${USER_KUBECONFIG} kubectl get nodes
Créer un centre de gestion Anthos
Ressources insuffisantes sur le cluster d'administrateur
La ressource personnalisée AdminOperator
configure l'installation du centre de gestion Anthos. Pour savoir si le contrôleur a rencontré des problèmes lors de l'installation du centre de gestion, consultez les événements et les journaux Google Kubernetes Engine liés à cette ressource et à ce contrôleur personnalisés :
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig describe adminoperator admin-operator
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -n anthos-management-center-operator -l control-plane=admin-operator
Erreurs d'extraction d'image
Le démarrage de pods sur le cluster peut entraîner des problèmes qui empêchent AdminOperator
de signaler que l'opération a réussi.
# Get all pods that aren't in a Running state or have succeeded.
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get pods --field-selector=status.phase!=Running,status.phase!=Succeeded -A
# Examine the pods of interest that are failing...
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig describe pod --namespace [NAMESPACE] [POD_OF_INTEREST]
Passage à une édition supérieure
Anthos sur solution Bare Metal
Pour en savoir plus sur la résolution des problèmes liés à une mise à niveau dans Anthos sur solution Bare Metal, consultez la section Restaurer une mise à niveau ayant échoué dans Anthos sur solution Bare Metal.
Centre de gestion Anthos
Pour vérifier la version du composant installée, exécutez la commande suivante :
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get adminoperator admin-operator -o yaml
Voici un exemple de résultat :
apiVersion: managementcenter.anthos.cloud.google.com/v1
kind: AdminOperator
spec:
updateConfigOverride:
policies:
- name: anthos-config-management
versionConstraint: <=1.8.0-gke.0
status:
components:
- name: anthos-bare-metal
version: 1.8.0-gke.0
versionConstraint: <=1.8.0-gke.0
- name: anthos-config-management
version: 1.8.0-gke.0
versionConstraint: <=1.8.0-gke.0
- name: anthos-service-mesh
version: 1.8.0-gke.0
versionConstraint: <=1.8.0-gke.0
version: 1.8.0-gke.0
Dans un environnement Anthos en mode privé déployé, la partie status.version
de l'objet AdminOperator
indique la version d'Anthos en mode privé.
Par exemple, 1.8.0-gke.0
. status.components
indique l'état de la version pour chaque composant. Il identifie la version observée et la contrainte de version pour chaque composant déployé.
status.version
et status.components
doivent toujours être disponibles, sinon l'installation est corrompue.
spec.updateConfigOverride
est facultatif. Il n'est présent que si les opérateurs d'infrastructure définissent manuellement le champ pour mettre à niveau un composant spécifique. Lorsque le champ est omis, tous les composants s'exécutent sur la même version que AdminOperator
.
Vérifier les packages dans le centre de mise à jour
Seuls les packages proposés dans le centre de mise à jour sont déployés dans le centre de gestion.
Par exemple, si vous installez initialement le cluster d'administrateur avec la version 1.8.0-gke.0
, puis que vous passez ensuite à la version 1.8.1-gke.0
, le centre de mise à jour contient deux ensembles de packages. La suppression de la ressource UpdateItem
pour un composant utilisé activement peut corrompre l'installation du mode privé Anthos.
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get updateitems -n anthos-management-center
Voici un exemple de résultat :
NAME AGE
anthos-config-management-1.8.0-gke.0 13d
anthos-service-mesh-1.8.0-gke.0 13d