containerd概念:
containerd主要是namebases与k8s docker不同 存放路径不一致 没有默认仓库
容器运行时:
2020年未kubernetes宣布不再支持docker
docker由libcontainer及containerd组成将libcontainer捐赠给OCI开源基金会将libcontainer改名runc,OCI定义了镜像规范,运行时规范。(镜像标准镜像组织结构包含各种文件目录等,运行时如何启动一个容器需要接受那些指定,配置生命周期等,如何划分cgroup等)runc实现。
CNCF(云原生计算机协会)成立容器编排大战中由kubernetes胜出,docker将containerd捐赠CNCF,containerd比runc更高一层的封装。
kubernetes为了保持中立性在1.5版本推出CRI机制,CRI本质是GRPC接口的定义。容器操作接口,镜像操作接口。第一个实现接口的是containerd。
kubernetes为了支持docker自己做了dockershim垫片,kubelet调用grpc接口调用dockershim,然后dockershim通过CRI去电泳docker api,docker去操作containerd。kubernetes宣布不再支持docker cri实现是把dockershim去掉。
缺点:各软件需要适配,包括适配新版kubernetes及containerd。containerd镜像拉取存在问题。尽量使用私有仓库进行避免。
containerd架构:
# 1. Container Runtime - Containerd #### 1.1 软件包下载 ```bash # 设定containerd的版本号 $ VERSION=1.4.3 # 下载压缩包 $ wget https://github.com/containerd/containerd/releases/download/v${VERSION}/cri-containerd-cni-${VERSION}-linux-amd64.tar.gz ``` #### 1.2 整理压缩文件 下载后的文件是一个tar.gz,是一个allinone的包,包括了runc、circtl、ctr、containerd等容器运行时以及cni相关的文件,解压缩到一个独立的目录中 ```bash # 解压缩 $ tar -xvf cri-containerd-cni-${VERSION}-linux-amd64.tar.gz # 复制需要的文件 $ cp etc/crictl.yaml /etc/ $ cp etc/systemd/system/containerd.service /etc/systemd/system/ $ cp -r usr / ``` #### 1.3 containerd配置文件 ```bash $ mkdir -p /etc/containerd # 默认配置生成配置文件 $ containerd config default > /etc/containerd/config.toml # 定制化配置(可选) $ vi /etc/containerd/config.toml ``` #### 1.4 启动containerd ```bash $ systemctl enable containerd $ systemctl restart containerd # 检查状态 $ systemctl status containerd ```