Kubernetes 高可用集群搭建
·
注意:
尽量所有组件都是用二进制安装包进行安装,国内镜像很多不通的,资源也不稳定,
版本之间的各个组件版本镜像资源github基本不可用,新版本引用的组件镜像资源gitee比较不一致
适用场景:
-
企业内网环境
-
生产环境快速部署
版本信息:(最新版本)
-
Kubernetes: v1.35.x
-
containerd: 1.7+
-
Ubuntu: 22.04/24.04 LTS
-
Calico: v3.28+
架构说明
集群拓扑
┌─────────────────┐
│ VIP (HA) │
│ 192.168.0.112 │
└────────┬────────┘
│
┌──────────────┼────────────────┐
│ │ │
┌───────▼──────┐ ┌─────▼───────┐ ┌──────▼───────┐
│ Master-01 │ │ Master-02 │ │ Master-03 │
│ 192.168.0.105│ │192.168.0.103│ │192.168.0.110 │
└──────────────┘ └─────────────┘ └──────────────┘
│ │ │
┌────┴───────────────┴───────────────┴────┐
│ etcd cluster (HA) │
└────────────────────┬────────────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
┌─────▼───────┐ ┌───────▼──────┐ ┌────────▼──────┐
│ Worker-01 │ │ Worker-02 │ │ Worker-03 │
│192.168.0.107│ │192.168.0.108 │ │ 192.168.0.109 │
└─────────────┘ └──────────────┘ └───────────────┘
服务器规划
| 主机名 | IP 地址 | 角色 | 配置要求 | 说明 |
|---|---|---|---|---|
| k8s-master-01 | 192.168.0.105 | Control Plane | 2C4G, 50GB | 主控节点1 |
| k8s-master-02 | 192.168.0.103 | Control Plane | 2C4G, 50GB | 主控节点2 |
| k8s-master-03 | 192.168.0.110 | Control Plane | 2C4G, 50GB | 主控节点3 |
| k8s-worker-01 | 192.168.0.107 | Worker | 4C8G, 100GB | 工作节点1 |
| k8s-worker-02 | 192.168.0.108 | Worker | 4C8G, 100GB | 工作节点2 |
| k8s-worker-03 | 192.168.0.109 | Worker | 4C8G, 100GB | 工作节点3 |
| k8s-lb | 192.168.0.104 | Load Balancer | 1C2G, 20GB | HAProxy+Keepalived |
| VIP | 192.168.0.112 | Virtual IP | - | 虚拟IP(浮动) |
一、所有节点前置准备(所有节点)
1.1 配置主机名和 hosts
在每个节点上设置主机名:
# Master-01
sudo hostnamectl set-hostname k8s-master-01
# Master-02
sudo hostnamectl set-hostname k8s-master-02
# Master-03
sudo hostnamectl set-hostname k8s-master-03
# Worker-01
sudo hostnamectl set-hostname k8s-worker-01
# Worker-02
sudo hostnamectl set-hostname k8s-worker-02
# Worker-03
sudo hostnamectl set-hostname k8s-worker-03
# LB
sudo hostnamectl set-hostname k8s-lb
在所有节点配置 hosts:
sudo tee -a /etc/hosts <<EOF
192.168.0.104 k8s-lb
192.168.0.105 k8s-master-01
192.168.0.103 k8s-master-02
192.168.0.110 k8s-master-03
192.168.0.107 k8s-worker-01
192.168.0.108 k8s-worker-02
192.168.0.109 k8s-worker-03
192.168.0.112 k8s-apiserver-vip
EOF
验证:
ping -c 2 k8s-master-01
ping -c 2 k8s-apiserver-vip
1.2 系统优化配置
关闭 Swap:
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
加载内核模块:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# modprobe 内核插件 sudo modprobe [xxx] 加载指定模板
sudo modprobe overlay
sudo modprobe br_netfilter
配置内核参数:
这三个参数是部署 Kubernetes 集群时必须配置的核心内核网络参数
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
# 让 Linux 内核正确处理容器网络的数据包转发、iptables 规则生效,确保 K8s 的网络插件(如 Calico、 Flannel、Weave 等)能正常工作,解决容器跨节点通信、Service 转发等核心网络问题。
# net.bridge.bridge-nf-call-iptables = 1
# 让 Linux 内核的桥接(bridge)网络设备在处理数据包时,调用 iptables 的过滤规则(包括 filter、nat 表等)。
# net.bridge.bridge-nf-call-ip6tables = 1
# 和上一个参数原理一致,但针对 **IPv6 数据包**,让网桥转发的 IPv6 数据包调用 ip6tables 规则。
sudo sysctl --system
验证:
lsmod | grep br_netfilter
lsmod | grep overlay
sysctl net.ipv4.ip_forward
1.3 时间同步(所有节点)
# 安装 chrony
sudo apt update
sudo apt install -y chrony
# 配置国内 NTP 服务器
sudo tee /etc/chrony/chrony.conf <<EOF
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
EOF
# 重启服务
sudo systemctl restart chrony
sudo systemctl enable chrony
# 验证
chronyc tracking
1.4 关闭防火墙(测试环境)(所有节点)
二、安装 containerd (所有节点)
可参考网上方案.....
三、安装 Kubernetes 组件
可参考网上方案.....
四、配置 HAProxy + Keepalived
五、初始化第一个 Master 节点
六、安装网络插件 Calico
七、加入其他 Master 节点
八、加入 Worker 节点
九、部署测试应用
十、集群管理工具
Kuboard (首次启动会日志打印)
默认账号:admin
默认密码:Kuboard123
管理界面

更多推荐



所有评论(0)