温馨提示×

centos上k8s如何进行版本升级

小樊
42
2025-12-23 16:57:31
栏目: 智能运维

CentOS 上使用 kubeadm 升级 Kubernetes 的标准流程


一 升级前准备与版本路径

  • 备份关键数据与配置:优先备份 /etc/kubernetes 目录与 etcd(如使用外部 etcd,建议先快照);同时备份 kubeconfig。示例:
    • etcd 快照:etcdctl snapshot save /data/etcd/etcd_bak.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
    • 配置备份:cp -r /etc/kubernetes /etc/kubernetes_backup;cp ~/.kube/config ~/.kube/config.backup
  • 检查集群健康:确保控制面与节点均 Ready、核心组件 Running,无 CrashLoopBackOff/Error 的 Pod,etcd 集群可用。
  • 确认升级路径:遵循“相邻次要版本递进”,不支持跨多个次要版本(如 1.22 → 1.25 需逐步升级);kubectl 与集群版本差距不应超过 1 个次要版本。
  • 准备软件源与版本查询:在所有节点配置 Kubernetes YUM 源,使用 yum list --showduplicates 查询可用版本;必要时使用 --disableexcludes=kubernetes 安装目标版本。

二 控制平面升级 Master 节点

  • 逐节点升级(若为 HA,一次仅升级一个控制面节点,配合外部负载均衡/HAProxy 健康检查)。
  • 升级 kubeadm 到目标版本:yum install -y kubeadm- --disableexcludes=kubernetes
  • 检查升级计划:kubeadm upgrade plan(确认可升级到的目标版本与变更点)
  • 腾空节点:kubectl drain --ignore-daemonsets
  • 执行控制面升级:kubeadm upgrade apply
  • 升级 kubelet 与 kubectl:yum install -y kubelet- kubectl- --disableexcludes=kubernetes;systemctl daemon-reload && systemctl restart kubelet
  • 解除封锁:kubectl uncordon
  • 验证:kubectl get nodes 与 kubectl get pods -n kube-system 均为正常状态。

三 工作节点升级 Node 节点

  • 逐个升级(每次仅升级一个节点,保持业务可用)。
  • 腾空节点:kubectl drain --ignore-daemonsets
  • 升级 kubeadm(与集群目标版本一致):yum install -y kubeadm- --disableexcludes=kubernetes
  • 执行节点升级:kubeadm upgrade node
  • 升级 kubelet 与 kubectl:yum install -y kubelet- kubectl- --disableexcludes=kubernetes;systemctl daemon-reload && systemctl restart kubelet
  • 解除封锁:kubectl uncordon
  • 验证:节点 Ready、对应节点上的 Pod 恢复 Running。

四 升级后验证与常见问题

  • 版本与状态核验:
    • kubectl version --short(客户端/服务端版本)
    • kubectl get nodes -o wide(所有节点版本与状态)
    • kubectl get pods -A(无异常 CrashLoopBackOff/Error)
    • 组件日志:journalctl -u kubelet -f、journalctl -u kube-apiserver -f
  • 周边组件与兼容性:
    • 升级 CNI 网络插件(如 Calico/Flannel)至与目标 K8s 兼容的版本
    • 升级 Ingress Controller、Dashboard、Metrics Server 等附加组件
    • 容器运行时建议为 containerd(K8s 1.25+ 对应 containerd 1.6+
  • 常见问题与处理:
    • 升级失败回滚:基于已备份的 /etc/kubernetesetcd 快照进行恢复
    • 节点无法驱逐:检查 PodDisruptionBudget、本地卷/HostPath、DaemonSet 是否阻塞
    • 单节点集群:升级期间业务会中断(无可调度节点),建议准备多节点或维护窗口。

0