> kubectl get pod ingress-nginx-controller-67897c9494-zjf9r -n ingress-nginx -o yaml | grep image
docker pull k8s.gcr.io/ingress-nginx/controller:v0.44.0@sha256:3dd0fac48073beaca2d67a78c746c7593f9c575168a17139a9955a82c63c4b9a
1. 方法一
在宿主机下载好镜像,依次保存,上传到虚拟机,加载,一通操作后发现加载好的镜像的 REPOSITORY 和 TAG 都是 none,这还行?查了下发现是因为 save 镜像时是使用的 docker save <image id> 命令,它会清除 REPOSITORY 和 TAG 的值,改为使用 docker save <repo>:<tag> 即可。
错误示范:
docker save -o 435df390f367 ingress-nginx-controller.tar
解决虚拟机无法下载 k8s.gcr.io 镜像的问题
背景
两种方式:
环境:
问题:
在虚拟机上安装 ingress-nginx-controller 时,状态一直是 ImagePullBackOff。
查看该 Pod 用到的镜像:
1. 方法一
在宿主机下载好镜像,依次保存,上传到虚拟机,加载,一通操作后发现加载好的镜像的 REPOSITORY 和 TAG 都是 none,这还行?查了下发现是因为 save 镜像时是使用的
docker save <image id>
命令,它会清除 REPOSITORY 和 TAG 的值,改为使用docker save <repo>:<tag>
即可。以下是没问题的操作。
1.1. 宿主机下载镜像
宿主机有梯子的话,这步应该没什么问题,直接 pull 即可。
不过下载好后的镜像没有 tag,又打了个 tag:
1.2. 保存镜像
保存镜像:
1.3. 上传、加载镜像
上传镜像:
加载镜像:
查看 Docker 镜像,一切正常。
1.4. 查看 Kubernetes 运行情况
查看 Pod ingress-nginx-controller 的状态,依然是 ImagePullBackOff...
镜像的 TAG 也和之前查看的结果一致,都是 v0.44.0。难道是后面的 sha256 值不一样?
查看虚拟机里面镜像 k8s.gcr.io/ingress-nginx/controller 的 sha256 值:
果然和最开始查到的不一致。
修改 Deployment ingress-nginx-controller 用到的镜像,删除镜像后面的 sha256 值:
现在再查看 Pod 状态,已经开始正常运行了。
2. 方式二
前提:
允许局域网连接
已打开。在执行
docker pull
时,是由守护进程dockerd
来执行。因此,代理需要配在dockerd
的环境中。而这个环境,则是受systemd
所管控,因此实际是systemd
的配置。创建如下文件:
在 proxy.conf 中添加以下内容:
重载
systemd
并重启dockerd
:测试效果:
验证有效。