Hetzner-K3s 集群维护指南:节点管理、版本升级与系统更新
前言
在 Kubernetes 生产环境中,集群的日常维护是确保系统稳定运行的关键环节。本文将详细介绍基于 Hetzner 云平台构建的 K3s 集群的维护操作,包括节点管理、集群版本升级以及操作系统更新等重要维护任务。
节点管理操作
扩展节点池容量
当业务负载增加时,我们需要扩展节点池的容量。操作步骤如下:
- 编辑对应节点池的配置文件
- 增加
instance_count
参数值 - 重新执行创建命令
系统会自动按照新的配置扩展节点池,新增节点会自动加入 Kubernetes 集群。这种扩容方式简单可靠,适合应对业务增长的需求。
缩减节点池规模
缩减规模需要谨慎操作,以避免影响正在运行的工作负载:
- 首先修改配置文件中的
instance_count
参数,确保未来不会意外重建节点 - 执行节点排水操作:
kubectl drain <节点名称>
- 从 Kubernetes 集群中删除节点:
kubectl delete node <节点名称>
- 最后在云平台控制台中删除对应的虚拟机实例
注意事项:通常应该按照节点名称的字母顺序从后往前删除节点,并确保删除的是正确的实例。
替换故障节点
当某个节点出现硬件故障或不可恢复的错误时,替换流程如下:
- 将故障节点从集群中排水并删除
- 在云平台控制台中删除对应的虚拟机实例
- 重新执行创建命令,系统会自动重建节点并加入集群
集群架构升级
从单主节点升级为高可用架构
将单主节点架构升级为多主节点高可用架构非常简单:
- 修改配置文件中 master 节点的
instance_count
参数 - 重新执行创建命令
升级过程中,系统会自动:
- 配置 API 服务器负载均衡器(如已启用)
- 更新 kubeconfig 文件,将 API 请求导向负载均衡器
生产环境建议:将主节点分布在不同的可用区,以提高集群的容灾能力。
种子主节点替换
在高可用集群中,第一个创建的主节点(通常命名为 master1)被称为种子主节点。如果因故障需要替换:
- 删除并重建 master1 节点
- 重建后,需要在其他现有主节点上重启 K3s 服务
K3s 版本升级
常规升级流程
执行版本升级的命令格式如下:
hetzner-k3s upgrade --config cluster_config.yaml --new-k3s-version <目标版本>
升级过程特点:
- 配置文件会自动更新为新版本
- 可以查看可用版本列表
- 单主节点集群在控制平面升级期间会有短暂不可用
- 可以使用
watch kubectl get nodes -owide
监控升级进度
升级故障处理
如果升级过程卡住或未完成:
- 清理现有升级任务和计划
- 移除节点上的升级标签
- 重启升级控制器
- 检查升级控制器日志
对于主节点升级后工作节点升级卡住的情况,可以手动标记主节点为已升级状态,使工作节点继续升级流程。
节点操作系统更新
手动更新流程
- 评估集群容量,必要时添加临时节点
- 逐个节点执行排水操作
- 更新操作系统并重启
- 恢复节点调度
自动化更新方案
推荐使用 Kubernetes Reboot Daemon (Kured) 实现自动化更新:
- 确保节点操作系统启用了自动安全更新
- 在配置文件中预装必要软件包
- 按照 Kured 文档配置维护窗口等参数
对于 Ubuntu 系统,建议配置如下:
additional_packages:
- unattended-upgrades
- update-notifier-common
post_create_commands:
- sudo systemctl enable unattended-upgrades
- sudo systemctl start unattended-upgrades
总结
本文详细介绍了 Hetzner-K3s 集群的各类维护操作,包括节点管理、架构升级、版本更新等关键维护任务。通过遵循这些最佳实践,可以确保集群的稳定运行和顺利升级。对于生产环境,建议在非高峰时段执行维护操作,并提前做好备份和回滚方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考