集群升级

本指南介绍如何升级由 Cluster API 管理的 Kubernetes 集群,以实现最小停机时间,同时保持稳定性和数据完整性。

目录

Overview

集群升级涵盖多个组件,并遵循结构化的方法以确保系统可靠性:

  • Control Plane Upgrades:更新 Kubernetes 控制平面组件及其底层基础设施
  • Worker Node Upgrades:使用新的机器镜像和 Kubernetes 版本升级工作节点
  • Infrastructure Updates:修改虚拟机规格、存储和网络配置

Cluster API 通过内置的安全机制协调声明式滚动更新。

INFO

前提条件

开始之前,请确保:

  • 控制平面可访问
  • 所有节点均处于健康状态(Ready)

有关初始部署,请参见创建集群指南。

WARNING

升级依赖于 Cluster API 的滚动更新机制。在滚动更新期间,任何先前附加的磁盘都会被移除,并在新创建的机器上替换为新磁盘。请确保集群功能或工作负载不依赖于原始磁盘上的数据。

Control Plane Upgrades

控制平面升级包括更新 Kubernetes API 服务器、etcd、调度器和控制器管理器,以及底层虚拟机基础设施。

Infrastructure Image Updates

升级控制平面节点的底层机器镜像可提供安全补丁、性能改进和系统组件更新。

操作步骤

  1. 创建更新的机器模板

    复制 KubeadmControlPlane 引用的现有 DCSMachineTemplate 并修改所需规格:

    kubectl get dcsmachinetemplate <current-template-name> -n cpaas-system -o yaml > new-cp-template.yaml
  2. 修改模板规格

    修改新模板:

    • 设置 metadata.name<new-template-name>
    • 根据需要更新:
      • spec.template.spec.vmTemplateName
      • spec.template.spec.dcsMachineCpuSpec.quantity
      • spec.template.spec.dcsMachineMemorySpec.quantity
      • spec.template.spec.dcsMachineDiskSpec
      • 等等
  3. 部署更新的模板

    应用新的机器模板:

    kubectl apply -f new-cp-template.yaml -n cpaas-system
  4. 更新控制平面引用

    修改 KubeadmControlPlane 资源以引用新模板:

    kubectl patch kubeadmcontrolplane <kcp-name> -n cpaas-system --type='merge' -p='{"spec":{"machineTemplate":{"infrastructureRef":{"name":"<new-template-name>"}}}}'
  5. 监控滚动更新

    控制平面将自动执行滚动更新:

    kubectl get kubeadmcontrolplane <kcp-name> -n cpaas-system -w
    kubectl get machines -n cpaas-system -l cluster.x-k8s.io/control-plane

Kubernetes Version Upgrades

升级 Kubernetes 版本涉及更新控制平面软件和支持的虚拟机镜像。

前提条件

  • 验证目标 Kubernetes 版本与现有工作负载的兼容性
  • 确保虚拟机模板支持目标 Kubernetes 版本
  • 审查 Kubernetes 升级路径和版本偏差策略

操作步骤

  1. 更新虚拟机模板引用

    更新引用的 DCSMachineTemplate 中的 spec.template.spec.vmTemplateName。新的虚拟机模板必须匹配目标 Kubernetes 版本。

  2. 更新控制平面版本

    修改 KubeadmControlPlane 资源中的 spec.version 字段(必需)。可根据需要调整相关字段(例如,滚动策略、排空/删除超时,或引用的基础设施模板)以符合新版本和升级策略。

  3. 验证升级进度

    监控滚动升级过程:

    # 检查控制平面状态
    kubectl get kubeadmcontrolplane <kcp-name> -n cpaas-system
    
    # 监控单个机器
    kubectl get machines -n cpaas-system -l cluster.x-k8s.io/control-plane
    
    # 验证集群健康状况
    kubectl get nodes

Worker Node Upgrades

工作节点升级通过 MachineDeployment 资源管理。

INFO

有关详细的工作节点操作步骤,请参见升级 Kubernetes 版本部分。

Additional Resources