1
0

Ubuntu 24.04 多节点 Kubernetes 集群部署教程(一主两从)

2026-08-04 21:30:00
2026-08-04 18:19:57
文章摘要
|

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 1Worker 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 重新生成。


有问题欢迎在评论区留言交流!🦉

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论