webentwicklung-frage-antwort-db.com.de

Minikube blieb beim Erstellen eines Containers hängen

Ich habe kürzlich angefangen, Kubernetes zu lernen, indem ich Minikube lokal in meinem Mac verwende. Zuvor konnte ich einen lokalen Kubernetes-Cluster mit Minikube 0.10.0 starten, eine Bereitstellung erstellen und das Kubernetes-Dashboard anzeigen. 

Gestern habe ich versucht, den Cluster zu löschen und alles von Grund auf neu zu machen. Ich habe jedoch festgestellt, dass die Assets nicht bereitgestellt werden können und das Dashboard nicht angezeigt werden kann. Nach allem, was ich sah, schien alles bei der Containererstellung stecken zu bleiben. 

Nachdem ich minikube start lief, meldete es sich 

Starting local Kubernetes cluster...
Kubectl is now configured to use the cluster.

Bei der Ausführung von kubectl get pods --all-namespaces wurde Folgendes gemeldet (beachten Sie die Spalte STATUS):

kubectl get pods --all-namespaces
NAMESPACE     NAME                          READY     STATUS              RESTARTS   AGE
kube-system   kube-addon-manager-minikube   0/1       ContainerCreating   0          51s

docker ps zeigte nichts an:

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

minikube status sagt mir, dass VM und der Cluster ausgeführt werden:

minikubeVM: Running
localkube: Running

Wenn ich versuchte, eine Bereitstellung und einen Autoscaler zu erstellen, wurde mir gesagt, dass sie erfolgreich erstellt wurden:

kubectl create -f configs
deployment "hello-minikube" created
horizontalpodautoscaler "hello-minikube-autoscaler" created

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                             READY     STATUS              RESTARTS   AGE
default       hello-minikube-661011369-1pgey   0/1       ContainerCreating   0          1m
default       hello-minikube-661011369-91iyw   0/1       ContainerCreating   0          1m
kube-system   kube-addon-manager-minikube      0/1       ContainerCreating   0          21m

Bei der Veröffentlichung des Dienstes heißt es:

$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

$ kubectl get service
NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
hello-minikube   10.0.0.32    <nodes>       8080/TCP   6s
kubernetes       10.0.0.1     <none>        443/TCP    22m

Als ich versuchte, auf den Dienst zuzugreifen, wurde mir gesagt:

curl $(minikube service hello-minikube --url)
Waiting, endpoint for service is not ready yet...

docker ps zeigte immer noch nichts. Es sah für mich aus, dass beim Erstellen eines Containers alles hängen blieb. Ich habe einige andere Möglichkeiten ausprobiert, um dieses Problem zu umgehen:

  1. Upgrade auf Minikube 0.11.0
  2. Verwenden Sie den xhyve-Treiber anstelle des Virtualbox-Treibers
  3. Löschen Sie alle zwischengespeicherten Dateien wie ~/.minikube, ~/.kube und den Cluster und versuchen Sie es erneut

Keiner von ihnen arbeitete für mich.

Kubernetes ist noch neu für mich und ich würde gerne wissen:

  1. Wie kann ich dieses Problem beheben? 
  2. Was könnte die Ursache für dieses Problem sein?

Jede Hilfe wird geschätzt. Vielen Dank.

12
nybon

Es stellte sich in meinem Fall als Netzwerkproblem heraus.

Der Pod-Status lautet "ContainerCreating", und ich habe bei der Containererstellung festgestellt, dass das Docker-Image von gcr.io abgerufen wird, das in China nicht zugänglich ist (von GFW gesperrt). Vorher hat es für mich funktioniert, weil ich zufällig eine Verbindung zu einem VPN hergestellt habe.

6
nybon

Ich habe minikube nicht ausprobiert, aber ich habe kubernetes verwendet. Mit den bereitgestellten Informationen ist es schwierig, die Ursache des Problems zu sagen. Ihre minikube hat keine Probleme beim Erstellen von Ressourcen, ContainerCreating ist jedoch ein Problem im Zusammenhang mit dem docker-Dämon oder einer nicht ordnungsgemäßen Kommunikation zwischen kube-api und docker-Dämon oder einem Problem mit kubelet.

Sie können den folgenden Befehl versuchen:

kubectl describe po POD_NAME

Dadurch erhalten Sie die Ereignisse des POD. Möglicherweise gibt dies einen Pfad zur Ursache des Problems an.

Sie können auch die Protokolle von kubelet überprüfen, um die Ereignisse abzurufen.

3
srikanth peetha

Der Horizontalpodautoscaler (hpa) benötigt einen Heapster. Sie müssen einen Heapster in Minikube ausführen, damit dies funktioniert. Sie können diese Probleme jederzeit mit minikube logs oder interaktiv über das Dashboard unter minikube dashboard debuggen. 

Die Schritte zum Ausführen von Heapster und Grafana finden Sie unter https://github.com/kubernetes/heapster

1
Matt Rickard

Ich hatte dieses Problem unter Windows, aber es stand im Zusammenhang mit einem NTLM proxy. Ich habe die minikube VM gelöscht und dann mit den korrekten Proxy-Einstellungen für meine CNTLM-Installation neu erstellt:

minikube start \
--docker-env http_proxy=http://10.0.2.2:3128 \
--docker-env https_proxy=http://10.0.2.2:3128 \
--docker-env no_proxy=localhost,127.0.0.1,::1,192.168.99.100

Siehe https://blog.alexellis.io/minikube-behind-proxy/

0
Nathan

Bei mir dauert es einige Minuten, bis ich das ContainerCreating-Problem sehe. Nachdem Sie den folgenden Befehl ausgeführt haben:

systemctl status kube-controller-manager.service

Ich erhalte diesen Fehler:

"Default/redis-master-2229813293" konnte nicht synchronisiert werden, da keine Pods erstellt werden konnten: Es wurde kein API-Token für das Dienstkonto "default" gefunden. Wiederholen Sie den Vorgang, nachdem das Token automatisch erstellt und dem Dienstkonto hinzugefügt wurde.

Es gibt zwei Möglichkeiten, dies zu lösen:

  1. Legen Sie das Dienstkonto mit Token fest
  2. Entfernen Sie die ServiceAccount-Einstellung von KUBE_ADMISSION_CONTROL im API-Server
0
onebraveman