公众号关注 「奇妙的 Linux 世界」
设为「星标」,每天带你玩转 Linux !
在容器化与云原生的世界里,高可用是保证业务连续性的关键。无论你是想部署生产环境,还是测试环境中验证架构,高可用集群都能提供更强的容错能力与更稳定的运行保障。
本文将带你搭建一个 最简单、可直接运行的 K3s 高可用集群,同时配备自动升级功能,让它未来一年几乎零维护。
为什么选择 K3s 做 HA?
K3s 是由 Rancher 开发的轻量级 Kubernetes 发行版,相比传统 K8s:
安装简单:单一二进制文件,几分钟即可部署
资源占用低:适合边缘计算、嵌入式和小型数据中心
集成度高:默认集成多种核心组件,减少额外运维工作
在高可用架构下,K3s 同样能提供与标准 K8s 类似的稳定性和可扩展性,同时部署门槛更低,非常适合中小型团队。
架构设计:我们的 HA 基础方案
为了保证架构的简单与稳定,我们将构建一个由 4 台节点组成的集群:
节点类型 | 数量 | 说明 |
---|---|---|
负载均衡器(LB) | 1 | 负责将 API Server 请求分发到多个 Server 节点,可后续扩展到多台 |
Server 节点 | 3 | 每台节点运行 K3s Server,使用嵌入式 etcd 提供一致性存储 |
Agent 节点 | 可选 | 本文先不部署,后续可根据业务需求扩展 |
特点:
📌 单 IP 入口(通过负载均衡器访问 API Server)
📌 内置 etcd 高可用存储(无需额外数据库)
📌 自动升级(system-upgrade-controller)
部署步骤
1️⃣准备工作
我使用 vagrant
创建了 4 台 Ubuntu 24.04 虚拟机,它们处于同一网段(平面网络)。 假设节点信息如下:
节点名称 | IP 地址 | 角色 |
---|---|---|
lb | 10.10.10.100 | 负载均衡器 |
server-0 | 10.10.10.50 | Server |
server-1 | 10.10.10.51 | Server |
server-2 | 10.10.10.52 | Server |
2️⃣ 安装负载均衡器(haproxy)
我们使用 haproxy 转发 6443 端口(Kubernetes API Server)。
sudo apt update
sudo apt install haproxy
配置文件/etc/haproxy/haproxy.cfg
:
frontend k3s
bind *:6443
mode tcp
default_backend k3s
backend k3s
mode tcp
option tcp-check
balance roundrobin
server server-0 10.10.10.50:6443 check
server server-1 10.10.10.51:6443 check
server server-2 10.10.10.52:6443 check
重启服务:
sudo systemctl restart haproxy
💡 提示
后续可以使用 keepalived 部署第二台 LB,实现双机热备。
如果有防火墙,请确保 6443 端口已开放。
3️⃣ 部署第一个 Server 节点
在 server-0
上执行:
curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=v1.31 sh -s - \
--cluster-init --token k3sblog --tls-san 10.10.10.100
参数说明:
--cluster-init
:初始化集群(第一个 Server 必须有)--token
:节点加入集群的密钥--tls-san
:将负载均衡 IP 加入 API Server 证书
4️⃣ 加入其他 Server 节点
在 server-1
和 server-2
上执行:
curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=v1.31 sh -s - \
--server https://10.10.10.100:6443 --token k3sblog
5️⃣ 获取 kubeconfig 文件
现在集群已启动,我们可以从第一台 server 节点获取 kubeconfig:
scp server-0:/etc/rancher/k3s/k3s.yaml k3s.yaml
将 127.0.0.1
替换为负载均衡器的 IP,这样就可以在本地主机上通过负载均衡器访问集群:
sed -i 's/127.0.0.1/10.10.10.100/' k3s.yaml
测试集群:
export KUBECONFIG=$(pwd)/k3s.yaml
kubectl get nodes
此时应能看到 3 台 Server 节点均为 Ready 状态。
自动升级集群
我使用的升级计划会让 K3s 保持在所选版本通道的最新补丁版本。本例中我们使用 v1.31 通道(与安装时一致)。在撰写本文时,Kubernetes v1.31.4 刚刚发布,因此该计划能在接下来 10~12 个月内保持稳定升级(取决于该小版本的补丁数量)。
6️⃣ 安装 system-upgrade-controller
升级计划由 system-upgrade-controller 管理,安装方法如下:
kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/system-upgrade-controller.yaml
kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/crd.yaml
7️⃣ 创建升级计划
server-plan.yaml
:
apiVersion: upgrade.cattle.io/v1
kind:Plan
metadata:
name:server-plan
namespace:system-upgrade
spec:
concurrency:1
cordon:true
nodeSelector:
matchExpressions:
-key:node-role.kubernetes.io/control-plane
operator:In
values:
-"true"
serviceAccountName:system-upgrade
upgrade:
image:rancher/k3s-upgrade
channel:https://update.k3s.io/v1-release/channels/v1.31
应用计划:
kubectl apply -f server-plan.yaml
📌 说明:
concurrency: 1
表示一次只升级一台节点,保证业务不中断channel
指定升级通道(v1.31),会自动跟进最新补丁版本
总结与扩展
至此,我们已经拥有一个:
高可用 K3s 集群(3 台 Server + 1 台 LB)
单 IP 入口(方便运维与访问)
自动升级机制(未来一年免维护)
💡 进一步扩展:
添加 Agent 节点 承载更多工作负载
增加第二台 LB 节点,实现更高冗余
配置持久化存储(如 Longhorn、NFS)
🚀 最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。
🌟『极客视界』科技达人必备综合资讯指南,等你来探索!访问网址 https://bestgeek.org 即可打开新世界。
📕 关注『奇妙的 Linux 世界』公众号,带你开启有趣新生活!更多好用好玩的软件资源,可访问 https://666666.dev 免费获取。
你可能还喜欢
点击下方图片即可阅读
网页复制神器 SmartCopy 重磅更新!一键将任意网页变为精美的 Markdown 笔记
点击上方图片,『美团|饿了么』大额外卖红包天天免费领
更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!