容器运行时container
Salted Fish 1991/6/26 基础
# 1.前文
# 1.1 什么是Containerd
containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性,containerd 可以负责干下面这些事情:
- 管理容器的生命周期(从创建容器到销毁容器)
- 拉取/推送容器镜像
- 存储管理(管理镜像及容器数据的存储)
- 调用
runc运行容器(与runc等容器运行时交互) - 管理容器网络接口及网络
# 1.2 Containerd和docker区别

containerd是Docker在2016年12月从Docker Engine中分离并单独集成且开源的项目,目标是提供一个更加开放、稳定的容器运行基础设施,后来Docker宣布将containerd项目捐赠给云原生计算基金会(CNCF)
# 1.3 K8s为什么弃用Docker
从网络上搜索得出的原因如下:
第一个原因:
Kubernetes只能与CRI通信,因此要与Docker通信,就必须使用桥接服务。第二个原因:
Kubernetes只是用到docker中的一部分功能,甚至连docker网络与存储卷都被排查在外。而那些用不到的功能本身就可能带来安全隐患。
第三个原因: 调用链变得更短,依赖的功能变少。

# 2. 安装
# 2.1 下载
# 下载二进制包 (最新版本: https://github.com/containerd/containerd/releases/)
$ wget https://github.com/containerd/containerd/releases/download/v1.6.4/cri-containerd-cni-1.6.4-linux-amd64.tar.gz
1
2
2
# 2.2 解压到根目录
# 解压到系统的根目录/中
$ tar -zxvf cri-containerd-cni-1.6.4-linux-amd64.tar.gz -C /
1
2
2
# 2.3 验证
# containerd 的版本
$ ctr -v
ctr github.com/containerd/containerd v1.6.4
$ crictl -v
crictl version 1.20.0-24-g53ad8bb7
1
2
3
4
5
6
2
3
4
5
6
# 2.4 开机启动
$ systemctl enable --now containerd
1
# 3. 配置文件
# 3.1 生成默认文件
# 创建目录,有则不创建
$ mkdir -p /etc/containerd
# 生成默认配置文件
$ containerd config default > /etc/containerd/config.toml
1
2
3
4
2
3
4
# 3.2 修改镜像源地址
[plugins."io.containerd.grpc.v1.cri"]
...
# sandbox_image = "k8s.gcr.io/pause:3.6"
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"
1
2
3
4
2
3
4
# 4. ctr和crictl
# 4.1 两者区别
ctr: 是containerd的一个客户端工具 ;类似于docker的管理工具docker cli。crictl: 是CRI兼容的容器运行时命令行接口,可以使用它来检查和调试k8s节点上的容器运行时和应用程序
通俗点理解:
ctr是containerd自带的工具,crictl是CRI通用的系统工具。
# 4.2 常用命令整理
大部分命令只要把
docker关键字改为crictl命令即可操作containerd,比如 :docker ps 改成 crictl ps

虽然kubernetes弃用了docker,但是通过docker构建的镜像,在containerd中依然可以正常使用