containerd基础概念
docker-cli:这是一个命令行工具,它是用来完成 docker pull ,build,run,exec containerd:这是一个管理和运行容器的守护进程。它推送和拉动镜像,管理存储和网络,并监督容器的运 行。 runc:这是低级别的容器运行时间(实际创建和运行容器的东西)。它包括 libcontainer,一个用于创建容 器的基于 Go 的本地实现。实现了容器启停、资源隔离等功能。 更换 Containerd 后,以往我们常用的 docker 命令也不再使用,取而代之的分别是 crictl 和 ctr 两个 命令客户端。 crictl 是遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜 像。 ctr 是 containerd 的一个客户端工具。 ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认 为 crictl 是用于 k8s 的。 一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装 了 containerd 服务后就可以操作 ctr 命令。 使用crictl命令之前,需要先配置/etc/crictl.yaml如下: runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false 或者使用命令: crictl config runtime-endpoint unix:///run/containerd/containerd.sock crictl config image-endpoint unix:///run/containerd/containerd.sock 由于 Containerd 也有 namespaces 的概念,对于上层编排系统的支持,ctr 客户端主要区分了 3 个命名 空间分别是k8s.io、moby和default, k8s会使用k8s.io作为命名空间, containerd默认会使用default。 docker 其实也是默认调用的 containerd,事实上 docker 使用的 containerd 下面的命名空间默认 是 moby。 以上我们用crictl操作的均在k8s.io命名空间,使用ctr 看镜像列表就需要加上-n 参数。crictl 是只有一 个k8s.io命名空间,但是没有-n 参数。 【温馨提示】ctr images pull 拉取的镜像默认放在default,而 crictl pull 和 kubelet 默认拉取的镜 像都在 k8s.io 命名空间下。所以通过ctr导入镜像的时候特别注意一点,最好指定命名空间。 注意-n不能放在命令最后面,下面几行查看的镜像是一样的 ctr -n=k8s.io image ls ctr -n k8s.io image ls
crictl 没有-n参数,操作都在k8s.io命名空间下。 crictl image ls crictl images