J'essaie de lancer mon premier pod Kubernetes localement. J'ai lancé la commande suivante (de here ):
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
Ensuite, j'ai essayé de lancer ce qui suit:
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
Maintenant, quand je cours: kubectl get pods
Je suis en train:
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
BTW: docker images
revenir:
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
pourquoi ai-je le ImagePullBackOff ??
Par défaut, Kubernetes consulte des images dans le registre public de Docker. Si votre image n'existe pas, elle ne pourra pas la tirer.
Vous pouvez exécuter un registre Kubernetes local avec le additif du cluster de registre .
Puis marquez vos images avec localhost:5000
:
docker tag aii localhost:5000/dev/aii
Poussez l'image dans le registre Kubernetes:
docker Push localhost:5000/dev/aii
Et changez run-aii.yaml pour utiliser le localhost:5000/dev/aii
_ image au lieu de aii
. Kubernetes devrait maintenant pouvoir tirer l’image.
Vous pouvez également exécuter un registre Docker privé via l'un des fournisseurs proposant ce service (AWS ECR, GCR, etc.), mais s'il s'agit d'un développement local, il sera plus rapide et plus facile de configurer un registre Kubernetes Docker.
J'ai eu le même problème, car j'avais déjà créé un pod à partir de l'image du menu fixe via le fichier .yml, mais le nom m'a été mal saisi, c'est-à-dire test-app: 1.0.1 lorsque j'avais besoin de test-app: 1.0.2 dans mon fichier .yml. Alors j'ai fait kubectl delete pods --all
pour supprimer le pod défectueux puis refaites le kubectl create -f name_of_file.yml
qui a résolu mon problème.
Un problème qui peut causer un ImagePullBackOff
, en particulier si vous extrayez d'un registre privé, est si le module n'est pas configuré avec le imagePullSecret
du registre privé.
Une erreur d'authentification peut provoquer un imagePullBackOff
.
J'avais un problème similaire lors de l'utilisation de minikube over hyperv avec 2048 Go de mémoire. J'ai trouvé que dans HyperV Manager, la demande en mémoire était supérieure à celle allouée.
J'ai donc arrêté minikube et assigné quelque part entre 4096-6144GB. Cela a bien fonctionné par la suite, tous les modules fonctionnant!
Je ne sais pas si cela peut régler le problème dans tous les cas. Mais jetez un coup d’œil à la mémoire et au disque alloués au minikube.
Vous pouvez aussi spécifier imagePullPolicy: Never
dans la spécification du conteneur:
containers:
- name: nginx
imagePullPolicy: Never
image: custom-nginx
ports:
- containerPort: 80