containerd系列:containerd 的容器管理

Posted flyfish225

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了containerd系列:containerd 的容器管理相关的知识,希望对你有一定的参考价值。

标签(空格分隔):containerd 系列


一:获取创建静态容器命令

1.1 创建静态容器命令查询

ctr containerd --help 

使用`ctr container create `命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。
这个 container 对象只是包含了运行一个容器所需的资源及配置的数据结构,例如: namespaces、rootfs 和容器的配置都已经初始化成功了,
只是用户进程(本案例为nginx)还没有启动。需要使用`ctr tasks`命令才能获取一个动态容器。

1.2 获取动态容器命令帮助

# ctr run --help
使用`ctr run`命令可以创建一个静态容器并使其运行。一步到位运行容器。

1.3 查看容器

ctr container ls 可以简写成 ctr c ls 

1.4 查看任务

ctr task ls  可以简写成ctr t ls 

1.5 创建一个静态的容器

ctr c create docker.io/library/nginx:alpine nginx1
ctr c ls 

查看容器详细信息
# ctr container info nginx1

1.6 静态容器启动为动态容器

复制containerd连接runC垫片工具至系统
# ls usr/local/bin/
containerd  containerd-shim  containerd-shim-runc-v1  containerd-shim-runc-v2  containerd-stress  crictl  critest  ctd-decoder  ctr
[root@localhost ~]# cp usr/local/bin/containerd-shim-runc-v2 /usr/bin/

启动task,即表时在容器中运行了进程,即为动态容器。
# ctr task start -d nginx1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/

###
说明:
-d表示daemon或者后台的意思,否则会卡住终端


查看容器所在宿主机进程,是以宿主机进程的方式存在的。
# ctr task ls
TASK      PID     STATUS
nginx1    9823    RUNNING

查看容器的进程(都是物理机的进程)
# ctr task ps nginx1
PID     INFO
9823    -
9867    -
9868    -
9869    -
9870    -

物理机查看到相应的进程
# ps -ef | grep 9823
root       9823   9799  0 21:49 ?        00:00:00 nginx: master process nginx -g daemon off;
101        9867   9823  0 21:49 ?        00:00:00 nginx: worker process
101        9868   9823  0 21:49 ?        00:00:00 nginx: worker process
101        9869   9823  0 21:49 ?        00:00:00 nginx: worker process
101        9870   9823  0 21:49 ?        00:00:00 nginx: worker process
root       9968   9304  0 21:54 pts/1    00:00:00 grep --color=auto 9823

1.7 进入容器操作

ctr -n default task exec --exec-id $RANDOM -t nginx1 sh

1.8 直接运行一个动态的容器

# ctr run -d --net-host docker.io/library/nginx:alpine nginx2
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/

说明:
* -d 代表dameon,后台运行
* --net-host 代表容器的IP就是宿主机的IP(相当于docker里的host类型网络)

查看已运行容器
# ctr container ls
CONTAINER    IMAGE                             RUNTIME
nginx2       docker.io/library/nginx:alpine    io.containerd.runc.v2

查看已运行容器中运行的进程,既tasks
# ctr tasks ls
TASK      PID     STATUS
nginx2    4061    RUNNING

进入容器
ctr -n default task exec --exec-id $RANDOM -t nginx2 sh



为容器中运行的网站添加网站文件
/ # echo "nginx2" > /usr/share/nginx/html/index.html
/ # exit

在宿主机上访问网站
[root@flyfishsrvs01 ~]# curl 172.16.10.11
nginx2

1.9 暂停容器

查看容器状态
# ctr tasks ls
TASK      PID     STATUS
nginx2    4061    RUNNING

暂停容器
# ctr tasks pause nginx2

再次查看容器状态,看到其状态为PAUSED,表示停止。
# ctr tasks ls
TASK      PID     STATUS
nginx2    4061    PAUSED

[root@localhost ~]# curl http://172.16.10.11
在宿主机访问,发现不可以访问到网站

1.10 恢复容器

使用resume命令恢复容器
# ctr tasks resume nginx2
查看恢复后状态
# ctr tasks ls
TASK      PID     STATUS
nginx2    4061    RUNNING

在宿主机上访问容器中提供的服务
# curl http://172.16.10.11
nginx2

1.11 停止容器

使用kill命令停止容器中运行的进程,既为停止容器
# ctr tasks kill nginx2

查看容器停止后状态,STATUS为STOPPED
TASK      PID      STATUS
nginx2    10660    STOPPED
nginx1    9823     RUNNING

1.12 删掉容器

ctr tasks delete nginx2
必须先停止tasks或先删除task,再删除容器
查看静态容器,确认其还存在于系统中
# ctr container ls
CONTAINER    IMAGE                             RUNTIME
nginx2       docker.io/library/nginx:alpine    io.containerd.runc.v2

以上是关于containerd系列:containerd 的容器管理的主要内容,如果未能解决你的问题,请参考以下文章

k8s系列-05-k8s集群搭建方案对比,以及containerd是什么,如何安装

containerd容器环境搭建教程

Containerd的安装和配置

Containerd安装配置及基本操作

无法获取 cpu pod 指标,k8s-containerd-containerd-shim-runsc-v1-gvisor

containerd — 容器引擎