Ubuntu 24.04 多节点 Kubernetes 集群部署教程(一主两从)
文章摘要
|
Ubuntu 24.04 多节点 Kubernetes 集群部署教程(一主两从)
本文在单节点教程基础上,扩展为一主两从的生产级集群架构。
环境说明
| 角色 | 主机名 | IP 地址 |
|---|---|---|
| Master(控制平面) | k8s-master | 192.168.31.100 |
| Worker 1 | k8s-node1 | 192.168.31.101 |
| Worker 2 | k8s-node2 | 192.168.31.102 |
所有节点系统均为 Ubuntu 24.04 LTS,网络互通。
准备工作(所有节点均需执行)
关闭 Swap
运行以下命令关闭 swap 并永久禁用:
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
允许 iptables 桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
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
sudo sysctl --system
Master 节点开放防火墙端口
sudo ufw allow 6443/tcp
sudo ufw allow 2379:2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10259/tcp
sudo ufw allow 10257/tcp
Worker 节点开放防火墙端口
sudo ufw allow 10250/tcp
sudo ufw allow 30000:32767/tcp
1. 安装容器运行时(所有节点)
sudo apt-get update
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
2. 安装 kubeadm、kubelet、kubectl(所有节点)
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/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.30/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
3. 初始化 Master 节点
在 Master 节点上执行:
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.31.100
初始化成功后,保存输出的 kubeadm join 命令(有效期 24 小时)。
配置 kubectl:
mkdir -p ~/.kube
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
4. 安装 Calico CNI(Master 节点)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
5. 加入 Worker 节点
在 Worker 1 和 Worker 2 上分别执行 Master 输出中的 kubeadm join 命令。
6. 验证集群(Master 节点)
kubectl get nodes
kubectl get pods -A
预期:
NAME STATUS ROLES AGE
k8s-master Ready control-plane 2m
k8s-node1 Ready none 1m
k8s-node2 Ready none 30s
7. 单节点 vs 多节点关键差异
| 项目 | 单节点 | 多节点 |
|---|---|---|
| Master 调度 Pod | 需手动去除污点 | Master 不调度,由 Worker 承担 |
| 污点命令 | kubectl taint nodes --all node-role.kubernetes.io/control-plane- | 不需要 |
| 扩缩容 | 不适用 | kubeadm join / kubectl drain + kubeadm reset |
8. 常用运维命令
# 查看节点详情
kubectl describe node k8s-master
# 驱逐节点 Pod(维护时)
kubectl drain k8s-node1 --ignore-daemonsets --delete-emptydir-data
# 恢复节点调度
kubectl uncordon k8s-node1
# 重新生成 join token
kubeadm token create --print-join-command
常见问题
Q:Worker 加入失败提示 “connection refused”?
检查 Master 的 6443 端口是否开放。
Q:token 过期了?
在 Master 执行 kubeadm token create --print-join-command 重新生成。
有问题欢迎在评论区留言交流!🦉