Ubuntu 上搭建安装高可用 Kubernetes 集群指南 (1 master, 1 backup, 2 workers)
本安装指南将帮助您在 Ubuntu 系统上搭建一个高可用 Kubernetes 集群,包含:
-
1 个主 master 节点
-
1 个备用 master 节点
-
2 个 worker 节点
环境准备
硬件要求
-
所有 master 节点: 至少 2GB RAM (推荐 4GB+), 2 CPU 核心
-
Worker 节点: 根据工作负载需求
-
所有节点至少 20GB 磁盘空间
-
所有节点间网络互通
系统要求
-
Ubuntu 20.04 LTS 或 22.04 LTS (所有节点使用相同版本)
-
所有节点设置静态 IP
-
所有节点时间同步 (建议安装 chrony)
步骤 1:在所有节点上执行的基础设置
1.1 更新系统
sudo apt update && sudo apt upgrade -y
1.2 安装必要工具
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common chrony
1.3 禁用交换空间
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
1.4 设置主机名 (在每个节点上分别设置)
-
主 Master 节点:
sudo hostnamectl set-hostname k8s-master1
-
备用 Master 节点:
sudo hostnamectl set-hostname k8s-master2
-
Worker1:
sudo hostnamectl set-hostname k8s-worker1
-
Worker2:
sudo hostnamectl set-hostname k8s-worker2
1.5 编辑 /etc/hosts 文件 (所有节点相同)
sudo tee -a /etc/hosts <<EOF
<master1节点IP> k8s-master1
<master2节点IP> k8s-master2
<worker1节点IP> k8s-worker1
<worker2节点IP> k8s-worker2
EOF
1.6 加载内核模块
sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置必要的内核参数
sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
步骤 2:在所有节点上安装容器运行时 (containerd)
2.1 安装 containerd
sudo apt install -y containerd
2.2 配置 containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
2.3 重启并启用 containerd
sudo systemctl restart containerd
sudo systemctl enable containerd
步骤 3:在所有节点上安装 Kubernetes 组件
3.1 添加 Kubernetes 仓库
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
3.2 安装 kubelet, kubeadm 和 kubectl
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
步骤 4:设置负载均衡器 (可选但推荐)
在单独节点或现有 master 节点上安装 HAProxy 或 Nginx 作为负载均衡器:
4.1 安装 HAProxy
sudo apt install -y haproxy
4.2 配置 HAProxy
sudo tee /etc/haproxy/haproxy.cfg <<EOF
frontend kubernetes
bind *:6443
option tcplog
mode tcp
default_backend kubernetes-master-nodes
backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
server k8s-master1 <master1节点IP>:6443 check fall 3 rise 2
server k8s-master2 <master2节点IP>:6443 check fall 3 rise 2
EOF
4.3 重启 HAProxy
sudo systemctl restart haproxy
sudo systemctl enable haproxy
步骤 5:在主 Master 节点上初始化集群
5.1 初始化 Kubernetes 集群
sudo kubeadm init --control-plane-endpoint "<负载均衡器IP或DNS>:6443" \
--pod-network-cidr=10.244.0.0/16 \
--upload-certs \
--apiserver-advertise-address=<master1节点IP>
5.2 设置 kubectl 配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5.3 安装网络插件 (Flannel)
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
5.4 获取加入集群的命令
# 获取其他 control plane 节点加入命令
kubeadm token create --print-join-command
# 获取 worker 节点加入命令
kubeadm token create --print-join-command | sed 's/--control-plane //'
步骤 6:在备用 Master 节点上加入集群
使用主 master 节点输出的 control plane 加入命令:
sudo kubeadm join <负载均衡器IP或DNS>:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--control-plane \
--certificate-key <certificate-key>
步骤 7:在 Worker 节点上加入集群
使用主 master 节点输出的 worker 加入命令:
sudo kubeadm join <负载均衡器IP或DNS>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
步骤 8:验证集群状态
在主 master 节点上执行:
8.1 检查节点状态
kubectl get nodes
等待所有节点状态变为 Ready (可能需要几分钟)
8.2 检查所有 pod 状态
kubectl get pods --all-namespaces
8.3 检查高可用状态
kubectl get endpoints kube-scheduler -n kube-system -o yaml
kubectl get endpoints kube-controller-manager -n kube-system -o yaml
可选步骤:配置 kubectl 自动补全
echo 'source <(kubectl completion bash)' >>~/.bashrc
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
source ~/.bashrc
故障排除
如果节点无法加入集群或状态不正常,可以尝试以下命令:
-
检查 kubelet 状态:
sudo systemctl status kubelet
-
查看日志:
sudo journalctl -u kubelet -f
-
重置节点 (如果需要重新加入):
sudo kubeadm reset
现在您已经成功搭建了一个高可用的 Kubernetes 集群,包含 2 个 master 节点 (1 主 1 备) 和 2 个 worker 节点。

浙公网安备 33010602011771号