以下是 K8s 集群创建过程
目录
- 一: 环境准备
- 二: 安装容器运行时
- 三: 安装核心组件
- 四: 初始化控制面板
- 五: 配置 kubectl 并安装网络插件
- 六: 加入工作节点
引言:
使用 kubeadm 部署 Kubernetes 集群是官方推荐的标准方式,它将复杂的组件配置封装为简洁的命令行操作。本文将逐步讲解从环境准备、容器运行时安装、核心组件部署,到控制平面初始化、网络插件配置及工作节点加入的完整流程,帮助你快速搭建一个可用的 K8s 集群。
一 环境准备
1.配置主机名与 hosts 解析:为每台机器设置唯一主机名,并配置 hosts 文件以便节点间通过主机名通信。 # 设置主机名 (在每个节点分别执行)
sudo hostnamectl set-hostname # 例如: k8s-master, k8s-worker1 # 编辑 /etc/hosts 文件,添加所有节点 IP 和主机名的映射
sudo vim /etc/hosts
2.禁用 Swap:Kubernetes 要求必须禁用交换分区
sudo swapoff -a # 为防止重启后生效,需要注释掉 /etc/fstab 中的 swap 行
sudo sed -i ‘/ swap / s/^(.*)$/#\1/g’ /etc/fstab
sudo swapoff -a
3.加载内核模块并设置网络参数:确保网络插件正常工作 # 加载 br_netfilter 和 overlay 模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter # 设置所需的 sysctl 参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF # 应用 sysctl 参数
sudo sysctl --system
二 安装容器运行时
Kubernetes 需要容器运行时来管理 Pod 和容器的生命周期。从 v1.24 版本起,官方推荐使用 containerd,它与 Kubernetes 集成更直接,也更高效。这一步需要在所有节点上执行。
1.安装containerd,使用系统的包管理器安装即可 # Ubuntu / Debian 系统
sudo apt-get update
sudo apt-get install -y containerd # CentOS / RHEL 系统
sudo yum install -y containerd
2.生成并修改配置文件
创建配置目录,并生成默认配置文件,这是让 containerd 与 Kubernetes 协同工作的关键。
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
3.配置systemd cgroup驱动
为了与宿主机资源管理(systemd)保持一致,避免潜在的资源竞争问题,需要将 cgroup 驱动设置为 systemd。
用文本编辑器打开配置文件 sudo vim /etc/containerd/config.toml。
根据你的 containerd 版本,找到对应的 SystemdCgroup 配置项并设置为 true:
containerd 2.x 版本:
version = 3
[plugins.‘io.containerd.cri.v1.runtime’.containerd.runtimes.runc.options]
SystemdCgroup = true
4.重启并启用 containerd 服务
使配置生效,并设置开机自启。
sudo systemctl daemon-reload
sudo systemctl restart containerd
sudo systemctl enable containerd
这样,容器运行时(containerd)就安装配置好了,可以继续后续安装 kubeadm、kubelet、kubectl 等核心组件的步骤。
三 安装核心组件
在所有节点上安装 kubeadm, kubelet, kubectl。注意,需要锁定版本,避免意外升级。 # 以 Ubuntu/Debian 为例,添加 Kubernetes 官方源并安装
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl # 添加 Kubernetes 的 GPG 密钥和软件源
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo ‘deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /’ | sudo tee /etc/apt/sources.list.d/kubernetes.list # 安装
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl # 阻止自动更新
sudo apt-mark hold kubelet kubeadm kubectl
四 初始化控制平面
在控制平面节点(Master)上执行此命令来启动集群的“大脑”,这是最关键的一步。
sudo kubeadm init
–pod-network-cidr=10.244.0.0/16 \ # [1][2][3] 指定 Pod 网络范围,必须与后续网络插件一致
–apiserver-advertise-address=<控制平面节点的内网IP> \ # [1][2][3] 指定 API Server 监听的 IP
–kubernetes-version=v1.29.0 # [3] 指定版本,确保与安装版本一致
(–pod-network-cidr:这是 Pod 网络的 IP 地址段,非常重要,不能与宿主机网络冲突。这里使用 10.244.0.0/16 是 Flannel 的默认值。
–apiserver-advertise-address:指定 API Server 对外公布的 IP,填你的 Master 节点内网 IP。)
成功执行后,命令会输出三部分关键信息,务必保存好:
kubeconfig 配置命令:让你能作为普通用户管理集群。
kubeadm join 命令:这是工作节点加入集群的凭证和指令,包含了 token 和 hash 值。
五 配置 kubectl 并安装网络插件
1 配置 kubectl:在控制平面节点执行,让 kubectl 命令可以正常使用
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown( i d − u ) : (id -u):(id−u):(id -g) $HOME/.kube/config
2.安装 Pod 网络插件:此时节点状态是 NotReady,需要安装网络插件。以 Flannel 为例:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
等待片刻,再次执行 kubectl get nodes,你会看到 Master 节点状态变为 Ready。
六 加入工作节点
在每个工作节点上,使用之前保存的 kubeadm join 命令,以 root 权限执行。
sudo kubeadm join <控制平面IP>:6443 --token --discovery-token-ca-cert-hash sha256:
如果你忘记了 token 或命令,可以在控制平面节点上执行以下命令重新生成
kubeadm token create --print-join-command
所有节点加入后,在控制平面节点再次运行 kubectl get nodes,如果所有节点状态都是 Ready,那么你的 K8s 集群就创建成功了。
生产环境考虑:以上是搭建单控制平面节点集群的基础流程。对于生产环境,需要考虑高可用(HA)配置,即设置多个控制平面节点和一个负载均衡器。这通常通过 kubeadm init 的 --control-plane-endpoint 和 --upload-certs 参数来实现。