
本文将介绍如何从头在多节点环境中使用 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
