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

故障排除

如果节点无法加入集群或状态不正常,可以尝试以下命令:

  1. 检查 kubelet 状态:

sudo systemctl status kubelet
  1. 查看日志:

sudo journalctl -u kubelet -f
  1. 重置节点 (如果需要重新加入):

sudo kubeadm reset

现在您已经成功搭建了一个高可用的 Kubernetes 集群,包含 2 个 master 节点 (1 主 1 备) 和 2 个 worker 节点。

posted @ 2025-04-23 13:33  Johny_Zhao  阅读(361)  评论(0)    收藏  举报