温馨提示×

Ubuntu如何升级Kubernetes版本

小樊
43
2025-11-26 23:13:38
栏目: 智能运维

Ubuntu上升级 Kubernetes 的标准流程(kubeadm)

一 升级前准备

  • 备份关键数据与配置:优先备份 etcd(建议做快照),以及 /etc/kubernetes/ 目录;etcd 快照示例:ETCDCTL_API=3 etcdctl snapshot save /path/snapshot.db --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key。
  • 检查集群健康:kubectl get nodes、kubectl get pods -A 均为 Ready/Running;确认控制面与 etcd 集群状态正常。
  • 确认升级路径:仅支持按相邻次要版本递进(如 1.23→1.24→1.25),不可跨多个次要版本;kubectl 与集群版本通常建议相差不超过 1 个次要版本。
  • 维护窗口与高可用:选择低峰期;如使用 HAProxy/Keepalived 等前端,确保升级期间能剔除正在维护的 API Server。
  • 容器运行时:自 v1.24 起内置的 dockershim 已移除,需使用 containerd(或 CRI-O);如使用 containerd,建议准备 /etc/crictl.yaml(如设置 criSocket: unix:///var/run/containerd/containerd.sock)。

二 控制平面节点升级(逐个进行)

  • 升级 kubeadm(解除 hold → 安装 → 再加回 hold):
    apt-mark unhold kubeadm && apt-get update && apt-get install -y kubeadm=<目标版本> && apt-mark hold kubeadm
  • 查看可升级版本与计划:
    apt-cache madison kubeadm | grep <目标版本>;kubeadm version;kubeadm upgrade plan
  • 执行控制面升级(按提示选择版本):
    kubeadm upgrade apply v<目标版本>
  • 腾空节点(维护前务必执行):
    kubectl drain <控制面节点名> --ignore-daemonsets --force
  • 升级 kubelet 与 kubectl(解除 hold → 安装 → 再加回 hold):
    apt-mark unhold kubelet kubectl && apt-get update && apt-get install -y kubelet=<目标版本> kubectl=<目标版本> && apt-mark hold kubelet kubectl
  • 重启 kubelet:
    systemctl daemon-reload && systemctl restart kubelet
  • 恢复调度:
    kubectl uncordon <控制面节点名>
  • 多控制面 HA:重复以上步骤处理其余控制面节点,逐台滚动升级。

三 工作节点升级(逐个进行)

  • 腾空节点:
    kubectl drain <工作节点名> --ignore-daemonsets --force
  • 升级 kubeadm(与控制面目标版本保持一致):
    apt-mark unhold kubeadm && apt-get update && apt-get install -y kubeadm=<目标版本> && apt-mark hold kubeadm
  • 可选:在节点上执行 kubeadm 节点升级(部分环境可省略,直接升级 kubelet 并重启):
    kubeadm upgrade node
  • 升级 kubelet 与 kubectl:
    apt-mark unhold kubelet kubectl && apt-get update && apt-get install -y kubelet=<目标版本> kubectl=<目标版本> && apt-mark hold kubelet kubectl
  • 重启 kubelet:
    systemctl daemon-reload && systemctl restart kubelet
  • 恢复调度:
    kubectl uncordon <工作节点名>
  • 验证:kubectl get nodes 应显示新版本且 Ready

四 升级后验证与常见问题

  • 集群状态:
    kubectl get nodes;kubectl get pods -A;确认所有节点 Ready、系统组件与业务 Running
  • 组件日志:
    journalctl -u kubelet -f;必要时查看 kube-apiserver、kube-controller-manager、kube-scheduler 日志。
  • 周边组件:按兼容性升级 CNI(如 Calico/Flannel)Ingress ControllerCoreDNS、监控与日志组件。
  • 常见问题与要点:
    • 禁止跨多个次要版本;
    • 升级前确保 etcd 健康并已完成备份;
    • 升级期间业务可能出现短暂中断,务必提前规划维护窗口与回滚方案;
    • 如从 ≤1.23 升级到 ≥1.24,需确保容器运行时为 containerd 并已正确配置 CRI。

0