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

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐