概述
作为接替 Docker
运行时的 Containerd
在早在 Kubernetes1.7
时就能直接与 Kubelet
集成使用,只是大部分时候我们因熟悉 Docker
,在部署集群时采用了默认的 dockershim
。在 V1.24
起的版本的 kubelet
就彻底移除了dockershim
,改为默认使用Containerd
了,当然也使用 cri-dockerd
适配器来将 Docker Engine 与 Kubernetes
集成。
参考官方文档:
容器运行时 | Kubernetes
Containerd 常见命令操作
更换 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
命令 | docker | ctr(containerd) | crictl(kubernetes) |
---|---|---|---|
查看运行的容器 | docker ps | ctr task ls/ctr container ls | crictl ps |
查看镜像 | docker images ctr | image ls | crictl images |
查看容器日志 | docker logs | 无 | crictl logs |
查看容器数据信息 | docker inspect | ctr container info | crictl inspect |
查看容器资源 | docker stats | 无 | crictl stats |
启动/关闭已有的容器 | docker start/stop | ctr task start/kill | crictl start/stop |
运行一个新的容器 | docker run | ctr run | 无(最小单元为 pod) |
打标签 | docker tag | ctr image tag | 无 |
创建一个新的容器 | docker create | ctr container create | crictl create |
构建镜像 | docker build | 无 | 无 |
导入镜像 | docker load | ctr image import | 无 |
导出镜像 | docker save | ctr image export | 无 |
删除容器 | docker rm | ctr container rm | crictl rm |
删除镜像 | docker rmi | ctr image rm | crictl rmi |
拉取镜像 | docker pull | ctr image pull | ctictl pull |
推送镜像 | docker push | ctr image push | 无 |
登录或在容器内部执行命令 | docker exec | 无 | crictl exec |
清空不用的容器 | docker image prune | 无 | crictl rmi --prune |
更多命令操作,可以直接在命令行输入命令查看帮助。
docker --help
ctr --help
crictl --help
由于 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.gz
#查看镜像,可以看到可以查询到了
crictl images