互联网技术 / 互联网资讯 · 2024年3月8日

使用 Containerd 架构的 Kubernetes 集群部署

部署一个 Containerd 容器运行时的 Kubernetes 集群

本文将介绍如何从头在多节点环境中使用 ContAinRid 作为容器运行时来搭建 Kubernetes 集群,版本以 v1.22.1 为例完成部署。

环境准备

需 3 个节点,操作系统为 CentOS 7.6,内核版本为 3.10.x。请在每台节点上配置好 /etc/hosts,使主机名使用标准 DNS 命名,以避免后续 API 对象和服务的解析问题,例如:

192.168.31.30 Master
192.168.31.95 node1
192.168.31.215 node2

提示:请确保节点名称符合 RFC 1123 要求,禁用 localhost 的默认主机名,以避免潜在问题。可通过命令 hostnamectl set-hostname node1 来设置主机名。

系统与内核设置

  • 禁用防火墙:systemctl stop firewalld && systemctl disable firewalld
  • 禁用 SELinux:setenforce 0; sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
  • 开启内核 IPv4 转发所需的 br_netfilter 模块,并确保网络桥接过滤生效:modprobe br_netfilter
  • 创建并应用配置:/etc/sysctl.d/k8s.conf,内容包括 br_netfilter、IPv4 转发等设置;完成后执行 sysctl -p

安装 IPVS 与相关工具

  • 安装 IPVS 所需内核模块及工具
  • 在各节点安装 IPset、IPVS 调试工具 IPVSadm

同步服务器时间

为确保集群各节点时钟一致,安装并启用 chrony,配置时钟源并启动 chronyd:yum install chrony -y; systemctl enable chronyd; systemctl start chronyd

确保系统时间与参考源同步,避免证书和 API 请求因时钟偏差而失败。

部署 ContAinRd(Container Runtime)

ContAinRd 需要 Runc 支撑。可直接下载包含依赖的压缩包 cRi-contAIneRd-cni-1.5.5-linux-AMD64.tar.gz,并解包至系统对应目录。步骤示例:

wget https://Github.com/contAIneRd/contAIneRd/releases/download/v1.5.5/cRi-contAIneRd-cni-1.5.5-linux-AMD64.tar.gz

tar -xzvf cRi-contAIneRd-cni-1.5.5-linux-AMD64.tar.gz -C /

将 /usr/local/bin 与 /usr/local/sbin 添加到 PATH,并使之立即生效:export PATH=$PATH:/usr/local/bin:/usr/local/sbin; source ~/.bashrc

ContAinRd 的默认配置文件为 /etc/contAIneRd/config.toml,可以通过以下命令生成默认配置:

mkdir -p /etc/contAIneRd; contAIneRd config default > /etc/contAIneRd/config.toml

对于使用 systemd 的发行版,建议将 ContAinRd 的 cgroup 驱动配置为 systemd。在 /etc/contAIneRd/config.toml 中将 [plugins.”io.contAIneRd.gRPC.v1.cri”.runtime] 下的 systemdCgroup 设置为 true。

为镜像仓库配置加速器(Registry Mirrors),在 Config.toml 的 Registry 配置块中设置镜像源,例如阿里云镜像源。

系统中包含了 systemd 服务单元文件 contAIneRd.seRvice,可以通过 systemctl 启动与管理 ContAIneRd:

systemctl daemon-reload; systemctl enable –now contAIneRd

启动后可以使用 ContAIneRd 本地 CLI ctR 与 ctrctl 查看版本信息等,例如:

ctr version; ctrctl version

通过 kubeadm 部署 Kubernetes

准备工作完成后,开始安装 kubeadm、kubelet、kubectl。为加速下载,可使用国内镜像源(如阿里云)配置 yum 源并安装:

在 /etc/yum.repos.d/ 下创建 kubeadm 的仓库文件,示例(阿里云源):

[kubernetes] baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0

然后执行以下命令安装:

yum makecache fast; yum install -y kubelet-1.22.1 kubeadm-1.22.1 kubectl-1.22.1 –disableexcludes=kubernetes

验证 kubeadm 版本信息:kubeadm version -v

将 Master 节点的 kubelet 设置为开机启动:systemctl enable –now kubelet

初始化集群

为兼容性与动态配置,推荐通过配置文件进行集群初始化。先导出默认配置用于后续修改:

kubeadm config print init-defaults –component-configs KubeletConfiguration > kubeadm.yaml

根据需求修改 kubeadm.yaml,例如:

准备好配置后,在 Master 节点执行初始化(示例命令随实际配置调整):

kubeadm init –config kubeadm.yaml

初始化完成后,记录集群的证书、服务端点及镜像信息,后续节点加入集群时需要使用这些信息。

拉取所需镜像与预热配置

在正式初始化前,可以提前在所有节点执行如下命令拉取必要镜像(根据配置文件中的 images 字段适配):

kubeadm config images pull –config kubeadm.yaml

如遇某些镜像无法拉取,可以手动从镜像仓库拉取后重新打标签,确保各节点镜像就绪再执行初始化。

后续步骤

完成上述步骤后,即可在 Master 节点上执行 kubeadm init 进行集群初始化,随后按需在节点上执行 kubeadm join 将节点加入集群。若需要网络插件(如 Flannel)等,请在初始化后按官方文档完成插件安装和网络配置。可以使用 godoc 文档了解 kubeadm 的 API 与配置项的对应关系,地址:https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3