首先,出身不一样,ctr 是 containerd 的一个客户端工具,而crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。
其次,ctr是containerd自带的CLI命令行工具,crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互;
所以一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装了 containerd 服务后就可以操作 ctr 命令。
ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。
[root@ctdmaster1 ~]# ctr -v
ctr containerd.io 1.6.6
[root@ctdmaster1 ~]# crictl -v
crictl version v1.26.0
[root@ctdmaster1 ~]#
由于 Containerd 也有 namespaces 的概念,对于上层编排系统的支持,ctr的客户端 主要区分了 3 个命名空间分别是k8s.io、moby和default,以上我们用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
crictl image list = ctr -n=k8s.io image list
crictl image ls = ctr -n=k8s.io image ls
crictl images = ctr -n=k8s.io image list
crictl images = ctr -n=k8s.io image ls
使用ctr命令指定命名空间导入镜像
ctr -n=k8s.io image import dashboard.tar
查看镜像,可以看到可以查询到了
crictl images
三、命令的比较
详细命令差别:
命令 | ctr | crictl |
查看运行的容器 | ctr task ls/ctr container ls | crictl ps |
查看镜像 | ctr image ls | crictl images |
查看容器日志 | 无 | crictl logs |
查看容器数据信息 | ctr container info | crictl inspect |
查看容器资源 | 无 | crictl stats |
启动/关闭已有的容器 | ctr task start/kill | crictl start/stop |
运行一个新的容器 | ctr run | 无(最小单元为pod) |
修改镜像标签 | ctr image tag | 无 |
创建一个新的容器 | ctr container create | crictl create |
导入镜像 | ctr image import | 无 |
导出镜像 | ctr image export | 无 |
删除容器 | ctr container rm | crictl rm |
删除镜像 | ctr image rm | crictl rmi |
拉取镜像 | ctr image pull | crictl pull |
推送镜像 | ctr image push | 无 |
在容器内部执行命令 | 无 | crictl exec |
评论一下?