k8s早1.24后放弃docker,并把containerd作为运行时组件,containerd 调用链更短,组件更少,更稳定,占用节点资源更少
ctr是containerd的一个客户端工具
crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序
crictl 使用命名空间 k8s.io,即:
crictl image list
等效于
ctr -n=k8s.io image list
镜像
推送/拉取镜像:
注意:需要填写完整的镜像地址,如docker.io/library/[镜像名称]:[tag]
ctr images push [镜像名称]:[tag]
ctr images pull [镜像名称]:[tag]
导出/导入镜像:
ctr image export [镜像文件名] [镜像地址]
ctr image import [镜像文件名]
部分命令对比:
命令 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 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
[root@k8s-node02 k8s-install]# ctr –help
USAGE:
ctr [global options] command [command options] [arguments…]
COMMANDS:
plugins, plugin 提供有关容器插件的信息,例如:ctr plugin ls
version 版本信息
containers, c, container 管理容器
content 管理内容
events, event 事件显示容器事件
images, image, i 管理镜像
leases 管理租赁
namespaces, namespace, ns 管理命名空间
pprof 为containerd提供golang Pprof输出
run 运行容器
snapshots, snapshot 管理快照
tasks, t, task 管理任务
install 安装一个新的包
oci OCI tools
shim 与shim直接交互
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
–debug 打开日志的调试输出
–address value, -a value containerd的GRPC服务器地址 (default: “/run/containerd/containerd.sock”) [$CONTAINERD_ADDRESS]
–timeout value CTR命令的总超时时间(默认值:0)
–connect-timeout value 连接到容器的超时时间(默认值:0)
–namespace value, -n value 命名空间与命令一起使用 (default: “default”) [$CONTAINERD_NAMESPACE]
–help, -h show help
–version, -v 打印版本
查看镜像
ctr images list 或 ctr i ls
# 查看指定命名空间下的镜像
ctr -n k8s.io images list
命名空间查看
ctr namespaces list 或 ctr ns list
镜像标记
ctr -n k8s.io images tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
删除镜像
ctr -n k8s.io images rm k8s.gcr.io/pause:3.2
拉取镜像
ctr images pull docker.io/library/redis:latest
# 指定命名空间并且检查镜像是否有效
ctr -n k8s.io images pull -k k8s.gcr.io/pause:3.2
导出镜像
ctr -n k8s.io images export pause.tar k8s.gcr.io/pause:3.2
导入镜像
不支持 build,commit 镜像
ctr -n k8s.io i import pause.tar
运行容器
ctr -n k8s.io run –null-io –net-host -d –env PASSWORD=$drone_password –mount type=bind,src=/etc,dst=/host-etc,options=rbind:rw –mount type=bind,src=/root/.kube,dst=/root/.kube,options=rbind:rw $image sysreport bash /sysreport/run.sh
–null-io: 将容器内标准输出重定向到/dev/null
–net-host: 主机网络
-d: 当task执行后就进行下一步shell命令,如没有选项,则会等待用户输入,并定向到容器内
查看容器
ctr containers list 或 ctr c ls
# 指定命名空间
ctr -n k8s.io c ls
任务查看
ctr -n k8s.io tasks list
停止容器
kill -a -s 9 {id}
创建静态容器
$ ctr container create docker.io/library/nginx:latest nginx
$ ctr task ls
TASK PID STATUS
开启任务
方式一:
# 开启任务
[root@k8s-node02 k8s-install]# ctr task start -d nginx
[root@k8s-node02 k8s-install]
# 查看进程列表
[root@k8s-node02 k8s-install]# ctr task list
TASK PID STATUS
nginx 0 RUNNING
#查看指定进程
[root@k8s-node02 k8s-install]# ctr task ps nginx
PID INFO
3679 –
3718 –
3719 –
# 查看本机对应的进程
[root@k8s-node02 k8s-install]# ps -ef|grep 3679
root 3679 3659 0 15:27 ? 00:00:00 nginx: master process nginx -g daemon off;
101 3718 3679 0 15:27 ? 00:00:00 nginx: worker process
101 3719 3679 0 15:27 ? 00:00:00 nginx: worker process
root 3740 1111 0 15:29 pts/0 00:00:00 grep –color=auto 3679
# ctr task exec 进入容器,id随便写就行,需要将其唯一
[root@k8s-node02 k8s-install]# ctr task exec –exec-id 1 -t nginx /bin/sh
方式二:(一键开启)
[root@localhost runc]# ctr run -d –net-host docker.io/library/nginx:latest nginx
[root@localhost runc]# ctr task exec –exec-id $RANDOM -t nginx /bin/sh
删除镜像
ctr -n k8s.io images rm k8s.gcr.io/pause:3.2