Kubernetes的ErrImagePull和ImagePullBackOff的详细信息
-
- コンテナイメージ
-
- イメージのプル
-
- イメージのプルポリシー
-
- ErrImagePull
-
- ErrImagePullのデバッグ
-
- イメージプルエラーの監視
- その他のイメージエラー
容器图像
容器容器映像
容器注册表
Push: イメージをアップロードし、リポジトリで利用できるようにする
Pull:コンテナで使用するためにイメージをダウンロードする
在这个例子中,我们使用了Docker CLI,但只要是实现了Open Container Initiative Distribution规范的工具,就可以用它来进行与容器注册表的所有交互。
图像下载
最新的
获取指定名称的图像
最新的
docker pull nginx
kubectl run mypod nginx
使用名字和标签来提取图像
最新的 (zuì de)
docker pull nginx:1.23.1-alpine
kubectl run mypod nginx:1.23.1-alpine
通过摘要获取印象
docker pull sha256:d164f755e525e8baee113987bdc70298da4c6f48fdc0bbd395817edf17cf7c2b
kubectl run mypod --image=nginx:sha25645b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5
形象推送策略
-
- Always
-
- IfNotPresent
- Never
一直
一直
如果不存在的话
如果不存在
永不
永远不要
图片永远不要被拉取
默认的图像拉取策略
-
- imagePullPolicyを省略し、タグがlatestの場合、imagePullPolicyはAlwaysに設定されます。
-
- imagePullPolicy を省略し、イメージのタグを指定すると、imagePullPolicy は Always に設定されます。
- imagePullPolicy を省略し、タグを latest 以外の値に設定した場合、imagePullPolicy は IfNotPresent に設定されます。
错误图像拉取
kubelet = kubelet
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
goodpod 1/1 Running 0 21h
mypod 0/1 ErrImagePull 0 4s
-
- Podは READY ステータスではない
- ステータスは ErrImagePull
$ kubectl logs mypod --all-containers
Error from server (BadRequest): container "mycontainer" in pod "mypod" is waiting to start: trying and failing to pull image
镜像拉取失败
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
goodpod 1/1 Running 0 21h
mypod 0/1 ImagePullBackOff 0 84s
-
- Podは READY ステータスでない
-
- ステータスはImagePullBackOff
- CrashLoopBackOffとは異なり、再起動はない(厳密にはPodは起動すらしていない)
$ kubectl describe pod mypod
State: Waiting
Reason: ImagePullBackOff
...
Warning Failed 3m57s (x4 over 5m28s) kubelet Error: ErrImagePull
Warning Failed 3m42s (x6 over 5m28s) kubelet Error: ImagePullBackOff
Normal BackOff 18s (x20 over 5m28s) kubelet Back-off pulling image "failed-image"
ErrImagePull和ImagePullBackOff的时间轴
调试ErrImagePull和ImagePullBackOff
-
- イメージが間違っている
-
- イメージタグが正しくない
-
- イメージのダイジェストが間違っている
-
- ネットワークの問題、またはイメージリポジトリが利用できない
- プライベートレジストリからのプルであるが、imagePullSecret が提供されていない
$ kubectl describe pod podname
$ kubect logs podname –all-containers
$ kubectl get events --field-selector involvedObject.name=podname
其他图像错误
错误的图片永远不要拉取
等待中
监控 Prometheus 中的图像拉取错误
kube_pod_container_status_waiting_reason{reason="ErrImagePull"}
kube_pod_container_status_waiting_reason{reason="ImagePullBackOff"}
用 Prometheus 监控 ErrImagePull 和 ImagePullBackOff
kube_pod_container_status_waiting_reason{reason="ErrImageNeverPull"}
总结
请使用Sysdig Monitor进行解决Image Pull错误的故障排除。
在解决Sysdig Monitor的ErrImagePull和ImagePullBackOff问题时的故障排除方法。