【k8s】docker无法查看到k8s的镜像,而crictl images查看报错
新版本的k8s 1.26.2使用的是containerd和docker是2套不同的容器系统, 在k8s中push和pull都是使用crictl, 所以生成pod时会发现docker images中存在镜像,但是kubelet提示" kubelet Failed to pull image "mynodejs:v1.0.0": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/mynodejs:v1.0.0""无法生成pod.
此时使用crictl images会报错:"WARN[0000] image connect using default endpoints", 解决办法如下:
第一步, 重新生成containerd的配置文件
# 默认情况下containerd的sock存放于/run/containerd/containerd.sock
# 重新设置一下使用的runtime-endpoint, 生成后的crictl配置默认存放在/etc/crictl.yaml
crictl config runtime-endpoint unix:///run/containerd/containerd.sock
第二步, 编辑vim /etc/crictl.yaml
# 编辑/etc/crictl.yaml文件, 修改, 主要是新版本增加的image-endpoint
runtime-endpoint: "unix:///run/containerd/containerd.sock"
image-endpoint: "unix:///run/containerd/containerd.sock" #与上边runtime-endpoint一致即可
timeout: 10
debug: false
pull-image-on-create: false
disable-pull-on-run: false
第三步, 完成
# 重启内核, 查看k8s镜像
systemctl daemon-reload
crictl image
# containerd在导入镜像时, 使用ctr命令, 并且要指定k8s默认的命名空间"k8s.io", 否则会查询不到
ctr -n k8s.io image import /home/mynodejs.tar.gz