Ich versuche, meinen ersten Kubernetes-Pod lokal auszuführen. Ich habe den folgenden Befehl ausgeführt (von hier aus ):
export ARCH=amd64
docker run -d \
--volume=/:/rootfs:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:rw \
--volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
--volume=/var/run:/var/run:rw \
--net=host \
--pid=host \
--privileged \
gcr.io/google_containers/hyperkube-${ARCH}:${K8S_VERSION} \
/hyperkube kubelet \
--containerized \
--hostname-override=127.0.0.1 \
--api-servers=http://localhost:8080 \
--config=/etc/kubernetes/manifests \
--cluster-dns=10.0.0.10 \
--cluster-domain=cluster.local \
--allow-privileged --v=2
Dann habe ich versucht, Folgendes auszuführen:
kubectl create -f ./run-aii.yaml
run-aii.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: aii
spec:
replicas: 2
template:
metadata:
labels:
run: aii
spec:
containers:
- name: aii
image: aii
ports:
- containerPort: 5144
env:
- name: KAFKA_IP
value: kafka
volumeMounts:
- mountPath: /root/script
name: scripts-data
readOnly: true
- mountPath: /home/aii/core
name: core-aii
readOnly: true
- mountPath: /home/aii/genome
name: genome-aii
readOnly: true
- mountPath: /home/aii/main
name: main-aii
readOnly: true
- name: kafka
image: kafkazoo
volumeMounts:
- mountPath: /root/script
name: scripts-data
readOnly: true
- mountPath: /root/config
name: config-data
readOnly: true
- name: ws
image: ws
ports:
- containerPort: 3000
volumes:
- name: scripts-data
hostPath:
path: /home/aii/general/infra/script
- name: config-data
hostPath:
path: /home/aii/general/infra/config
- name: core-aii
hostPath:
path: /home/aii/general/core
- name: genome-aii
hostPath:
path: /home/aii/general/genome
- name: main-aii
hostPath:
path: /home/aii/general/main
Wenn ich jetzt renne: kubectl get pods
Ich bekomme:
NAME READY STATUS RESTARTS AGE
aii-806125049-18ocr 0/3 ImagePullBackOff 0 52m
aii-806125049-6oi8o 0/3 ImagePullBackOff 0 52m
aii-pod 0/3 ImagePullBackOff 0 23h
k8s-etcd-127.0.0.1 1/1 Running 0 2d
k8s-master-127.0.0.1 4/4 Running 0 2d
k8s-proxy-127.0.0.1 1/1 Running 0 2d
nginx-198147104-9kajo 1/1 Running 0 2d
Übrigens: docker images
Rückkehr:
REPOSITORY TAG IMAGE ID CREATED SIZE
ws latest fa7c5f6ef83a 7 days ago 706.8 MB
kafkazoo latest 84c687b0bd74 9 days ago 697.7 MB
aii latest bd12c4acbbaf 9 days ago 1.421 GB
node 4.4 1a93433cee73 11 days ago 647 MB
gcr.io/google_containers/hyperkube-amd64 v1.2.4 3c4f38def75b 11 days ago 316.7 MB
nginx latest 3edcc5de5a79 2 weeks ago 182.7 MB
docker_kafka latest e1d954a6a827 5 weeks ago 697.7 MB
spotify/kafka latest 30d3cef1fe8e 12 weeks ago 421.6 MB
wurstmeister/zookeeper latest dc00f1198a44 3 months ago 468.7 MB
centos latest 61b442687d68 4 months ago 196.6 MB
centos centos7.2.1511 38ea04e19303 5 months ago 194.6 MB
gcr.io/google_containers/etcd 2.2.1 a6cd91debed1 6 months ago 28.19 MB
gcr.io/google_containers/pause 2.0 2b58359142b0 7 months ago 350.2 kB
sequenceiq/hadoop-docker latest 5c3cc170c6bc 10 months ago 1.766 GB
Warum bekomme ich das ImagePullBackOff?
docker
kubernetes
ItayB
quelle
quelle
aii
ein privates Image, das Sie erstellt haben?Antworten:
Standardmäßig sucht Kubernetes in der öffentlichen Docker-Registrierung nach Bildern. Wenn Ihr Bild dort nicht vorhanden ist, kann es nicht abgerufen werden.
Sie können eine lokale Kubernetes-Registrierung mit dem Registrierungscluster-Addon ausführen .
Dann kennzeichnen Sie Ihre Bilder mit
localhost:5000
:docker tag aii localhost:5000/dev/aii
Schieben Sie das Bild in die Kubernetes-Registrierung:
docker push localhost:5000/dev/aii
Und ändern Sie run-aii.yaml, um das
localhost:5000/dev/aii
Bild anstelle von zu verwendenaii
. Jetzt sollte Kubernetes in der Lage sein, das Bild zu ziehen.Alternativ können Sie eine private Docker-Registrierung über einen der Anbieter ausführen, die dies anbieten (AWS ECR, GCR usw.). Wenn dies jedoch für die lokale Entwicklung vorgesehen ist, ist die Einrichtung mit einer lokalen Kubernetes Docker-Registrierung schneller und einfacher.
quelle
Ein Problem, das
ImagePullBackOff
insbesondere dann auftreten kann, wenn Sie aus einer privaten Registrierung abrufen, besteht darin, dass der Pod nicht mit demimagePullSecret
der privaten Registrierung konfiguriert ist .Ein Authentifizierungsfehler kann eine
imagePullBackOff
.quelle
kubectl logs pod/pod-name -n <namespace>
Wenn Sie mehr als 1 enthalten in der Hülsekubectl logs pod/pod-name -c container -n <namespace>
kubectl get events -n <namespace>
Ich hatte das gleiche Problem, das dazu führte, dass ich bereits einen Pod aus dem Docker-Image über die .yml-Datei erstellt hatte. Ich habe jedoch den Namen falsch eingegeben, dh Test-App: 1.0.1, als ich Test-App: 1.0.2 benötigte in meiner .yml Datei. Also habe ich
kubectl delete pods --all
den fehlerhaften Pod entfernt und dann den Fehlerkubectl create -f name_of_file.yml
behoben, der mein Problem gelöst hat.quelle
Sie können auch
imagePullPolicy: Never
in der Containerspezifikation angeben :containers: - name: nginx imagePullPolicy: Never image: custom-nginx ports: - containerPort: 80
quelle
Das Problem tritt auf, wenn das Image nicht im Cluster vorhanden ist und die k8s-Engine die entsprechende Registrierung abruft. Die k8s Engine ermöglicht drei Arten von ImagePullPolicy :
Best Practices: Es wird immer empfohlen, das neue Image sowohl in der Docker-Datei als auch in der k8s-Bereitstellungsdatei zu kennzeichnen. Damit es das neue Bild in Container ziehen kann.
quelle
Ich hatte ein ähnliches Problem bei der Verwendung von Minikube über Hyperv mit 2048 GB Speicher. Ich habe festgestellt, dass im HyperV-Manager der Speicherbedarf höher als zugewiesen war.
Also habe ich minikube gestoppt und irgendwo zwischen 4096-6144GB zugewiesen. Danach hat es gut funktioniert, alle Pods liefen!
Ich weiß nicht, ob dies das Problem in jedem Fall lösen kann. Aber schauen Sie sich nur den Speicher und die Festplatte an, die dem Minikube zugeordnet sind.
quelle
Ich hatte auch dieses Problem, als ich überprüfte, dass das Bild, das ich aus einer privaten Registrierung gezogen habe, entfernt wurde. Wenn wir den Pod beschreiben, wird das Pulling-Ereignis und das Bild angezeigt, das es zu ziehen versucht
kubectl describe pod <POD_NAME> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Pulling 18h (x35 over 20h) kubelet, gsk-kub Pulling image "registeryName:tag" Normal BackOff 11m (x822 over 20h) kubelet, gsk-kub Back-off pulling image "registeryName:tag" Warning Failed 91s (x858 over 20h) kubelet, gsk-kub Error: ImagePullBackOff
quelle
Trotz all der anderen tollen Antworten half mir keiner, bis ich einen Kommentar fand, der auf diese Aktualisierung der Bilder hinwies :
Genau das wollte ich, schien aber nicht zu funktionieren.
Das Lesen sagte weiter folgendes:
Als ich durch
latest
eine Version ersetzt habe (die ich auf den Docker-Daemon von minikube übertragen hatte), hat es gut funktioniert.$ kubectl create deployment presto-coordinator \ --image=warsaw-data-meetup/presto-coordinator:beta0 deployment.apps/presto-coordinator created $ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE presto-coordinator 1/1 1 1 3s
Suchen Sie den Pod der Bereitstellung (mit
kubectl get pods
) und verwenden Sie ihnkubectl describe pod
, um mehr über den Pod zu erfahren.quelle
Ich hatte diesen Fehler, als ich versuchte, eine zu erstellen
replicationcontroller
. Das Problem war, dass ich den Nginx-Bildnamen in der Vorlagendefinition falsch geschrieben habe.Hinweis : Dieser Fehler tritt auf, wenn kubernetes das angegebene Image nicht aus dem Repository abrufen kann.
quelle