Chapitre 7. Résolution de problèmes
7.1. Dépannage des installations
7.1.1. Déterminer où se situent les problèmes d'installation
Lors du dépannage des problèmes d'installation d'OpenShift Container Platform, vous pouvez surveiller les journaux d'installation pour déterminer à quelle étape les problèmes surviennent. Vous pouvez ensuite récupérer les données de diagnostic correspondant à cette étape.
L'installation d'OpenShift Container Platform se déroule selon les étapes suivantes :
- Les fichiers de configuration d'Ignition sont créés.
- La machine d'amorçage démarre et commence à héberger les ressources distantes nécessaires au démarrage des machines du plan de contrôle.
- Les machines du plan de contrôle récupèrent les ressources distantes de la machine d'amorçage et terminent le démarrage.
- Les machines du plan de contrôle utilisent la machine bootstrap pour former un cluster etcd.
- La machine d'amorçage démarre un plan de contrôle Kubernetes temporaire en utilisant le nouveau cluster etcd.
- Le plan de contrôle temporaire planifie le plan de contrôle de production sur les machines du plan de contrôle.
- Le plan de contrôle temporaire s'arrête et passe le contrôle au plan de contrôle de production.
- La machine d'amorçage ajoute des composants OpenShift Container Platform dans le plan de contrôle de la production.
- Le programme d'installation arrête la machine de démarrage.
- Le plan de contrôle met en place les nœuds de travail.
- Le plan de contrôle installe des services supplémentaires sous la forme d'un ensemble d'opérateurs.
- Le cluster télécharge et configure les autres composants nécessaires au fonctionnement quotidien, y compris la création de machines de travail dans les environnements pris en charge.
7.1.2. Considérations relatives à l'installation de l'infrastructure fournie par l'utilisateur
La méthode d'installation par défaut utilise l'infrastructure fournie par l'installateur. Avec les clusters d'infrastructure provisionnés par l'installateur, OpenShift Container Platform gère tous les aspects du cluster, y compris le système d'exploitation lui-même. Si possible, utilisez cette fonctionnalité pour éviter d'avoir à provisionner et à maintenir l'infrastructure du cluster.
Vous pouvez également installer OpenShift Container Platform 4.12 sur une infrastructure que vous fournissez. Si vous utilisez cette méthode d'installation, suivez attentivement la documentation d'installation de l'infrastructure fournie par l'utilisateur. En outre, examinez les considérations suivantes avant l'installation :
- Consultez l'écosystème Red Hat Enterprise Linux (RHEL) pour déterminer le niveau de support de Red Hat Enterprise Linux CoreOS (RHCOS) fourni pour le matériel serveur ou la technologie de virtualisation que vous avez choisis.
- De nombreux environnements de virtualisation et de cloud nécessitent l'installation d'agents sur les systèmes d'exploitation invités. Veillez à ce que ces agents soient installés en tant que charge de travail conteneurisée déployée par l'intermédiaire d'un ensemble de démons.
Installez l'intégration des fournisseurs de cloud si vous souhaitez activer des fonctionnalités telles que le stockage dynamique, le routage de services à la demande, la résolution du nom d'hôte du nœud par rapport au nom d'hôte Kubernetes et la mise à l'échelle automatique du cluster.
NoteIl n'est pas possible d'activer l'intégration des fournisseurs de cloud dans les environnements OpenShift Container Platform qui mélangent des ressources provenant de différents fournisseurs de cloud, ou qui couvrent plusieurs plateformes physiques ou virtuelles. Le contrôleur du cycle de vie des nœuds ne permet pas d'ajouter à un cluster des nœuds externes au fournisseur existant, et il n'est pas possible de spécifier plus d'une intégration de fournisseur de cloud.
- Une implémentation de l'API Machine spécifique au fournisseur est nécessaire si vous souhaitez utiliser des ensembles de machines ou l'autoscaling pour provisionner automatiquement les nœuds de cluster de OpenShift Container Platform.
- Vérifiez si le fournisseur de cloud que vous avez choisi propose une méthode pour injecter les fichiers de configuration d'Ignition dans les hôtes dans le cadre de leur déploiement initial. Si ce n'est pas le cas, vous devrez héberger les fichiers de configuration Ignition en utilisant un serveur HTTP. Les étapes à suivre pour résoudre les problèmes liés aux fichiers de configuration d'Ignition diffèrent selon la méthode utilisée.
- Le stockage doit être provisionné manuellement si vous souhaitez exploiter des composants optionnels du framework tels que le registre de conteneurs intégré, Elasticsearch ou Prometheus. Les classes de stockage par défaut ne sont pas définies dans les installations d'infrastructure provisionnées par l'utilisateur, à moins qu'elles ne soient explicitement configurées.
- Un équilibreur de charge est nécessaire pour distribuer les demandes d'API sur tous les nœuds du plan de contrôle dans les environnements OpenShift Container Platform hautement disponibles. Vous pouvez utiliser n'importe quelle solution d'équilibrage de charge basée sur TCP qui répond aux exigences de routage DNS et de port de OpenShift Container Platform.
7.1.3. Vérifier la configuration d'un équilibreur de charge avant l'installation d'OpenShift Container Platform
Vérifiez la configuration de votre équilibreur de charge avant de commencer l'installation d'OpenShift Container Platform.
Conditions préalables
- Vous avez configuré un équilibreur de charge externe de votre choix, en préparation d'une installation d'OpenShift Container Platform. L'exemple suivant est basé sur un hôte Red Hat Enterprise Linux (RHEL) utilisant HAProxy pour fournir des services d'équilibrage de charge à un cluster.
- Vous avez configuré le DNS en vue de l'installation d'OpenShift Container Platform.
- Vous avez un accès SSH à votre équilibreur de charge.
Procédure
Vérifiez que le service
haproxy
systemd est actif :$ ssh <user_name>@<load_balancer> systemctl status haproxy
Vérifiez que l'équilibreur de charge écoute sur les ports requis. L'exemple suivant fait référence aux ports
80
,443
,6443
et22623
.Pour les instances HAProxy fonctionnant sous Red Hat Enterprise Linux (RHEL) 6, vérifiez l'état des ports à l'aide de la commande
netstat
:$ ssh <user_name>@<load_balancer> netstat -nltupe | grep -E ':80|:443|:6443|:22623'
Pour les instances HAProxy fonctionnant sous Red Hat Enterprise Linux (RHEL) 7 ou 8, vérifiez l'état des ports à l'aide de la commande
ss
:$ ssh <user_name>@<load_balancer> ss -nltupe | grep -E ':80|:443|:6443|:22623'
NoteRed Hat recommande la commande
ss
au lieu denetstat
dans Red Hat Enterprise Linux (RHEL) 7 ou une version ultérieure.ss
est fourni par le paquetage iproute. Pour plus d'informations sur la commandess
, consultez le Guide d'optimisation des performances de Red Hat Enterprise Linux (RHEL) 7.
Vérifiez que l'enregistrement DNS générique se résout vers l'équilibreur de charge :
$ dig <wildcard_fqdn> @<dns_server>
7.1.4. Spécifier les niveaux de journalisation du programme d'installation d'OpenShift Container Platform
Par défaut, le niveau de journalisation du programme d'installation d'OpenShift Container Platform est défini sur info
. Si une journalisation plus détaillée est nécessaire lors du diagnostic d'un échec de l'installation d'OpenShift Container Platform, vous pouvez augmenter le niveau de journalisation de openshift-install
à debug
lors du redémarrage de l'installation.
Conditions préalables
- You have access to the installation host.
Procédure
Définissez le niveau du journal d'installation sur
debug
lorsque vous lancez l'installation :$ ./openshift-install --dir <installation_directory> wait-for bootstrap-complete --log-level debug 1
- 1
- Les niveaux d'enregistrement possibles sont
info
,warn
,error,
etdebug
.
7.1.5. Résolution des problèmes liés à la commande openshift-install
Si vous rencontrez des problèmes lors de l'exécution de la commande openshift-install
, vérifiez les points suivants :
L'installation a été lancée dans les 24 heures suivant la création du fichier de configuration Ignition. Les fichiers Ignition sont créés lorsque la commande suivante est exécutée :
$ ./openshift-install create ignition-configs --dir=./install_dir
-
Le fichier
install-config.yaml
se trouve dans le même répertoire que le programme d'installation. Si un autre chemin d'installation est déclaré à l'aide de l'option./openshift-install --dir
, vérifiez que le fichierinstall-config.yaml
existe dans ce répertoire.
7.1.6. Suivi de l'avancement de l'installation
Vous pouvez surveiller les journaux d'installation de haut niveau, de bootstrap et de plan de contrôle au fur et à mesure que l'installation d'OpenShift Container Platform progresse. Cela permet d'avoir une meilleure visibilité sur la progression d'une installation et d'identifier l'étape à laquelle un échec d'installation se produit.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
Vous avez installé l'OpenShift CLI (
oc
). - Vous avez un accès SSH à vos hôtes.
Vous disposez des noms de domaine pleinement qualifiés des nœuds du plan d'amorçage et du plan de contrôle.
NoteLe mot de passe initial de
kubeadmin
se trouve dans<install_directory>/auth/kubeadmin-password
sur l'hôte d'installation.
Procédure
Observez le journal d'installation au fur et à mesure que l'installation progresse :
$ tail -f ~/<installation_directory>/.openshift_install.log
Surveillez le journal
bootkube.service
journald unit log sur le nœud d'amorçage, après qu'il ait démarré. Cela permet d'avoir une visibilité sur le démarrage du premier plan de contrôle. Remplacez<bootstrap_fqdn>
par le nom de domaine complet du nœud d'amorçage :$ ssh core@<bootstrap_fqdn> journalctl -b -f -u bootkube.service
NoteThe
bootkube.service
log on the bootstrap node outputs etcdconnection refused
errors, indicating that the bootstrap server is unable to connect to etcd on control plane nodes. After etcd has started on each control plane node and the nodes have joined the cluster, the errors should stop.Surveillez les journaux de l'unité
kubelet.service
journald sur les nœuds du plan de contrôle, après leur démarrage. Cela permet d'avoir une visibilité sur l'activité des agents des nœuds du plan de contrôle.Surveillez les journaux à l'aide de
oc
:$ oc adm node-logs --role=master -u kubelet
Si l'API n'est pas fonctionnelle, examinez les journaux en utilisant SSH à la place. Remplacez
<master-node>.<cluster_name>.<base_domain>
par les valeurs appropriées :$ ssh core@<master-node>.<cluster_name>.<base_domain> journalctl -b -f -u kubelet.service
Surveillez les journaux de l'unité
crio.service
journald sur les nœuds du plan de contrôle, après leur démarrage. Cela permet d'avoir une visibilité sur l'activité d'exécution des conteneurs CRI-O sur les nœuds du plan de contrôle.Surveillez les journaux à l'aide de
oc
:$ oc adm node-logs --role=master -u crio
Si l'API n'est pas fonctionnelle, examinez les journaux en utilisant SSH à la place. Remplacez
<master-node>.<cluster_name>.<base_domain>
par les valeurs appropriées :$ ssh core@master-N.cluster_name.sub_domain.domain journalctl -b -f -u crio.service
7.1.7. Collecte des données de diagnostic du nœud d'amorçage
Lorsque vous rencontrez des problèmes liés au démarrage, vous pouvez rassembler les journaux de l'unité bootkube.service
journald
et les journaux des conteneurs à partir du nœud de démarrage.
Conditions préalables
- Vous avez un accès SSH à votre nœud d'amorçage.
- Vous avez le nom de domaine complet du nœud d'amorce.
- Si vous hébergez les fichiers de configuration d'Ignition en utilisant un serveur HTTP, vous devez avoir le nom de domaine complet du serveur HTTP et le numéro de port. Vous devez également disposer d'un accès SSH à l'hôte HTTP.
Procédure
- Si vous avez accès à la console du nœud d'amorce, surveillez la console jusqu'à ce que le nœud atteigne l'invite de connexion.
Vérifier la configuration du fichier Ignition.
Si vous hébergez les fichiers de configuration d'Ignition en utilisant un serveur HTTP.
Vérifier l'URL du fichier Ignition du nœud d'amorçage. Remplacer
<http_server_fqdn>
par le nom de domaine complet du serveur HTTP :$ curl -I http://<http_server_fqdn>:<port>/bootstrap.ign 1
- 1
- L'option
-I
renvoie uniquement l'en-tête. Si le fichier Ignition est disponible sur l'URL spécifiée, la commande renvoie l'état200 OK
. S'il n'est pas disponible, la commande renvoie l'état404 file not found
.
Pour vérifier que le fichier Ignition a été reçu par le nœud d'amorçage, interrogez les journaux du serveur HTTP sur l'hôte d'accueil. Par exemple, si vous utilisez un serveur web Apache pour servir les fichiers Ignition, entrez la commande suivante :
$ grep -is 'bootstrap.ign' /var/log/httpd/access_log
Si le fichier Ignition bootstrap est reçu, le message de journal
HTTP GET
associé inclura un état de réussite200 OK
, indiquant que la demande a réussi.- Si le fichier Ignition n'a pas été reçu, vérifiez que les fichiers Ignition existent et qu'ils disposent des autorisations de fichier et de serveur web appropriées sur l'hôte serveur directement.
Si vous utilisez un mécanisme de fournisseur de cloud pour injecter des fichiers de configuration Ignition dans les hôtes dans le cadre de leur déploiement initial.
- Examinez la console du nœud d'amorce pour déterminer si le mécanisme injecte correctement le fichier Ignition du nœud d'amorce.
- Vérifier la disponibilité de l'unité de stockage assignée au nœud d'amorce.
- Vérifiez qu'une adresse IP a été attribuée au nœud d'amorçage par le serveur DHCP.
Collecter les journaux de l'unité
bootkube.service
journald du nœud d'amorçage. Remplacez<bootstrap_fqdn>
par le nom de domaine complet du nœud d'amorçage :$ ssh core@<bootstrap_fqdn> journalctl -b -f -u bootkube.service
NoteThe
bootkube.service
log on the bootstrap node outputs etcdconnection refused
errors, indicating that the bootstrap server is unable to connect to etcd on control plane nodes. After etcd has started on each control plane node and the nodes have joined the cluster, the errors should stop.Collecter les journaux des conteneurs du nœud d'amorçage.
Collectez les journaux en utilisant
podman
sur le nœud d'amorçage. Remplacez<bootstrap_fqdn>
par le nom de domaine complet du nœud d'amorçage :$ ssh core@<bootstrap_fqdn> 'for pod in $(sudo podman ps -a -q) ; do sudo podman logs $pod ; done'
Si le processus d'amorçage échoue, vérifiez les points suivants.
-
Vous pouvez résoudre le problème
api.<cluster_name>.<base_domain>
à partir de l'hôte d'installation. - L'équilibreur de charge assure le proxy des connexions du port 6443 vers les nœuds d'amorçage et de plan de contrôle. Assurez-vous que la configuration du proxy est conforme aux exigences d'installation d'OpenShift Container Platform.
-
Vous pouvez résoudre le problème
7.1.8. Étude des problèmes d'installation des nœuds du plan de contrôle
Si vous rencontrez des problèmes d'installation du nœud du plan de contrôle, déterminez le réseau défini par logiciel (SDN) du nœud du plan de contrôle et l'état de l'opérateur réseau. Recueillez les journaux des unités kubelet.service
, crio.service
journald et les journaux des conteneurs du nœud du plan de contrôle pour avoir une visibilité sur l'agent du nœud du plan de contrôle, le temps d'exécution du conteneur CRI-O et l'activité du pod.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
Vous avez installé l'OpenShift CLI (
oc
). - Vous avez un accès SSH à vos hôtes.
- Vous disposez des noms de domaine pleinement qualifiés des nœuds du plan d'amorçage et du plan de contrôle.
Si vous hébergez les fichiers de configuration d'Ignition en utilisant un serveur HTTP, vous devez avoir le nom de domaine complet du serveur HTTP et le numéro de port. Vous devez également disposer d'un accès SSH à l'hôte HTTP.
NoteLe mot de passe initial de
kubeadmin
se trouve dans<install_directory>/auth/kubeadmin-password
sur l'hôte d'installation.
Procédure
- Si vous avez accès à la console du nœud du plan de contrôle, surveillez la console jusqu'à ce que le nœud atteigne l'invite de connexion. Pendant l'installation, les messages du journal Ignition sont envoyés à la console.
Vérifier la configuration du fichier d'allumage.
Si vous hébergez les fichiers de configuration d'Ignition en utilisant un serveur HTTP.
Vérifier l'URL du fichier Ignition du nœud du plan de contrôle. Remplacez
<http_server_fqdn>
par le nom de domaine complet du serveur HTTP :$ curl -I http://<http_server_fqdn>:<port>/master.ign 1
- 1
- L'option
-I
renvoie uniquement l'en-tête. Si le fichier Ignition est disponible sur l'URL spécifiée, la commande renvoie l'état200 OK
. S'il n'est pas disponible, la commande renvoie l'état404 file not found
.
Pour vérifier que le fichier Ignition a été reçu par le nœud du plan de contrôle, interrogez les journaux du serveur HTTP sur l'hôte serveur. Par exemple, si vous utilisez un serveur web Apache pour servir les fichiers Ignition :
$ grep -is 'master.ign' /var/log/httpd/access_log
Si le fichier maître Ignition est reçu, le message de journal
HTTP GET
associé inclura un état de réussite200 OK
, indiquant que la demande a réussi.- Si le fichier Ignition n'a pas été reçu, vérifiez qu'il existe directement sur l'hôte serveur. Assurez-vous que les autorisations appropriées pour les fichiers et le serveur web sont en place.
Si vous utilisez un mécanisme de fournisseur de cloud pour injecter des fichiers de configuration Ignition dans les hôtes dans le cadre de leur déploiement initial.
- Examinez la console du nœud du plan de contrôle pour déterminer si le mécanisme injecte correctement le fichier d'ignition du nœud du plan de contrôle.
- Vérifier la disponibilité de l'unité de stockage affectée au nœud du plan de contrôle.
- Vérifiez qu'une adresse IP a été attribuée au nœud du plan de contrôle par le serveur DHCP.
Déterminer l'état des nœuds du plan de contrôle.
Demande l'état des nœuds du plan de contrôle :
$ oc get nodes
Si l'un des nœuds du plan de contrôle n'atteint pas l'état
Ready
, récupérez une description détaillée du nœud :oc describe node <master_node>
NoteIl n'est pas possible d'exécuter les commandes
oc
si un problème d'installation empêche l'API OpenShift Container Platform de fonctionner ou si le kubelet ne fonctionne pas encore sur chaque nœud :
Déterminer le statut SDN de la plateforme OpenShift Container.
Examinez l'état des jeux de démons
sdn-controller
,sdn
etovs
dans l'espace de nomsopenshift-sdn
:$ oc get daemonsets -n openshift-sdn
Si ces ressources sont répertoriées comme
Not found
, examinez les pods dans l'espace de nomsopenshift-sdn
:$ oc get pods -n openshift-sdn
Examinez les journaux relatifs aux pods SDN de OpenShift Container Platform qui ont échoué dans l'espace de noms
openshift-sdn
:$ oc logs <sdn_pod> -n openshift-sdn
Déterminer l'état de la configuration du réseau de la grappe.
Vérifiez si la configuration du réseau de la grappe existe :
$ oc get network.config.openshift.io cluster -o yaml
Si le programme d'installation n'a pas réussi à créer la configuration réseau, générez à nouveau les manifestes Kubernetes et examinez les messages :
$ ./openshift-install create manifests
Examinez l'état du pod dans l'espace de noms
openshift-network-operator
pour déterminer si le Cluster Network Operator (CNO) est en cours d'exécution :$ oc get pods -n openshift-network-operator
Rassemble les journaux des pods de l'opérateur réseau de l'espace de noms
openshift-network-operator
:oc logs pod/<network_operator_pod_name> -n openshift-network-operator
Surveillez les journaux de l'unité
kubelet.service
journald sur les nœuds du plan de contrôle, après leur démarrage. Cela permet d'avoir une visibilité sur l'activité des agents des nœuds du plan de contrôle.Récupérez les journaux à l'aide de
oc
:$ oc adm node-logs --role=master -u kubelet
Si l'API n'est pas fonctionnelle, examinez les journaux en utilisant SSH à la place. Remplacez
<master-node>.<cluster_name>.<base_domain>
par les valeurs appropriées :$ ssh core@<master-node>.<cluster_name>.<base_domain> journalctl -b -f -u kubelet.service
NoteLes nœuds de cluster OpenShift Container Platform 4.12 exécutant Red Hat Enterprise Linux CoreOS (RHCOS) sont immuables et dépendent des opérateurs pour appliquer les changements de cluster. L'accès aux nœuds de cluster à l'aide de SSH n'est pas recommandé et les nœuds seront altérés comme accessed. Avant d'essayer de collecter des données de diagnostic via SSH, vérifiez si les données collectées en exécutant
oc adm must gather
et d'autres commandesoc
sont suffisantes. Cependant, si l'API OpenShift Container Platform n'est pas disponible, ou si le kubelet ne fonctionne pas correctement sur le nœud cible, les opérationsoc
seront impactées. Dans de telles situations, il est possible d'accéder aux nœuds en utilisantssh core@<node>.<cluster_name>.<base_domain>
.
Récupérer les journaux de l'unité
crio.service
journald sur les nœuds du plan de contrôle, après leur démarrage. Cela permet de connaître l'activité d'exécution des conteneurs CRI-O sur les nœuds du plan de contrôle.Récupérez les journaux à l'aide de
oc
:$ oc adm node-logs --role=master -u crio
Si l'API n'est pas fonctionnelle, examinez les journaux en utilisant plutôt SSH :
$ ssh core@<master-node>.<cluster_name>.<base_domain> journalctl -b -f -u crio.service
Collecter les journaux dans des sous-répertoires spécifiques sous
/var/log/
sur les nœuds du plan de contrôle.Récupérer la liste des journaux contenus dans un sous-répertoire
/var/log/
. L'exemple suivant répertorie les fichiers de/var/log/openshift-apiserver/
sur tous les nœuds du plan de contrôle :$ oc adm node-logs --role=master --path=openshift-apiserver
Inspecter un journal spécifique dans un sous-répertoire
/var/log/
. L'exemple suivant affiche le contenu de/var/log/openshift-apiserver/audit.log
pour tous les nœuds du plan de contrôle :$ oc adm node-logs --role=master --path=openshift-apiserver/audit.log
Si l'API n'est pas fonctionnelle, examinez les journaux sur chaque nœud en utilisant SSH à la place. L'exemple suivant est une queue
/var/log/openshift-apiserver/audit.log
:$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo tail -f /var/log/openshift-apiserver/audit.log
Examiner les journaux des conteneurs du nœud du plan de contrôle à l'aide de SSH.
Dressez la liste des conteneurs :
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl ps -a
Récupérer les journaux d'un conteneur en utilisant
crictl
:$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl logs -f <container_id>
Si vous rencontrez des problèmes de configuration des nœuds du plan de contrôle, vérifiez que le MCO, le point de terminaison MCO et l'enregistrement DNS fonctionnent. Le MCO (Machine Config Operator) gère la configuration du système d'exploitation pendant la procédure d'installation. Vérifiez également l'exactitude de l'horloge du système et la validité du certificat.
Tester si le point de terminaison MCO est disponible. Remplacer
<cluster_name>
par les valeurs appropriées :$ curl https://api-int.<cluster_name>:22623/config/master
- Si le point d'accès ne répond pas, vérifiez la configuration de l'équilibreur de charge. Assurez-vous que le point d'accès est configuré pour fonctionner sur le port 22623.
Vérifiez que l'enregistrement DNS du point d'extrémité MCO est configuré et qu'il se résout vers l'équilibreur de charge.
Lancer une recherche DNS pour le nom du point de terminaison MCO défini :
$ dig api-int.<cluster_name> @<dns_server>
Effectuez une recherche inversée de l'adresse IP MCO attribuée sur l'équilibreur de charge :
$ dig -x <load_balancer_mco_ip_address> @<dns_server>
Vérifiez que le MCO fonctionne directement à partir du nœud de démarrage. Remplacez
<bootstrap_fqdn>
par le nom de domaine pleinement qualifié du nœud d'amorce :$ ssh core@<bootstrap_fqdn> curl https://api-int.<cluster_name>:22623/config/master
L'heure de l'horloge système doit être synchronisée entre les nœuds de démarrage, maître et subordonné. Vérifiez l'heure de référence de l'horloge système de chaque nœud et les statistiques de synchronisation du temps :
$ ssh core@<node>.<cluster_name>.<base_domain> chronyc tracking
Examiner la validité du certificat :
openssl s_client -connect api-int.<cluster_name>:22623 | openssl x509 -noout -text
7.1.9. Investigation des problèmes d'installation d'etcd
Si vous rencontrez des problèmes avec etcd pendant l'installation, vous pouvez vérifier l'état des pods etcd et collecter les journaux des pods etcd. Vous pouvez également vérifier les enregistrements DNS etcd et vérifier la disponibilité des DNS sur les nœuds du plan de contrôle.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
Vous avez installé l'OpenShift CLI (
oc
). - Vous avez un accès SSH à vos hôtes.
- Vous disposez des noms de domaine complets des nœuds du plan de contrôle.
Procédure
Vérifier l'état des pods etcd.
Examiner l'état des pods dans l'espace de noms
openshift-etcd
:$ oc get pods -n openshift-etcd
Examiner l'état des pods dans l'espace de noms
openshift-etcd-operator
:$ oc get pods -n openshift-etcd-operator
Si l'un des pods répertoriés par les commandes précédentes n'affiche pas un état
Running
ouCompleted
, recueillez des informations de diagnostic pour le pod.Examiner les événements pour le pod :
oc describe pod/<nom_du_pod> -n <espace_de_noms>
Inspecter les journaux de bord de la nacelle :
oc logs pod/<nom_du_pod> -n <espace-noms>
Si le pod a plus d'un conteneur, la commande précédente créera une erreur et les noms des conteneurs seront fournis dans le message d'erreur. Examinez les journaux de chaque conteneur :
oc logs pod/<nom_du_pod> -c <nom_du_conteneur> -n <espace_de_noms>
Si l'API n'est pas fonctionnelle, examinez les journaux des pods et des conteneurs etcd sur chaque nœud du plan de contrôle en utilisant SSH à la place. Remplacez
<master-node>.<cluster_name>.<base_domain>
par les valeurs appropriées.Liste des pods etcd sur chaque nœud du plan de contrôle :
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl pods --name=etcd-
Pour tout pod n'affichant pas l'état
Ready
, inspectez l'état du pod en détail. Remplacez<pod_id>
par l'ID du pod indiqué dans la sortie de la commande précédente :$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl inspectp <pod_id>
Liste des conteneurs liés à un pod :
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl ps | grep '<pod_id>'
Pour tous les conteneurs qui n'affichent pas le statut
Ready
, inspectez le statut du conteneur en détail. Remplacez<container_id>
par les ID des conteneurs répertoriés dans la sortie de la commande précédente :$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl inspect <container_id>
Examinez les journaux pour tous les conteneurs qui n'affichent pas le statut
Ready
. Remplacez<container_id>
par les ID des conteneurs répertoriés dans la sortie de la commande précédente :$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl logs -f <container_id>
NoteLes nœuds de cluster OpenShift Container Platform 4.12 exécutant Red Hat Enterprise Linux CoreOS (RHCOS) sont immuables et dépendent des opérateurs pour appliquer les changements de cluster. L'accès aux nœuds de cluster à l'aide de SSH n'est pas recommandé et les nœuds seront altérés comme accessed. Avant d'essayer de collecter des données de diagnostic via SSH, vérifiez si les données collectées en exécutant
oc adm must gather
et d'autres commandesoc
sont suffisantes. Cependant, si l'API OpenShift Container Platform n'est pas disponible, ou si le kubelet ne fonctionne pas correctement sur le nœud cible, les opérationsoc
seront impactées. Dans de telles situations, il est possible d'accéder aux nœuds en utilisantssh core@<node>.<cluster_name>.<base_domain>
.
- Valider la connectivité des serveurs DNS primaire et secondaire à partir des nœuds du plan de contrôle.
7.1.10. Investigation des problèmes liés aux nœuds du plan de contrôle, aux kubelets et au serveur API
Pour étudier les problèmes liés au nœud du plan de contrôle, au kubelet et au serveur API pendant l'installation, vérifiez le fonctionnement du DNS, du DHCP et de l'équilibreur de charge. Vérifiez également que les certificats n'ont pas expiré.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
Vous avez installé l'OpenShift CLI (
oc
). - Vous avez un accès SSH à vos hôtes.
- Vous disposez des noms de domaine complets des nœuds du plan de contrôle.
Procédure
-
Vérifiez que l'enregistrement DNS du serveur API dirige le kubelet sur les nœuds du plan de contrôle vers
https://api-int.<cluster_name>.<base_domain>:6443
. Assurez-vous que l'enregistrement fait référence à l'équilibreur de charge. - Assurez-vous que la définition du port 6443 de l'équilibreur de charge fait référence à chaque nœud du plan de contrôle.
- Vérifier que des noms d'hôtes uniques de nœuds de plan de contrôle ont été fournis par DHCP.
Inspectez les journaux de l'unité
kubelet.service
journald sur chaque nœud du plan de contrôle.Récupérez les journaux à l'aide de
oc
:$ oc adm node-logs --role=master -u kubelet
Si l'API n'est pas fonctionnelle, examinez les journaux en utilisant SSH à la place. Remplacez
<master-node>.<cluster_name>.<base_domain>
par les valeurs appropriées :$ ssh core@<master-node>.<cluster_name>.<base_domain> journalctl -b -f -u kubelet.service
NoteLes nœuds de cluster OpenShift Container Platform 4.12 exécutant Red Hat Enterprise Linux CoreOS (RHCOS) sont immuables et dépendent des opérateurs pour appliquer les changements de cluster. L'accès aux nœuds de cluster à l'aide de SSH n'est pas recommandé et les nœuds seront altérés comme accessed. Avant d'essayer de collecter des données de diagnostic via SSH, vérifiez si les données collectées en exécutant
oc adm must gather
et d'autres commandesoc
sont suffisantes. Cependant, si l'API OpenShift Container Platform n'est pas disponible, ou si le kubelet ne fonctionne pas correctement sur le nœud cible, les opérationsoc
seront impactées. Dans de telles situations, il est possible d'accéder aux nœuds en utilisantssh core@<node>.<cluster_name>.<base_domain>
.
Vérifier les messages d'expiration des certificats dans les journaux des kubelets du nœud du plan de contrôle.
Récupérez le journal en utilisant
oc
:$ oc adm node-logs --role=master -u kubelet | grep -is 'x509: certificate has expired'
Si l'API n'est pas fonctionnelle, examinez les journaux en utilisant SSH à la place. Remplacez
<master-node>.<cluster_name>.<base_domain>
par les valeurs appropriées :$ ssh core@<master-node>.<cluster_name>.<base_domain> journalctl -b -f -u kubelet.service | grep -is 'x509: certificate has expired'
7.1.11. Enquête sur les problèmes d'installation des nœuds de travail
Si vous rencontrez des problèmes lors de l'installation du nœud de travail, vous pouvez vérifier l'état du nœud de travail. Collectez les journaux des unités kubelet.service
, crio.service
journald et les journaux du conteneur du nœud ouvrier pour avoir une visibilité sur l'agent du nœud ouvrier, le temps d'exécution du conteneur CRI-O et l'activité du pod. En outre, vous pouvez vérifier le fichier Ignition et la fonctionnalité Machine API Operator. Si la configuration post-installation du nœud ouvrier échoue, vérifiez les fonctionnalités MCO (Machine Config Operator) et DNS. Vous pouvez également vérifier la synchronisation de l'horloge système entre les nœuds bootstrap, maître et travailleur, et valider les certificats.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
Vous avez installé l'OpenShift CLI (
oc
). - Vous avez un accès SSH à vos hôtes.
- Vous disposez des noms de domaine complets des nœuds de démarrage et des nœuds de travail.
Si vous hébergez les fichiers de configuration d'Ignition en utilisant un serveur HTTP, vous devez avoir le nom de domaine complet du serveur HTTP et le numéro de port. Vous devez également disposer d'un accès SSH à l'hôte HTTP.
NoteLe mot de passe initial de
kubeadmin
se trouve dans<install_directory>/auth/kubeadmin-password
sur l'hôte d'installation.
Procédure
- Si vous avez accès à la console du nœud de travail, surveillez la console jusqu'à ce que le nœud atteigne l'invite de connexion. Pendant l'installation, les messages du journal Ignition sont envoyés à la console.
Vérifier la configuration du fichier d'allumage.
Si vous hébergez les fichiers de configuration d'Ignition en utilisant un serveur HTTP.
Vérifiez l'URL du fichier Ignition du nœud de travail. Remplacez
<http_server_fqdn>
par le nom de domaine complet du serveur HTTP :$ curl -I http://<http_server_fqdn>:<port>/worker.ign 1
- 1
- L'option
-I
renvoie uniquement l'en-tête. Si le fichier Ignition est disponible sur l'URL spécifiée, la commande renvoie l'état200 OK
. S'il n'est pas disponible, la commande renvoie l'état404 file not found
.
Pour vérifier que le fichier Ignition a été reçu par le nœud de travail, interrogez les journaux du serveur HTTP sur l'hôte HTTP. Par exemple, si vous utilisez un serveur web Apache pour servir les fichiers Ignition :
$ grep -is 'worker.ign' /var/log/httpd/access_log
Si le fichier Ignition du travailleur est reçu, le message de journal
HTTP GET
associé inclura un état de réussite200 OK
, indiquant que la demande a réussi.- Si le fichier Ignition n'a pas été reçu, vérifiez qu'il existe directement sur l'hôte serveur. Assurez-vous que les autorisations appropriées pour les fichiers et le serveur web sont en place.
Si vous utilisez un mécanisme de fournisseur de cloud pour injecter des fichiers de configuration Ignition dans les hôtes dans le cadre de leur déploiement initial.
- Examinez la console du nœud de travail pour déterminer si le mécanisme injecte correctement le fichier Ignition du nœud de travail.
- Vérifier la disponibilité de l'unité de stockage assignée au nœud de travail.
- Vérifiez qu'une adresse IP a été attribuée au nœud de travail par le serveur DHCP.
Déterminer l'état des nœuds de travail.
Demande l'état du nœud :
$ oc get nodes
Récupérer une description détaillée du nœud pour tout nœud de travailleur n'affichant pas l'état
Ready
:oc describe node <worker_node> $ oc describe node <worker_node>
NoteIl n'est pas possible d'exécuter les commandes
oc
si un problème d'installation empêche l'API OpenShift Container Platform de fonctionner ou si le kubelet ne fonctionne pas encore sur chaque nœud.
Contrairement aux nœuds du plan de contrôle, les nœuds de travailleur sont déployés et mis à l'échelle à l'aide de l'opérateur API Machine. Vérifiez l'état de l'opérateur API Machine.
Examiner le statut du pod de l'opérateur API de la machine :
$ oc get pods -n openshift-machine-api
Si le pod Opérateur API Machine n'a pas de statut
Ready
, détaillez les événements du pod :$ oc describe pod/<machine_api_operator_pod_name> -n openshift-machine-api
Inspecter les journaux du conteneur
machine-api-operator
. Le conteneur s'exécute dans le podmachine-api-operator
:oc logs pod/<machine_api_operator_pod_name> -n openshift-machine-api -c machine-api-operator
Inspectez également les journaux du conteneur
kube-rbac-proxy
. Le conteneur s'exécute également dans le podmachine-api-operator
:oc logs pod/<machine_api_operator_pod_name> -n openshift-machine-api -c kube-rbac-proxy
Surveillez les journaux de l'unité
kubelet.service
journald sur les nœuds de travail, après leur démarrage. Cela permet d'avoir une visibilité sur l'activité des agents des nœuds de travail.Récupérez les journaux à l'aide de
oc
:$ oc adm node-logs --role=worker -u kubelet
Si l'API n'est pas fonctionnelle, examinez les journaux en utilisant SSH à la place. Remplacez
<worker-node>.<cluster_name>.<base_domain>
par les valeurs appropriées :$ ssh core@<worker-node>.<cluster_name>.<base_domain> journalctl -b -f -u kubelet.service
NoteLes nœuds de cluster OpenShift Container Platform 4.12 exécutant Red Hat Enterprise Linux CoreOS (RHCOS) sont immuables et dépendent des opérateurs pour appliquer les changements de cluster. L'accès aux nœuds de cluster à l'aide de SSH n'est pas recommandé et les nœuds seront altérés comme accessed. Avant d'essayer de collecter des données de diagnostic via SSH, vérifiez si les données collectées en exécutant
oc adm must gather
et d'autres commandesoc
sont suffisantes. Cependant, si l'API OpenShift Container Platform n'est pas disponible, ou si le kubelet ne fonctionne pas correctement sur le nœud cible, les opérationsoc
seront impactées. Dans de telles situations, il est possible d'accéder aux nœuds en utilisantssh core@<node>.<cluster_name>.<base_domain>
.
Récupérer les journaux de l'unité
crio.service
journald sur les noeuds de travail, après qu'ils aient démarré. Cela permet d'avoir une visibilité sur l'activité d'exécution des conteneurs CRI-O sur les nœuds de travail.Récupérez les journaux à l'aide de
oc
:$ oc adm node-logs --role=worker -u crio
Si l'API n'est pas fonctionnelle, examinez les journaux en utilisant plutôt SSH :
$ ssh core@<worker-node>.<cluster_name>.<base_domain> journalctl -b -f -u crio.service
Collecte des journaux à partir de sous-répertoires spécifiques sous
/var/log/
sur les nœuds de travail.Récupérer la liste des journaux contenus dans un sous-répertoire
/var/log/
. L'exemple suivant répertorie les fichiers contenus dans/var/log/sssd/
sur tous les nœuds de travail :$ oc adm node-logs --role=worker --path=sssd
Inspecter un journal spécifique dans un sous-répertoire
/var/log/
. L'exemple suivant affiche le contenu de/var/log/sssd/audit.log
à partir de tous les nœuds de travail :$ oc adm node-logs --role=worker --path=sssd/sssd.log
Si l'API n'est pas fonctionnelle, examinez les journaux sur chaque nœud en utilisant SSH à la place. L'exemple suivant est une queue
/var/log/sssd/sssd.log
:$ ssh core@<worker-node>.<cluster_name>.<base_domain> sudo tail -f /var/log/sssd/sssd.log
Examinez les journaux des conteneurs des nœuds de travail à l'aide de SSH.
Dressez la liste des conteneurs :
$ ssh core@<worker-node>.<cluster_name>.<base_domain> sudo crictl ps -a
Récupérer les journaux d'un conteneur en utilisant
crictl
:$ ssh core@<worker-node>.<cluster_name>.<base_domain> sudo crictl logs -f <container_id>
Si vous rencontrez des problèmes de configuration des nœuds de travail, vérifiez que le MCO, le point de terminaison MCO et l'enregistrement DNS fonctionnent. Le MCO (Machine Config Operator) gère la configuration du système d'exploitation pendant la procédure d'installation. Vérifiez également l'exactitude de l'horloge du système et la validité du certificat.
Tester si le point de terminaison MCO est disponible. Remplacer
<cluster_name>
par les valeurs appropriées :$ curl https://api-int.<cluster_name>:22623/config/worker
- Si le point d'accès ne répond pas, vérifiez la configuration de l'équilibreur de charge. Assurez-vous que le point d'accès est configuré pour fonctionner sur le port 22623.
Vérifiez que l'enregistrement DNS du point d'extrémité MCO est configuré et qu'il se résout vers l'équilibreur de charge.
Lancer une recherche DNS pour le nom du point de terminaison MCO défini :
$ dig api-int.<cluster_name> @<dns_server>
Effectuez une recherche inversée de l'adresse IP MCO attribuée sur l'équilibreur de charge :
$ dig -x <load_balancer_mco_ip_address> @<dns_server>
Vérifiez que le MCO fonctionne directement à partir du nœud de démarrage. Remplacez
<bootstrap_fqdn>
par le nom de domaine pleinement qualifié du nœud d'amorce :$ ssh core@<bootstrap_fqdn> curl https://api-int.<cluster_name>:22623/config/worker
L'heure de l'horloge système doit être synchronisée entre les nœuds de démarrage, maître et subordonné. Vérifiez l'heure de référence de l'horloge système de chaque nœud et les statistiques de synchronisation du temps :
$ ssh core@<node>.<cluster_name>.<base_domain> chronyc tracking
Examiner la validité du certificat :
openssl s_client -connect api-int.<cluster_name>:22623 | openssl x509 -noout -text
7.1.12. Interroger le statut de l'opérateur après l'installation
Vous pouvez vérifier l'état de l'opérateur à la fin d'une installation. Récupérer les données de diagnostic pour les opérateurs qui ne sont pas disponibles. Examiner les journaux pour tous les pods d'opérateurs qui sont répertoriés comme Pending
ou qui ont un statut d'erreur. Valider les images de base utilisées par les modules problématiques.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
Vous avez installé l'OpenShift CLI (
oc
).
Procédure
Vérifier que les opérateurs de cluster sont tous disponibles à la fin d'une installation.
$ oc get clusteroperators
Vérifiez que toutes les demandes de signature de certificat (CSR) requises sont approuvées. Certains nœuds peuvent ne pas passer à l'état
Ready
et certains opérateurs de cluster peuvent ne pas être disponibles s'il y a des CSR en attente.Vérifiez l'état des CSR et assurez-vous que vous voyez une requête client et serveur avec l'état
Pending
ouApproved
pour chaque machine que vous avez ajoutée au cluster :$ oc get csr
Exemple de sortie
NAME AGE REQUESTOR CONDITION csr-8b2br 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending 1 csr-8vnps 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-bfd72 5m26s system:node:ip-10-0-50-126.us-east-2.compute.internal Pending 2 csr-c57lv 5m26s system:node:ip-10-0-95-157.us-east-2.compute.internal Pending ...
In this example, two machines are joining the cluster. You might see more approved CSRs in the list.
If the CSRs were not approved, after all of the pending CSRs for the machines you added are in
Pending
status, approve the CSRs for your cluster machines:NoteÉtant donné que les CSR tournent automatiquement, approuvez-les dans l'heure qui suit l'ajout des machines à la grappe. Si vous ne les approuvez pas dans l'heure qui suit, les certificats tourneront et il y aura plus de deux certificats pour chaque nœud. Vous devez approuver tous ces certificats. Une fois que vous avez approuvé les CSR initiaux, les CSR des clients des nœuds suivants sont automatiquement approuvés par le cluster
kube-controller-manager
.NoteFor clusters running on platforms that are not machine API enabled, such as bare metal and other user-provisioned infrastructure, you must implement a method of automatically approving the kubelet serving certificate requests (CSRs). If a request is not approved, then the
oc exec
,oc rsh
, andoc logs
commands cannot succeed, because a serving certificate is required when the API server connects to the kubelet. Any operation that contacts the Kubelet endpoint requires this certificate approval to be in place. The method must watch for new CSRs, confirm that the CSR was submitted by thenode-bootstrapper
service account in thesystem:node
orsystem:admin
groups, and confirm the identity of the node.To approve them individually, run the following command for each valid CSR:
$ oc adm certificate approve <csr_name> 1
- 1
<csr_name>
est le nom d'un CSR figurant dans la liste des CSR actuels.
To approve all pending CSRs, run the following command:
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve
Voir les événements de l'opérateur :
oc describe clusteroperator <nom_opérateur>
Examiner le statut du pod de l'opérateur dans l'espace nominatif de l'opérateur :
oc get pods -n <operator_namespace>
Obtenir une description détaillée pour les pods qui n'ont pas le statut
Running
:$ oc describe pod/<operator_pod_name> -n <operator_namespace>
Inspecter les journaux de bord :
oc logs pod/<operator_pod_name> -n <operator_namespace>
En cas de problèmes liés à l'image de la base du pod, vérifier l'état de l'image de la base.
Obtenir les détails de l'image de base utilisée par un pod problématique :
$ oc get pod -o \N "jsonpath={range .status.containerStatuses[*]}{.name}{'\t'}{.state}{'\t'}{.image}{'\n'}{end}\N" <operator_pod_name> -n <operator_namespace>
Liste des informations de validation des images de base :
$ oc adm release info <image_path>:<tag> --commits
7.1.13. Gathering logs from a failed installation
If you gave an SSH key to your installation program, you can gather data about your failed installation.
You use a different command to gather logs about an unsuccessful installation than to gather logs from a running cluster. If you must gather logs from a running cluster, use the oc adm must-gather
command.
Conditions préalables
- Your OpenShift Container Platform installation failed before the bootstrap process finished. The bootstrap node is running and accessible through SSH.
-
The
ssh-agent
process is active on your computer, and you provided the same SSH key to both thessh-agent
process and the installation program. - If you tried to install a cluster on infrastructure that you provisioned, you must have the fully qualified domain names of the bootstrap and control plane nodes.
Procédure
Generate the commands that are required to obtain the installation logs from the bootstrap and control plane machines:
If you used installer-provisioned infrastructure, change to the directory that contains the installation program and run the following command:
./openshift-install gather bootstrap --dir <installation_directory> $ ./openshift-install gather bootstrap --dir <installation_directory> 1
- 1
installation_directory
is the directory you specified when you ran./openshift-install create cluster
. This directory contains the OpenShift Container Platform definition files that the installation program creates.
For installer-provisioned infrastructure, the installation program stores information about the cluster, so you do not specify the hostnames or IP addresses.
If you used infrastructure that you provisioned yourself, change to the directory that contains the installation program and run the following command:
$ ./openshift-install gather bootstrap --dir <installation_directory> \ 1 --bootstrap <bootstrap_address> \ 2 --master <master_1_address> \ 3 --master <master_2_address> \ 4 --master <master_3_address>" 5
- 1
- For
installation_directory
, specify the same directory you specified when you ran./openshift-install create cluster
. This directory contains the OpenShift Container Platform definition files that the installation program creates. - 2
<bootstrap_address>
is the fully qualified domain name or IP address of the cluster’s bootstrap machine.- 3 4 5
- For each control plane, or master, machine in your cluster, replace
<master_*_address>
with its fully qualified domain name or IP address.
NoteA default cluster contains three control plane machines. List all of your control plane machines as shown, no matter how many your cluster uses.
Exemple de sortie
INFO Pulling debug logs from the bootstrap machine INFO Bootstrap gather logs captured here "<installation_directory>/log-bundle-<timestamp>.tar.gz"
If you open a Red Hat support case about your installation failure, include the compressed logs in the case.
7.1.14. Ressources supplémentaires
- Voir Processus d'installation pour plus de détails sur les types et processus d'installation d'OpenShift Container Platform.