手把手教你搞定K3s高可用离线部署从单节点到多Server集群的完整配置在边缘计算和物联网场景中业务连续性往往面临网络不稳定甚至完全断网的挑战。K3s作为轻量级Kubernetes发行版凭借其精简的架构和高效的资源占用成为这类环境的首选。但单节点部署存在单点故障风险本文将深入探讨如何构建真正具备生产级可靠性的K3s高可用集群。1. 高可用架构设计原理K3s的高可用模式通过三个核心组件实现故障自动恢复多Server节点至少部署3个server节点组成控制平面采用Raft共识算法保持状态同步外部数据存储使用MySQL/PostgreSQL等替代内置SQLite确保集群状态持久化固定注册地址通过负载均衡器或DNS轮询提供统一的API入口点关键设计考量# 典型的高可用拓扑结构 ----------------- | Load Balancer | ---------------- | ---------------------------------------------- | | | -------------- -------------- -------------- | Server Node1 | | Server Node2 | | Server Node3 | | (Control Plane)| | (Control Plane)| | (Control Plane)| --------------- --------------- --------------- | | | ---------------------------------------------- | -------------------- | External Database | | (MySQL/PostgreSQL) | ----------------------实际部署中每个server节点需要配置相同的数据库连接信息。当主节点故障时剩余节点会在5秒内完成新leader选举业务流量自动切换到健康节点。2. 离线环境准备工作2.1 镜像仓库配置在无外网环境部署时需要预先准备包含所有依赖镜像的离线包从官方Release页面下载对应版本的k3s-airgap-images-ARCH.tar将镜像包分发到每个节点的指定目录sudo mkdir -p /var/lib/rancher/k3s/agent/images/ sudo cp k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/版本匹配原则组件匹配要求检查方法K3s二进制文件必须与镜像包版本完全一致k3s --version镜像包需包含对应K8s版本的基础镜像crictl images2.2 数据库准备推荐使用MySQL 8.0作为外部存储# 创建专用数据库用户 CREATE USER k3s% IDENTIFIED BY complex_password; CREATE DATABASE k3s_cluster; GRANT ALL PRIVILEGES ON k3s_cluster.* TO k3s%;注意生产环境应配置SSL加密连接并在数据库端设置适当的连接数限制3. 集群部署实战步骤3.1 首个Server节点初始化INSTALL_K3S_SKIP_DOWNLOADtrue \ INSTALL_K3S_EXECserver --cluster-init --datastore-endpointmysql://k3s:complex_passwordtcp(db-server:3306)/k3s_cluster \ ./install.sh关键参数解析--cluster-init标记为集群首个控制节点--datastore-endpoint指定外部数据库连接字符串--tls-san为证书添加负载均衡器DNS名称获取加入令牌cat /var/lib/rancher/k3s/server/node-token3.2 扩展Server节点在其他节点执行INSTALL_K3S_SKIP_DOWNLOADtrue \ INSTALL_K3S_EXECserver --server https://loadbalancer:6443 --datastore-endpointmysql://k3s:complex_passwordtcp(db-server:3306)/k3s_cluster \ K3S_TOKENK1041b...a358c4 \ ./install.sh健康检查要点# 验证节点状态 kubectl get nodes -o wide # 检查Raft选举状态 sudo k3s kubectl describe endpoints kube-scheduler -n kube-system3.3 Agent节点接入所有工作节点使用相同方式加入INSTALL_K3S_SKIP_DOWNLOADtrue \ K3S_URLhttps://loadbalancer:6443 \ K3S_TOKENK1041b...a358c4 \ ./install.sh4. 生产环境调优建议4.1 网络性能优化修改/etc/rancher/k3s/config.yamlkubelet-arg: - max-pods100 - kube-api-burst100 flannel-backend: host-gw4.2 资源配额管理通过Helm安装Metrics Server后配置Pod限额kubectl set resources -n kube-system deployment/coredns --limitscpu500m,memory256Mi4.3 备份恢复方案推荐备份策略数据库定时快照使用Velero备份应用数据定期导出K3s配置sudo k3s etcd-snapshot save --snapshot-compress --snapshot-retention30在边缘计算场景中我们曾遇到节点意外断电导致数据损坏的情况。通过上述多级备份方案最终实现了30分钟内完整集群恢复。
手把手教你搞定K3s高可用离线部署:从单节点到多Server集群的完整配置
手把手教你搞定K3s高可用离线部署从单节点到多Server集群的完整配置在边缘计算和物联网场景中业务连续性往往面临网络不稳定甚至完全断网的挑战。K3s作为轻量级Kubernetes发行版凭借其精简的架构和高效的资源占用成为这类环境的首选。但单节点部署存在单点故障风险本文将深入探讨如何构建真正具备生产级可靠性的K3s高可用集群。1. 高可用架构设计原理K3s的高可用模式通过三个核心组件实现故障自动恢复多Server节点至少部署3个server节点组成控制平面采用Raft共识算法保持状态同步外部数据存储使用MySQL/PostgreSQL等替代内置SQLite确保集群状态持久化固定注册地址通过负载均衡器或DNS轮询提供统一的API入口点关键设计考量# 典型的高可用拓扑结构 ----------------- | Load Balancer | ---------------- | ---------------------------------------------- | | | -------------- -------------- -------------- | Server Node1 | | Server Node2 | | Server Node3 | | (Control Plane)| | (Control Plane)| | (Control Plane)| --------------- --------------- --------------- | | | ---------------------------------------------- | -------------------- | External Database | | (MySQL/PostgreSQL) | ----------------------实际部署中每个server节点需要配置相同的数据库连接信息。当主节点故障时剩余节点会在5秒内完成新leader选举业务流量自动切换到健康节点。2. 离线环境准备工作2.1 镜像仓库配置在无外网环境部署时需要预先准备包含所有依赖镜像的离线包从官方Release页面下载对应版本的k3s-airgap-images-ARCH.tar将镜像包分发到每个节点的指定目录sudo mkdir -p /var/lib/rancher/k3s/agent/images/ sudo cp k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/版本匹配原则组件匹配要求检查方法K3s二进制文件必须与镜像包版本完全一致k3s --version镜像包需包含对应K8s版本的基础镜像crictl images2.2 数据库准备推荐使用MySQL 8.0作为外部存储# 创建专用数据库用户 CREATE USER k3s% IDENTIFIED BY complex_password; CREATE DATABASE k3s_cluster; GRANT ALL PRIVILEGES ON k3s_cluster.* TO k3s%;注意生产环境应配置SSL加密连接并在数据库端设置适当的连接数限制3. 集群部署实战步骤3.1 首个Server节点初始化INSTALL_K3S_SKIP_DOWNLOADtrue \ INSTALL_K3S_EXECserver --cluster-init --datastore-endpointmysql://k3s:complex_passwordtcp(db-server:3306)/k3s_cluster \ ./install.sh关键参数解析--cluster-init标记为集群首个控制节点--datastore-endpoint指定外部数据库连接字符串--tls-san为证书添加负载均衡器DNS名称获取加入令牌cat /var/lib/rancher/k3s/server/node-token3.2 扩展Server节点在其他节点执行INSTALL_K3S_SKIP_DOWNLOADtrue \ INSTALL_K3S_EXECserver --server https://loadbalancer:6443 --datastore-endpointmysql://k3s:complex_passwordtcp(db-server:3306)/k3s_cluster \ K3S_TOKENK1041b...a358c4 \ ./install.sh健康检查要点# 验证节点状态 kubectl get nodes -o wide # 检查Raft选举状态 sudo k3s kubectl describe endpoints kube-scheduler -n kube-system3.3 Agent节点接入所有工作节点使用相同方式加入INSTALL_K3S_SKIP_DOWNLOADtrue \ K3S_URLhttps://loadbalancer:6443 \ K3S_TOKENK1041b...a358c4 \ ./install.sh4. 生产环境调优建议4.1 网络性能优化修改/etc/rancher/k3s/config.yamlkubelet-arg: - max-pods100 - kube-api-burst100 flannel-backend: host-gw4.2 资源配额管理通过Helm安装Metrics Server后配置Pod限额kubectl set resources -n kube-system deployment/coredns --limitscpu500m,memory256Mi4.3 备份恢复方案推荐备份策略数据库定时快照使用Velero备份应用数据定期导出K3s配置sudo k3s etcd-snapshot save --snapshot-compress --snapshot-retention30在边缘计算场景中我们曾遇到节点意外断电导致数据损坏的情况。通过上述多级备份方案最终实现了30分钟内完整集群恢复。