怎么搭建一个集成了containerd的k8s集群

58次阅读
没有评论

共计 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 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3324字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)