containerd文档地址
containerd介绍
- 早在2016年3月,Docker 1.11的Docker Engine里就包合了containerd,而现在则是把containerd从Docker Engine里彻底剥离出来, 为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器运行基础没施。和原先包合在Docker Engine里containerd相比,独立的containerd将具有更多的功能,可以涵盖整个容品运行时管理的所有需求。
- containerd并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如Swarm, Kubernetes, Mesos等容器编排系统。
- 每个containerd只负责一台机器,Pul镜像,对容器的操作(启动、停止等),网络,存储都是由containerd完成。具体运行容器由runC 负责,实际上只要是符合OCI规范的容器都可以支持。
- containerd以Daemon的形式运行在系统上,通过暴露底层的gRPC API,上层系统可以通过
这些AP/管理机器上的容器。- 对于容器编排服务来说,运行时只需要使用containerd+runC,更加轻量,容易管理
- 独立之后containerd的特性演进可以和Docker Ergine分开,专注容器运行时管理,可以更稳定,containerd是由Docker开发的容器运行时,已经在生产环境中得到了广泛的验证和应用。它经过长时间的发展和优化,可以满足大规模集群的运行需求。
- 13年docker把核心技术 libcontainer捐献给OCI 并改名为runC
- 15年docker把核心依赖containerd 捐献给CNCF
- 20年k8s1.20之后不再支持docker,因为还需要维护一套docker-shim(垫片)去从k8s容器运行时接口(CRI)转化翻译为docker的API
- 很多的容器管理工具都希望能被k8s用到,所以k8s制定了标准化的CRI,只要符合都能用
- containerd可以无缝衔接k8s,所以k8s之后的容器运行时(CRI)就是containerd
- containerd 采用C/S架构
- containerd 从容器启动 停止 删除的时间都很快于其他
YUM方式安装
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y containerd.io
systemctl enable containerd --now
#验证
ctr version
ctr images ls
ctr containerd ls
二进制安装(找名字长的cri-containerd-cni-xxx)
1.下载安装包
release
Containerd有两种安装包:
第一种是 containerd-xxx,这种包用于单机测试没问题,不包含runC,需要提前安装。
第二种是 cri-containerd-cni-xxxx,包含runc和k8s里的所需要的相关文件。k8s集群里需要用到此包。虽然包含runC,但是依赖系统中的seccomp(安全计算模式,是一种限制容器调用系统资源的模式。)
wget https://gh.rainbond.cc/https://github.com/containerd/containerd/releases/download/v1.6.27/cri-containerd-cni-1.6.27-linux-amd64.tar.gz
tar -xzvf cri-containerd-cni-1.6.27-linux-amd64.tar.gz
1.1解压如下所示三个目录
查看etc目录,主要为containerd服务管理配置文件及cni虚拟网卡配置文件
查看opt目录,主要为gce环境中使用containerd配置文件及cni插件
查看usr目录,主要为containerd运行时文件,包含runc
2.移动下载的二进制到指定位置
2.1 containerd
cp usr/local/bin/containerd /usr/local/bin/
cp etc/systemd/system/containerd.service /usr/lib/systemd/system/containerd.service
#建议usr/local/bin/* 都复制到/usr/local/bin/ ,不然容器启动的时候会找不到containerd-shim- runc-v2(垫片),这也就是为什么下面说runC真正的去运行容器
/etc/systemd/system/ 目录中的服务文件通常是管理员自定义的或者针对特定需求定制的服务,而
/usr/lib/systemd/system/ 目录中的服务文件则是由软件包提供的默认服务文件。
2.2生成containerd配置文件
这个配置文件中注意沙箱的镜像和镜像仓库
containerd --help
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml=
systemctl enable containerd --now
单独安装RUNC
真正的去运行容器的是runC
由于二进制包中提供的runC默认需要系统中安装seccomp支持,需要单独安装,且不同版本runC对seccomp版本要求一致,所以建议单独下载runC 二进制包进行安装,里面包含了seccomp模块支持。
release
wget https://gh.rainbond.cc/https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64
#install: 这是一个Unix命令,用于复制文件并设置其属性
install -m 755 runc.amd64 /usr/local/sbin/runc
runc -v
复制ctr命令
cp usr/local/bin/ctr /usr/bin/
#查看containerd版本
ctr version
containerd容器镜像管理
- docker使用docker images命令管理镜像
- 单机containerd使用ctr images命令管理镜像,containerd本身的CLI工具
- k8s中containerd使用crictl images命令管理镜像Kubernetes社区的专用CLI工具
ctr i ls
# 引用地址REF 类型TYPE DIGEST描述哈希值 大小SIZE 支持的平台PLATFROMS 标签LABELS
ctr i pull --all-platforms docker.io/library/nginx:alpine
#因为containerd没有像Docker CLI那样的默认仓库设置,下载镜像需要指定完整---仓库地址/命令空间/镜像名:tag
ctr i pull --platforms linux/amd64 docker.io/library/nginx:alpine
ctr i rm/remove/delete/del 仓库地址/命令空间/镜像名:tag
- –all-platforms 所有平台, 不加根据当前系统CPU架构来下载
镜像挂载查看镜像内容
mkdir /mnt/mount1
ctr i mount 仓库地址/命令空间/镜像名:tag /mnt/mount1
ls /mnt/mount1
umount /mnt/mount1
镜像导出/入
ctr i export [--all-platforms] 导出名 仓库地址/命令空间/镜像名:tag
ctr i import 导出名
镜像tag
ctr i tag 仓库地址/命令空间/镜像名:tag 仓库地址/命令空间/镜像名:tag
ctr i check 仓库地址/命令空间/镜像名:tag
containerd容器管理
#创建静态容器,并没有运行
ctr c create 仓库地址/命令空间/镜像名:tag 容器名称
ctr c ls
ctr taks/t/tasks ls
ctr c info 容器名称
#动态容器
ctr run --net-host 仓库地址/命令空间/镜像名:tag 容器名称
#复制安装时候的垫片
cp usr/local/bin/containerd-shim-runc-v1 /usr/bin/
ctr task start -d 容器名称
ctr taks/t/tasks ls
进入容器
ctr task exec --exec-id $RANDOM(或者手动指定) -t 容器名称 /bin/bash
暂停/恢复容器
ctr task pause 容器名称
ctr task ls
ctr task resume 容器名称
停止/删除/启动容器
ctr task kill 容器名称
ctr task rm 容器名称
ctr task start -d 容器名称
删除容器
先停止动态容器变为静态的,在删除tasks,最后删除容器
ctr task ls
ctr task kill 容器名称
ctr c rm 容器名称
containerd私有仓库
containerd不错的文章