Container
作为接替 Docker 运行时的 Containerd 在早在 Kubernetes1.7 时就能直接与 Kubelet 集成使用,只是大部分时候我们因熟悉 Docker,在部署集群时采用了默认的 dockershim。在V1.24起的版本的 kubelet 就彻底移除了dockershim,改为默认使用Containerd了,当然也使用 cri-dockerd 适配器来将 Docker Engine 与 Kubernetes 集成,containerd 相比于docker , 多了namespace概念, 每个image和container 都会在各自的namespace下可见, 目前k8s会使用k8s.io 作为命名空间
更换 Containerd 后,以往我们常用的 docker 命令也不再使用,取而代之的分别是 crictl 和 ctr 两个命令客户端。crictl 是遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜像。ctr 是 containerd 的一个客户端工具
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导入镜像的时候特别注意一点,最好指定命名空间
# containerd 版本
ctr -v
# k8s 版本
crictl -v
# 一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装了 containerd 服务后就可以操作 ctr 命令
一、镜像
1.1、常见命令
释义 | 语法 | 备注(不指明命名空间,默认为k8s.io) |
---|---|---|
查看所有镜像 | crictl images & ctr image list & ctr i list & ctr i ls | 四种形式皆可 |
删除镜像 | ctr -n k8s.io i rm k8s.gcr.io/pause:3.2 | |
删除镜像 | crictl rmi k8s.gcr.io/pause:3.2 | |
拉取镜像 | ctr -n k8s.io i pull -k k8s.gcr.io/pause:3.2 | |
推送镜像 | ctr -n k8s.io i push -k k8s.gcr.io/pause:3.2 | |
导出镜像 | ctr -n k8s.io i export pause.tar k8s.gcr.io/pause:3.2 | |
导入镜像 | ctr -n k8s.io i import pause.tar | |
标签TAG | ctr -n k8s.io i tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2 | 若镜像存在,使用参数--force |
清空无用镜像 | crictl rmi --prune | 同docker image prune效果一致 |
1.2、容器启动
# --null-io: 将容器内标准输出重定向到/dev/null
# --net-host: 主机网络
# -d: 当task执行后就进行下一步shell命令,如没有选项,则会等待用户输入,并定向到容器内
# --mount 挂载本地目录或文件到容器
# --env 环境变量
# --log-uri 如需配置自定义日志,值格式file:///var/log/xx.log
ctr -n k8s.io run \
--null-io --net-host -d --env PASSWORD="123456" \
--mount type=bind,src=/etc,dst=/host-etc,options=rbind:rw
二、容器操作
释义 | 语法 | 备注(不指明命名空间,默认为k8s.io) |
---|---|---|
查看所有pod | crictl pods | |
查看pod信息 | crictl pods --id dae3e667fc348 | |
启动pod | crictl runp xxx | |
停止pod | crictl stopp xxx | |
移除pod | crictl rmp xxx | |
查看所有容器 | crictl ps -a | 涉及显示多个pod下的容器 |
查看所有容器 | crictl ps | 涉及显示多个pod下的容器,状态:在运行 |
停止容器 | crictl stop 9992010dab3aa | |
启动容器 | crictl start 9992010dab3aa | |
删除容器 | crictl rm 9992010dab3aa | |
查看容器信息 | crictl inspect 9992010dab3aa | |
查看容器日志 | crictl logs 9992010dab3aa | |
容器内部编辑 | crictl exec -it 9992010dab3aa -n kube-system /bin/bash | 最近N行内容追加参数--tail=N |
配置文件位置 | cat /etc/crictl.yaml | runtime-endpoint对应值 |
基于配置文件 | crictl -r /run/containerd/containerd.sock pods |