Je suis nouveau dans tout ce qui concerne Kubernetes, j'ai donc encore beaucoup à apprendre.
Avoir créé un cluster Kubernetes à deux nœuds et les deux nœuds (maître et travailleur) sont prêts à travailler, ce qui est bien:
[monkey@k8s-dp1 nginx-test]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-dp1 Ready master 2h v1.9.1
k8s-dp2 Ready <none> 2h v1.9.1
De plus, tous les pods Kubernetes semblent corrects:
[monkey@k8s-dp1 nginx-test]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-k8s-dp1 1/1 Running 0 2h
kube-system kube-apiserver-k8s-dp1 1/1 Running 0 2h
kube-system kube-controller-manager-k8s-dp1 1/1 Running 0 2h
kube-system kube-dns-86cc76f8d-9jh2w 3/3 Running 0 2h
kube-system kube-proxy-65mtx 1/1 Running 1 2h
kube-system kube-proxy-wkkdm 1/1 Running 0 2h
kube-system kube-scheduler-k8s-dp1 1/1 Running 0 2h
kube-system weave-net-6sbbn 2/2 Running 0 2h
kube-system weave-net-hdv9b 2/2 Running 3 2h
Cependant, si j'essaie de créer un nouveau déploiement dans le cluster, le déploiement est créé mais son pod ne parvient pas à passer dans l'état RUNNING approprié. par exemple.
[monkey@k8s-dp1 nginx-test]# kubectl apply -f https://k8s.io/docs/tasks/run-application/deployment.yaml
deployment "nginx-deployment" created
[monkey@k8s-dp1 nginx-test]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-deployment-569477d6d8-f42pz 0/1 ContainerCreating 0 5s
default nginx-deployment-569477d6d8-spjqk 0/1 ContainerCreating 0 5s
kube-system etcd-k8s-dp1 1/1 Running 0 3h
kube-system kube-apiserver-k8s-dp1 1/1 Running 0 3h
kube-system kube-controller-manager-k8s-dp1 1/1 Running 0 3h
kube-system kube-dns-86cc76f8d-9jh2w 3/3 Running 0 3h
kube-system kube-proxy-65mtx 1/1 Running 1 2h
kube-system kube-proxy-wkkdm 1/1 Running 0 3h
kube-system kube-scheduler-k8s-dp1 1/1 Running 0 3h
kube-system weave-net-6sbbn 2/2 Running 0 2h
kube-system weave-net-hdv9b 2/2 Running 3 2h
Je ne sais pas comment comprendre le problème, mais si par exemple je fais un kubectl get ev
, Je peux voir l'événement suspect suivant:
<invalid> <invalid> 1 nginx-deployment-569477d6d8-f42pz.15087c66386edf5d Pod
Warning FailedCreatePodSandBox kubelet, k8s-dp2 Failed create pod sandbox.
Mais je ne sais pas où aller d'ici. Je peux également voir que l'image docker nginx elle-même n'apparaît jamais dans docker images
.
Comment en savoir plus sur le problème? Suis-je en train de manquer quelque chose de fondamental dans la configuration de Kubernetes?
--- NOUVELLES INFO ---
Pour des informations de fond au cas où cela aiderait ...
Les nœuds Kubernetes s'exécutent sur des machines virtuelles CentOS 7 hébergées sur Windows 10 hyper-v.
--- NOUVELLES INFO ---
Fonctionnement kubectl describe pods
affiche l'avertissement suivant:
Warning NetworkNotReady 1m kubelet, k8s-dp2 network is not ready: [runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized]
--- NOUVELLES INFO ---
Éteint les machines virtuelles Hyper-v exécutant Kubernetes pour la nuit après la fin de mes heures de travail de jour et à mon retour au bureau ce matin, j'ai remis sous tension les machines virtuelles Kubernetes pour continuer et, pendant environ 15 minutes, la commande:
kubectl get pods --all-namespaces
affichait toujours ContainerCreating
pour ces pods nginx de la même manière qu'hier mais, en ce moment, la commande affiche maintenant tous les pods sous la forme Running
y compris les pods nginx ... c'est-à-dire que le problème s'est résolu après un redémarrage complet des machines virtuelles des nœuds maître et travailleur.
J'ai maintenant refait un redémarrage complet et tous les pods s'affichent comme Running, ce qui est bien.
Un redémarrage complet des deux machines virtuelles exécutant le nœud maître Kubernetes et le nœud de travail Kubernetes a permis aux pods de s'afficher tous comme Running
(REMARQUE: après le premier redémarrage, il a fallu environ 15 à 20 minutes pour les pods en question. pour entrer dans un état Running
et, lors d'un redémarrage ultérieur, les pods en question sont passés dans un état Running
relativement plus rapidement ... 3-5 minutes).
En utilisant kubectl describe pod
afficherait tous les événements. Dans certains cas, le déploiement peut encore extraire les images du docker à distance, de sorte que l'état sera toujours affiché comme ContainerCreating
Utilisation kubectl describe pod <name>
pour en savoir plus
essayez de systemctl restart kubelet.service