温馨提示×

Debian上Kubernetes集群的升级与维护

小樊
41
2025-12-19 02:13:36
栏目: 智能运维

Debian上Kubernetes集群的升级与维护指南

一 升级前准备

  • 备份关键数据与配置:对应用层数据库、持久化卷数据、集群配置与清单进行备份;如使用etcd,按官方流程进行快照备份。升级前确保集群处于健康状态。
  • 检查版本与升级路径:使用kubeadm upgrade plan查看可升级版本与差异;Kubernetes通常支持跨一个大版本升级(如1.19.x → 1.20.x),不支持跨多个大版本,也不支持大版本内的任意小版本跳跃。
  • 系统与环境:确保已禁用 Swap;核对节点时间同步、内核与网络策略;准备好容器运行时(如containerd)与新版本兼容的CNI 插件版本。
  • 维护窗口与容量:规划维护窗口,确保升级期间有足够的节点容量承接被驱逐的工作负载;对单节点集群需特别谨慎。
  • 组件兼容性预检:梳理集群内的Ingress、HPA、CSI、监控/日志等组件的版本兼容矩阵,必要时先行升级或调整清单。

二 升级顺序与核心步骤

  • 查看与锁定版本:在 Debian 上用 APT 查询可用补丁版本(如:apt-cache madison kubeadm),并锁定将要安装的 kubelet/kubeadm/kubectl 版本,避免误升级。
  • 升级第一个控制面节点:
    1. 升级 kubeadm(apt-mark unhold → apt-get install → apt-mark hold);
    2. 执行kubeadm upgrade plan确认可升级版本与变更;
    3. 执行kubeadm upgrade apply v<目标版本>
    4. 如提示需手动升级组件配置,按提示提供配置文件;
    5. 注意 kubeadm 会自动为控制面临时证书续期(如需跳过可用**–certificate-renewal=false**)。
  • 升级其余控制面节点:在每个控制面节点执行kubeadm upgrade node(无需再执行 plan 与 CNI 升级)。
  • 升级 kubelet 与 kubectl(控制面与工作节点):
    1. 腾空节点:kubectl drain --ignore-daemonsets;
    2. 升级 kubelet/kubectl 包并重启:systemctl daemon-reload && systemctl restart kubelet;
    3. 解除封锁:kubectl uncordon
    4. 验证 kubelet 状态:systemctl status kubelet 或 journalctl -xeu kubelet。
  • 升级工作节点:按“腾空 → 升级 kubelet/kubectl → 重启 → 解除封锁”的流程逐个或分批进行,确保业务容量不受影响。
  • 升级 CNI 插件:按所用 CNI 的官方说明升级(如 Calico/Flannel/Cilium);若以 DaemonSet 方式运行,通常控制面节点升级后无需重复此步骤。

三 升级后验证与常见问题处理

  • 版本与节点状态:kubectl version 确认客户端/服务端版本;kubectl get nodes 检查所有节点Ready;kubectl get pods -A 观察系统组件与业务 Pod 是否恢复。
  • 证书与配置:确认 kubelet 重启成功、证书已按预期续期(或按需保留原证书策略);检查 kube-proxy、CoreDNS 等关键组件镜像与配置是否更新。
  • API 与清单兼容性:升级后控制面会采用新版本支持的最新 API 版本;若集群存在旧 API(如 extensions/v1beta1 的 Ingress、apps/v1beta1 的 Deployment 被 HPA 引用),需提前用kubectl convert或 patch 调整为 networking.k8s.io/v1apps/v1,避免 HPA/Ingress 失效。
  • 工作负载行为:由于容器规约哈希变化,升级过程中被驱逐的 Pod 会被重建;对有状态或挂载独享卷的负载,确保存储可随 Pod 迁移或具备合适的迁移/重建策略。

四 日常维护要点

  • 版本与补丁管理:为 kubelet/kubeadm/kubectl 设置版本固定策略(apt-mark hold),定期在测试环境验证后再滚动到生产;遵循“先 Master、后 Node”与“一次一个小版本”的节奏。
  • 节点生命周期:对节点进行cordon/drain/uncordon维护;对系统 DaemonSet 设置合适的tolerations,避免被误驱逐。
  • 组件与插件:定期升级 CNI、CSI、Ingress Controller、HPA 指标源、监控/日志等组件,保持与 Kubernetes 版本的兼容矩阵一致。
  • 容量与自愈:配置资源请求/限制PodDisruptionBudget,保留足够的节点余量应对升级与故障;对关键业务使用拓扑分散与反亲和提升可用性。
  • 变更与回滚预案:任何升级前准备回滚方案(如快照/备份、旧版本包与清单留存、维护窗口与回滚触发条件),并在变更后持续观察关键指标与日志。

0