k3s 高可用集群部署(内置 etcd + VIP + keepalived)
一、节点规划
- master 节点:10.0.0.40、10.0.0.51、10.0.0.53
- worker 节点:10.0.0.52、10.0.0.54
- VIP(高可用入口):10.0.0.41
二、离线包准备
- 下载 k3s 安装脚本、二进制、镜像包
- 导入镜像到本地或 Harbor
- 打包所有安装文件
三、keepalived 配置(VIP 漂移)
网卡名:ens192(根据实际情况修改)
10.0.0.51(MASTER)
vrrp_instance VI_1 {state MASTERinterface ens192virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {10.0.0.41}
}
10.0.0.53(BACKUP)
vrrp_instance VI_1 {state BACKUPinterface ens192virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {10.0.0.41}
}
10.0.0.40(BACKUP)
vrrp_instance VI_1 {state BACKUPinterface ens192virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {10.0.0.41}
}
四、master 节点部署命令(内置 etcd 高可用 + VIP)
第一个 master 节点(10.0.0.40)
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_KUBECONFIG_MODE="644" \
INSTALL_K3S_EXEC="server --cluster-init --node-ip=10.0.0.40 --advertise-address=10.0.0.40 --tls-san=10.0.0.41 --docker" \
/usr/local/bin/install_k3s.sh
获取集群 token
cat /var/lib/rancher/k3s/server/node-token
其他 master 节点(10.0.0.51/53)
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_KUBECONFIG_MODE="644" \
K3S_TOKEN="<集群token>" \
INSTALL_K3S_EXEC="server --server https://10.0.0.40:6443 --node-ip=<本机IP> --advertise-address=<本机IP> --tls-san=10.0.0.41 --docker" \
/usr/local/bin/install_k3s.sh
<本机IP>
分别为 10.0.0.51、10.0.0.53
五、worker 节点部署命令
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_URL="https://10.0.0.41:6443" \
K3S_TOKEN="<集群token>" \
INSTALL_K3S_EXEC="agent --docker" \
/usr/local/bin/install_k3s.sh
六、常见问题与排查
- 节点
NotReady
:检查 Docker、镜像、网络。
- VIP 漂移异常:检查 keepalived 配置、网卡名、priority。
- k3s-agent 启动失败:确认 k3s 二进制权限、Docker 服务。
- 镜像拉取失败:检查 registries.yaml 和 Harbor 权限。
- keepalived 版本建议一致,避免兼容性问题。
- CentOS 7 不建议直接用 CentOS 8 的 keepalived rpm 包。
七、关键注意事项
- 所有 master 节点
--tls-san
必须为 VIP。
- worker 节点和 kubectl 连接 VIP 地址。
- keepalived 配置的网卡名需与实际一致(如 ens192)。
- 建议至少 3 个 master 节点,保证 etcd 高可用。
- 如需升级 keepalived,建议源码编译或用 EPEL 源。