K8s中ctr和crictl区别

2023-10-21 / 0 评论 / 277 阅读
温馨提示:
本文最后更新于 2023-10-21,已超过半年没有更新,若内容或图片失效,请留言反馈。

首先,出身不一样,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

三、命令的比较
详细命令差别:

命令ctrcrictl
查看运行的容器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

评论一下?

OωO
取消