web-dev-qa-db-fra.com

Kubernetes - Le pod reste dans l'état ContainerCreating

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.

6
Going Bananas

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).

5
Going Bananas

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

4
Anuj

Utilisation kubectl describe pod <name> pour en savoir plus

3
Lev Kuznetsov

essayez de systemctl restart kubelet.service

1
user2311194