containerd与kubernetes集成部署
概念介绍
cri(容器运行时接口)
cri是Kubernetes容器运行时接口(CRI)的容器插件实现。
cri是kubernetes的容器运行时接口的容器插件实现。
containerd
containerd是一个行业标准的容器运行时,强调简单性,健壮性和可移植性。
containerd完全支持运行容器的的CRI运行时规范。
CRI在containerd1.1以上的版本的原生插件。它内置于containerd并默认启用。
CRI-O
基于OCI的Kubernetes容器运行时接口的实现。
kubernetes为了兼容CRI和OCI孵化了项目CRI-O。为了架设在CRI和OCI之间的一座桥梁。由此CRI-O既兼容CRI插件实现又兼容OCI的容器运行时标准。
oci(开放式集装箱计划)
oci是由多家公司成立的项目,并由linux基金会进行管理,致力于container runtime的标准的制定和runc的开发等工作。
runc
runc是一个CLI工具,用于根据OCI规范生成和运行容器。
runc,是对于OCI标准的一个参考实现,是一个可以用于创建和运行容器的CLI(命令行界面)工具。
概述
由于搬运工嵌入了太多自身内容,为了减轻容器负担。此次选用containerd作为kubernetes的容器实现方案。本文将带大家讲述如何搭建一个集成了containerd的K8S集群。
环境准备
下载containerd二进制包。我这里已经编译并打包了好了,内含containerd,runc,crictl,点击率等。
下载链接:HTTPS://github.com/cuisongliu/containerd-dist/releases/download/v1.2.4/containerd-v1.2.4.tar.gz
runc版本:1.0.1-dev
containerd版本:v1.2.4
安装containerd
解压二进制包并生成默认文件
tar -C / usr / local / bin -xzf containerd-v1.2.4.tar.gz
chmod a + x / usr / local / bin / *
containerd config default> /etc/containerd/config.toml
生成的默认配置文件注意[grpc]的地址字段默认为/run/containerd/containerd.sock
配置文件其他参数含义参照github地址:https://github.com/containerd/containerd/blob/master/docs/man/containerd-config.toml.5.md
在/ etc / systemd / system目录下编写文件containerd.service内容如下
[单元]
Description = containerd容器运行时
文档= HTTPS://containerd.io
之后= network.target
[服务]
ExecStartPre = / sbin / modprobe overlay
ExecStart =在/ usr / local / bin目录/ containerd
重启=始终
RestartSec = 5
委派= YES
KillMode =过程
OOMScoreAdjust = -999
LimitNOFILE = 1048576
#具有非零Limit * s会因会计开销而导致性能问题
#在内核中。我们建议使用cgroup进行容器本地记帐。
LimitNPROC =无穷大
LimitCORE =无穷大
[安装]
WantedBy = multi-user.target
启动containerd
systemctl启用containerd
systemctl重新启动containerd
systemctl status containerd
看containerd启动状态如果是运行就没有问题。下面我们测试拉取一下毂的镜像。
测试containerd
ctr images pull docker.io/library/nginx:alpine
看到输出完成,说明containerd运行一切正常。
使用crictl连接containerd,下一步我们使用crictl连接containerd。
修改crictl的配置文件,在/etc/crictl.yaml写入以下内容:
runtime-endpoint:unix:///run/containerd/containerd.sock
image-endpoint:unix:///run/containerd/containerd.sock
超时:10
debug:false
这里注意runtime-endpoint和image-endpoint必须与/etc/containerd/config.toml中配置保持一致。
验证一下CRI插件是否可用
crictl pull nginx:alpine
crictl rmi nginx:高山
crictl图像
其中crictl images会列出所有的cri容器镜像。
到此我们的cri + containerd已经完成整合了。下一步我们需要修改kubeadm配置进行安装。
导入kubenetes离线镜像包
这里我们就需要导入K8S的离线镜像包了。这里需要注意一下,kubernetes是调用的CRI接口,所以导入时也需要从CRI插件导入镜像。
CRI导入镜像命令(CRI导入镜像):
ctr cri load images.tar
containerd导入镜像命令(containerd导入镜像):
ctr图像导入images.tar
修改kubelet配置和kubeadm安装时配置
在kubelet配置文件10-kubeadm.conf的[服务]结点加入以下配置:
Environment =“KUBELET_EXTRA_ARGS = - container-runtime = remote --runtime-request-timeout = 15m --container-runtime-endpoint = unix:///run/containerd/containerd.sock”
在kubeadm配置文件kubeadm.yaml中加入
apiVersion:kubeadm.k8s.io/v1beta1
kind:InitConfiguration
nodeRegistration:
criSocket:/run/containerd/containerd.sock
名称:containerd
到此containerd和kubernetes的集成就完成了。下面可以直接安装即可。