共计 3324 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章主要讲解了“怎么搭建一个集成了 containerd 的 k8s 集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“怎么搭建一个集成了 containerd 的 k8s 集群”吧!
概念介绍
cri (Container runtime interface)
cri is a containerd plugin implementation of Kubernetes container runtime interface (CRI).
cri 是 kubernetes 的容器运行时接口的容器插件实现。
!–more–
containerd
containerd is an industry-standard container runtime with an emphasis on simplicity, robustness and portability.
containerd 完全支持运行容器的的 CRI 运行时规范。
cri 在 containerd1.1 以上的版本的原生插件。它内置于 containerd 并默认启用。
cri-o
OCI-based implementation of Kubernetes Container Runtime Interface.
kubernetes 为了兼容 cri 和 oci 孵化了项目 cri-o。为了架设在 cri 和 oci 之间的一座桥梁。由此 cri- o 既兼容 cri 插件实现又兼容 oci 的容器运行时标准。
oci (Open Container Initiative)
oci 是由多家公司成立的项目, 并由 linux 基金会进行管理, 致力于 container runtime 的标准的制定和 runc 的开发等工作。
runc
runc is a CLI tool for spawning and running containers according to the OCI specification.
runc,是对于 OCI 标准的一个参考实现,是一个可以用于创建和运行容器的 CLI(command-line interface) 工具。
概述
由于 docker 嵌入了太多自身内容, 为了减轻容器负担。此次选用 containerd 作为 kubernetes 的容器实现方案。
环境准备
下载 containerd 二进制包。我这里已经编译并打包了好了,内含 containerd、runc、crictl、ctr 等。
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] 的 address 字段默认为 /run/containerd/containerd.sock
配置文件其他参数含义参照 github 地址:https://github.com/containerd/containerd/blob/master/docs/man/containerd-config.toml.5.md
在 /etc/systemd/system 目录下编写文件 containerd.service 内容如下
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target
[Service]
ExecStartPre=/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Restart=always
RestartSec=5
Delegate=yes
KillMode=process
OOMScoreAdjust=-999
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
启动 containerd
systemctl enable containerd
systemctl restart containerd
systemctl status containerd
看 containerd 启动状态如果是 running 就没有问题。下面我们测试拉取一下 hub 的镜像。
测试 containerd
ctr images pull docker.io/library/nginx:alpine
看到输出 done,说明 containerd 运行一切正常。
使用 crictl 连接 containerd
下一步我们使用 crictl 连接 containerd。
修改 crictl 的配置文件, 在 /etc/crictl.yaml 写入以下内容:
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
这里注意 runtime-endpoint 和 image-endpoint 必须与 /etc/containerd/config.toml 中配置保持一致。
验证一下 cri 插件是否可用
crictl pull nginx:alpine
crictl rmi nginx:alpine
crictl images
其中 crictl images 会列出所有的 cri 容器镜像。
到此我们的 cri + containerd 已经完成整合了。下一步我们需要修改 kubeadm 配置进行安装。
导入 kubenetes 离线镜像包
这里我们就需要导入 k8s 的离线镜像包了。这里需要注意一下,kubernetes 是调用的 cri 接口, 所以导入时也需要从 cri 插件导入镜像。
cri 导入镜像命令 (cri 导入镜像):
ctr cri load images.tar
containerd 导入镜像命令 (containerd 导入镜像):
ctr images import images.tar
修改 kubelet 配置和 kubeadm 安装时配置
在 kubelet 配置文件 10-kubeadm.conf 的 [Service] 结点加入以下配置:
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
name: containerd
到此 containerd 和 kubernetes 的集成就完成了。下面可以直接安装即可。
感谢各位的阅读,以上就是“怎么搭建一个集成了 containerd 的 k8s 集群”的内容了,经过本文的学习后,相信大家对怎么搭建一个集成了 containerd 的 k8s 集群这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!