一文带你了解containerd方案
k8s和docker的竞争
2015年6月22日,迫于google、红帽等巨头公司的压力,docker开放了容器运行时的标准,OCI成立。
2015年7月17日,docker捐赠了自己的容器运行时libcontainer,改造后成为了runc。
2016年12月14日,containerd项目从docker engine中正式分离,被捐赠给了CNCF。
2017年10月,docker宣布在企业版中内置k8s,宣告了docker在和k8s的容器化编排竞争中彻底败北。
2022年5月3日,kubernetes v1.24正式发布,彻底结束了对docker的兼容。
k8s开始了容器运行时的去docker化工作,目前k8s官方文档中给出的容器运行时方案主要有三种,第一种是直接使用docker原有的组件containerd、runc并且用nerdctl完全替代docker client的命令,这种方案我们简称为containerd方案、第二种是kubernetes社区提供的一个cri-o方案,这个方案没有containerd成熟、第三种是继续使用docker,但为了满足RCI,需要再增加一个cri-dockerd组件。其中最优解就是containerd方案,因为方案所使用的组件是docker捐赠的containerd和runc,以及实现容器网络的cni插件,由它们组成了一个去docker化的成熟方案。
接下来,我们就要介绍一下,containerd这个方案怎么进行安装。
containerd方案需要安装三个组件,第一个是最上层的containerd,实现了CRI标准,可以被kubelet直接调用。第二个是runc,实现了OCI标准,containerd会调用runc进行容器的创建。第三个是CNI插件,负责容器启动时的网络创建。
containerd方案安装(一键版)
安装nerdctl full包
一键版将所有组件都打进了nerdctl full包中,但相比于下载每一个组件,这种方式更方便,更容易入门,下载地址https://github.com/containerd/nerdctl/releases
[root@k8s ~]# tar Cxvf /usr/local nerdctl-full-0.22.2-linux-amd64.tar
[root@k8s bin]# systemctl enable containerd
[root@k8s bin]# systemctl start containerd
containerd方案安装(自定义版)
安装containerd
相比于一键版,自定义版中每个组件版本都可以自己选择,如果想要理解containerd方案每个组件的作用可以进行自定义版安装。
从containerd github项目中下载containerd二进制,地址为https://github.com/containerd/containerd/releases
比较大的github项目一般会在assets下提供各种框架已经编译好的二进制文件包供你下载,比较方便的下载方式是,找到符合你架构的压缩包,拷贝链接,然后通过wget直接下载