侧边栏壁纸
  • 累计撰写 59 篇文章
  • 累计创建 52 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

ctr和crictl显示镜像不一致

木东
2023-06-02 / 0 评论 / 0 点赞 / 46 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

ctr和crictl显示镜像列表不一致

现象

安装k3s后,使用ctr i import xxx.tar镜像之后,k3s通过yaml启动容器后报镜像未找到。

原因

这台节点原先已经安装了docker,安装时产生ctr命令,默认使用 docker的 --containerd=/run/containerd/containerd.sock,先记作containerd1

然后又安装了k3s,安装时产生crictl命令,默认使用 k3s的-address /run/k3s/containerd/containerd.sock(虽然k3s安装时也会产生ctr,但如果先安装了docker,就默认使用原有的ctr),先记作containerd2

ctr是containerd的一个客户端工具,crictl是k8s/k3s调用containerd的接口
crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序
crictl 则直接对应了命名空间 k8s.io,即”crictl image list“等同于“ctr -n=k8s.io image list“
所以crictl是kubernetes专属的containerd管理命令,crictl -v 输出的是当前 k8s 的版本。

ctr指向了containerd1,crictl指向了containerd2,所以用ctr导入的镜像用crictl命令查不到,又因为k3s是通过crictl接口调用的containerd2,所以会报镜像未找到

两种解决方案

  • 卸载docker,重新安装k3s,简单粗暴
  • ctr导入镜像时指定k3s的containerd

可以在运行命令时通过 -a--address 参数指定套接字路径。例如:

ctr -a /run/k3s/containerd/containerd.sock i import xx.tar
0

评论区