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 [镜像文件名]

部分命令对比:

命令dockerctr(containerd)crictl(kubernetes)
查看运行的容器docker psctr task ls/ctr container lscrictl ps
查看镜像docker imagesctr image lscrictl images
查看容器日志docker logscrictl logs
查看容器数据信息docker inspectctr container infocrictl inspect
查看容器资源docker statscrictl stats
启动/关闭已有的容器docker start/stopctr task start/killcrictl start/stop
运行一个新的容器docker runctr run无(最小单元为pod)
修改镜像标签docker tagctr image tag
创建一个新的容器docker createctr container createcrictl create
导入镜像docker loadctr image import
导出镜像docker savectr image export
删除容器docker rmctr container rmcrictl rm
删除镜像docker rmictr image rmcrictl rmi
拉取镜像docker pullctr image pullctictl pull
推送镜像docker pushctr image push
在容器内部执行命令docker execcrictl 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社区为您提供最前沿的新闻资讯和知识内容

更多推荐