7.10. Résolution des problèmes liés à la charge de travail des conteneurs Windows
7.10.1. Windows Machine Config Operator ne s'installe pas
Si vous avez terminé le processus d'installation de Windows Machine Config Operator (WMCO), mais que l'Operator est bloqué dans la phase InstallWaiting
, votre problème est probablement dû à un problème de réseau.
Le WMCO exige que votre cluster OpenShift Container Platform soit configuré avec un réseau hybride utilisant OVN-Kubernetes ; le WMCO ne peut pas terminer le processus d'installation si le réseau hybride n'est pas disponible. Ceci est nécessaire pour gérer les nœuds sur plusieurs systèmes d'exploitation (OS) et variantes d'OS. Cette opération doit être effectuée lors de l'installation de votre cluster.
Pour plus d'informations, voir Configuration de la mise en réseau hybride.
7.10.2. Déterminer pourquoi la machine Windows ne devient pas un nœud de calcul
Il y a plusieurs raisons pour lesquelles une machine Windows ne devient pas un nœud de calcul. La meilleure façon d'étudier ce problème est de collecter les journaux de l'opérateur de configuration de la machine Windows (WMCO).
Conditions préalables
- Vous avez installé Windows Machine Config Operator (WMCO) à l'aide d'Operator Lifecycle Manager (OLM).
- Vous avez créé un ensemble de machines de calcul Windows.
Procédure
Exécutez la commande suivante pour collecter les journaux WMCO :
$ oc logs -f deployment/windows-machine-config-operator -n openshift-windows-machine-config-operator
7.10.3. Accès à un nœud Windows
Il n'est pas possible d'accéder aux nœuds Windows à l'aide de la commande oc debug node
; cette commande nécessite l'exécution d'un pod privilégié sur le nœud, ce qui n'est pas encore pris en charge pour Windows. En revanche, il est possible d'accéder à un nœud Windows à l'aide d'un shell sécurisé (SSH) ou d'un protocole de bureau à distance (RDP). Un bastion SSH est nécessaire pour les deux méthodes.
7.10.3.1. Accès à un nœud Windows à l'aide de SSH
Vous pouvez accéder à un nœud Windows en utilisant un shell sécurisé (SSH).
Conditions préalables
- Vous avez installé le Windows Machine Config Operator (WMCO) à l'aide de l'Operator Lifecycle Manager (OLM).
- Vous avez créé un ensemble de machines de calcul Windows.
-
Vous avez ajouté à l'agent ssh la clé utilisée dans le secret
cloud-private-key
et la clé utilisée lors de la création du cluster. Pour des raisons de sécurité, n'oubliez pas de supprimer les clés de l'agent ssh après utilisation. -
Vous vous êtes connecté au nœud Windows à l 'aide d'un pod
ssh-bastion
.
Procédure
Accédez au nœud Windows en exécutant la commande suivante :
$ ssh -t -o StrictHostKeyChecking=no -o ProxyCommand='ssh -A -o StrictHostKeyChecking=no \ -o ServerAliveInterval=30 -W %h:%p core@$(oc get service --all-namespaces -l run=ssh-bastion \ -o go-template="{{ with (index (index .items 0).status.loadBalancer.ingress 0) }}{{ or .hostname .ip }}{{end}}")' <username>@<windows_node_internal_ip> 1 2
$ oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}
7.10.3.2. Accès à un nœud Windows à l'aide de RDP
Vous pouvez accéder à un nœud Windows en utilisant un protocole de bureau à distance (RDP).
Conditions préalables
- Vous avez installé Windows Machine Config Operator (WMCO) à l'aide d'Operator Lifecycle Manager (OLM).
- Vous avez créé un ensemble de machines de calcul Windows.
-
Vous avez ajouté à l'agent ssh la clé utilisée dans le secret
cloud-private-key
et la clé utilisée lors de la création du cluster. Pour des raisons de sécurité, n'oubliez pas de supprimer les clés de l'agent ssh après utilisation. -
Vous vous êtes connecté au nœud Windows à l 'aide d'un pod
ssh-bastion
.
Procédure
Exécutez la commande suivante pour établir un tunnel SSH :
$ ssh -L 2020:<windows_node_internal_ip>:3389 \ 1 core@$(oc get service --all-namespaces -l run=ssh-bastion -o go-template="{{ with (index (index .items 0).status.loadBalancer.ingress 0) }}{{ or .hostname .ip }}{{end}}")
- 1
- Spécifiez l'adresse IP interne du nœud, qui peut être découverte en exécutant la commande suivante :
$ oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}
À partir de l'interpréteur de commandes résultant, connectez-vous en SSH au nœud Windows et exécutez la commande suivante pour créer un mot de passe pour l'utilisateur :
C:\> net user <username> * 1
- 1
- Indiquez le nom d'utilisateur du fournisseur de cloud, par exemple
Administrator
pour AWS oucapi
pour Azure.
Vous pouvez maintenant accéder à distance au nœud Windows à l'adresse localhost:2020
à l'aide d'un client RDP.
7.10.4. Collecte des journaux de nœuds Kubernetes pour les conteneurs Windows
La journalisation des conteneurs Windows fonctionne différemment de la journalisation des conteneurs Linux ; les journaux des nœuds Kubernetes pour les charges de travail Windows sont transmis par défaut au répertoire C:\var\logs
. Par conséquent, vous devez collecter les journaux des nœuds Windows à partir de ce répertoire.
Conditions préalables
- Vous avez installé Windows Machine Config Operator (WMCO) à l'aide d'Operator Lifecycle Manager (OLM).
- Vous avez créé un ensemble de machines de calcul Windows.
Procédure
Pour afficher les journaux dans tous les répertoires de
C:\var\logs
, exécutez la commande suivante :$ oc adm node-logs -l kubernetes.io/os=windows --path= \ /ip-10-0-138-252.us-east-2.compute.internal containers \ /ip-10-0-138-252.us-east-2.compute.internal hybrid-overlay \ /ip-10-0-138-252.us-east-2.compute.internal kube-proxy \ /ip-10-0-138-252.us-east-2.compute.internal kubelet \ /ip-10-0-138-252.us-east-2.compute.internal pods
Vous pouvez désormais lister les fichiers dans les répertoires à l'aide de la même commande et afficher les fichiers journaux individuels. Par exemple, pour afficher les journaux des kubelets, exécutez la commande suivante :
$ oc adm node-logs -l kubernetes.io/os=windows --path=/kubelet/kubelet.log
7.10.5. Collecte des journaux d'événements des applications Windows
Le shim Get-WinEvent
sur le point de terminaison kubelet logs
peut être utilisé pour collecter des journaux d'événements d'application à partir de machines Windows.
Conditions préalables
- Vous avez installé Windows Machine Config Operator (WMCO) à l'aide d'Operator Lifecycle Manager (OLM).
- Vous avez créé un ensemble de machines de calcul Windows.
Procédure
Pour afficher les journaux de toutes les applications qui se connectent aux journaux d'événements sur la machine Windows, exécutez :
$ oc adm node-logs -l kubernetes.io/os=windows --path=journal
La même commande est exécutée lors de la collecte des journaux avec
oc adm must-gather
.D'autres journaux d'applications Windows du journal des événements peuvent également être collectés en spécifiant le service respectif avec un drapeau
-u
. Par exemple, vous pouvez exécuter la commande suivante pour collecter les journaux du service d'exécution Docker :$ oc adm node-logs -l kubernetes.io/os=windows --path=journal -u docker
7.10.6. Collecte des journaux Docker pour les conteneurs Windows
Le service Windows Docker n'envoie pas ses journaux vers stdout, mais les enregistre dans le journal des événements de Windows. Vous pouvez consulter les journaux d'événements de Docker pour enquêter sur les problèmes que vous pensez être causés par le service Windows Docker.
Conditions préalables
- Vous avez installé Windows Machine Config Operator (WMCO) à l'aide d'Operator Lifecycle Manager (OLM).
- Vous avez créé un ensemble de machines de calcul Windows.
Procédure
Accédez au nœud Windows par SSH et entrez dans PowerShell :
C:\N> powershell
Affichez les journaux Docker en exécutant la commande suivante :
C:\N> Get-EventLog -LogName Application -Source Docker