升级ACK Edge集群

为避免过期版本集群潜在的安全性和稳定性风险,同时享有新集群版本的新功能,建议您随ACK Edge集群的版本发布节奏及时升级集群。ACK Edge集群采用原地升级方式进行升级,本文为您介绍ACK Edge集群升级的注意事项、升级流程和操作。

为什么需要升级集群版本

  • 降低安全和稳定性风险:随着Kubernetes版本迭代,会不断优化及修复发现的安全及稳定性漏洞,长久使用过期版本集群会给业务带来安全和稳定性风险。

  • 享受更好的维护支持:对于过期版本,ACK Edge集群不再提供安全补丁和问题修复,也无法保证过期版本的技术支持质量。使用新版本能够让您享受更好的技术支持和答疑服务。

  • 使用新版本的新功能:随着社区Kubernetes版本的演进,新版本包含新的功能和改进,ACK Edge集群也将进行适配和发布,为您带来更好的开发和运维体验。

注意事项

版本说明

  • ACK Edge集群支持的升级范围为1.18到1.22版本,且只能按照支持的版本依次升级,不支持跨版本升级。

    例如,从1.18版本升级到1.22版本,需要进行两次升级操作,先从1.18升级到1.20版本,再从1.20升级到1.22版本。

  • 边缘节点池和控制面最多只能相差两个次要版本,例如控制面为1.22版本,边缘节点池最低是1.20版本,否则会导致集群异常。

您可以登录容器服务管理控制台,进入集群页面,在集群列表的版本列查看当前ACK Edge集群的版本。

ACK Edge集群发布的版本及各版本的功能特性,请参见版本发布说明

相关功能及自定义配置说明

如果您的ACK Edge集群使用了如下相关功能,请仔细阅读以下说明及解决方案。

配置项

注意事项

推荐解决方案

节点自动伸缩

  • 如果您的ACK Edge集群使用了节点自动伸缩功能,为保证自动伸缩功能不受影响,集群在升级成功后会自动更新Cluster Autoscaler组件至最新版本。

  • 集群升级期间,受弹性伸缩极速弹出模式管理的节点可能会因节点关机而无法完成升级。

  • 确认Cluster Autoscaler组件版本是否正常。更多信息,请参见启用节点自动伸缩

  • 如果升级结束后排查有节点因极速弹出模式未被升级,建议手动移除该节点。

节点资源预留

升级至Kubernetes v1.18后,ACK Edge集群会默认配置节点资源预留。如果集群未配置资源预留且节点水位较高,升级后存在Pod驱逐后无法被快速调度的风险。

为节点预留部分资源,推荐CPU使用率不超过50%,内存使用率不超过70%。更多信息,请参见节点资源预留策略

Loadbalancer配置

集群外部访问集群时,需要通过SLB来访问。但当SLB设置externalTrafficPolicy: Local后,只有部署了相应后端Pod的节点才能访问到对应的SLB地址。如果集群节点或者Pod所在的节点上没有相应的后端服务Pod,可能导致网络不通。

检查是否完成对应配置,避免LoadBalancer暴露的SLB地址访问不通的风险。如有相关问题,请参见Kubernetes集群中访问LoadBalancer暴露的SLB地址不通

API Server

集群升级过程中,ACK Edge集群竭力保障控制面的平滑升级,集群上的应用不会中断,但升级过程中可能会出现短暂的API Server中断。如果您的应用强依赖于API Server,例如需要对资源进行List-Watch,API Server重启会导致Watch中断,需要您自行保证在中断时自动重试。

如果您的应用不访问API Server,将不会受到升级影响;如果需要访问API Server,则需要具备失败重试的能力。

启动探针(Startup Probe)

如果集群中的Pod配置了启动探针,Pod会在kubelet重启后出现短暂的NotReady现象。

建议Pod采用多副本模式,将Pod分散到不同的节点上,以确保在某个节点重启期间仍有足够的可用Pod。

kubectl

ACK Edge集群升级后,请同步升级您本地的kubectl版本。

如果未及时升级,在使用本地kubectl的过程中可能会因为与集群API Server版本不同,发生类似invalid object doesn't have additional properties的报错。

安装或升级kubectl。具体操作,请参见安装kubectl

如果您对集群有自定义配置,请仔细阅读以下说明:

配置项

说明

网络

集群升级需要使用yum下载升级所需的软件包。如果您的集群曾自行修改节点的网络配置或者使用了自定义的操作系统镜像,需确保节点的yum能正常使用。您可以执行yum makecache进行检查。

操作系统镜像

自定义操作系统镜像非容器服务官方严格验证。ACK无法完全保证升级成功。

其他

如果您对集群有过配置更改,例如打开了SWAP分区、曾通过黑屏操作修改kubelet配置等,集群升级过程有可能失败,或自定义配置有可能丢失。

升级流程、方式及所需时间

升级流程

image

升级方式

  • 控制面和云端节点池升级ACK Edge集群支持通过控制台触发控制面和云端节点池的升级,后续升级动作由后台自动完成。支持的升级模式如下:

    • (推荐)控制面和所有云端节点池:系统将自动完成控制面和所有云端节点池的同时升级,后台实际的升级顺序为先升级控制面,再分批升级云端节点池。

    • 仅升级控制面:系统将自动完成控制面的升级。控制面升级完成后,您还需要单独完成云端节点池的升级。云端节点池升级操作,请参见升级节点池

  • 边缘节点池升级:需要您手动执行命令,将待升级边缘节点池下的所有节点都依次进行升级。

升级所需时间

  • ACK Edge集群控制面升级时间约为5分钟。

  • 云端节点池升级时内部节点分批升级,每批升级时间约为5分钟。

  • 边缘节点池需要由您手动执行命令完成升级操作,操作时间和节点池下的节点数量有关。

升级操作

步骤一:升级控制面和所有云端节点池

(推荐)同时升级控制面和所有云端节点池

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,选择目标集群,并在目标集群右侧操作列,选择更多 > 运维管理 > 集群升级

  3. 集群升级页面的操作对象区域,选择可升级的集群版本,选择升级模式控制面和所有云端节点池,并在批量升级策略区域,设置每批次的最大并行数,然后单击前置检查

    检查完成后,单击查看详情,查看检查报告。

    • 检查结果正常时,您可以继续进行集群升级操作。

    • 检查结果异常时,请单击待处理页签按照页面提示进行修复。详细信息,请参见集群检查项及修复方案

  4. 前置检查通过后,单击开始升级

    升级过程中,请勿添加或删除节点(如需操作,请先取消升级)。您可以在集群升级页面下方的事件轮转区域查看升级进程,还可按需进行以下操作。

    • 暂停与继续升级:升级过程中,如需在某个阶段暂停升级,可单击暂停。如需继续集群升级进程,单击继续

      集群暂停状态为集群升级的中间状态,请尽快完成升级,并在此期间请勿对集群进行任何操作。处于暂停状态的集群将7日后关闭升级过程,同时清理升级相关的事件和日志信息。

    • 取消升级:如需取消集群升级,可在暂停升级后单击取消,然后在弹出的对话框单击确定。取消升级后,当前批次已经开始升级的节点将完成升级且无法回滚,未开始升级的节点不会升级。

      说明
      • 如果集群升级过程中发生错误,系统将暂停集群升级进程。具体失败原因会展示在页面下方详情中,您可根据提示进行修复。

      • 集群升级过程中,除非发生错误,否则请勿修改kube-upgrade命名空间下的相关资源。

    升级完成后,您可以在集群列表查看集群版本,确认管控组件升级是否成功,并在集群信息页面的左侧导航栏单击节点管理 > 节点,查看kubelet版本,确认节点升级是否成功。

单独升级控制面

重要

选择单独升级控制面时,您必须在控制面升级完成后,再单独升级所有云端节点池。具体操作,请参见升级节点池

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,选择目标集群,并在目标集群右侧操作列,选择更多 > 运维管理 > 集群升级

  3. 集群升级页面的操作对象区域,选择可升级的集群版本,选择升级模式仅控制面,然后单击前置检查

    检查完成后,单击查看详情,查看检查报告。

    • 检查结果正常时,您可以继续进行集群升级操作。

    • 检查结果异常时,请单击待处理页签按照页面提示进行修复。详细信息,请参见集群检查项及修复方案

  4. 前置检查通过后,单击开始升级

    升级过程中,您可以在集群升级页面下方查看升级进程。升级完成后,您可以在集群列表查看集群版本,确认管控组件升级是否成功。

步骤二:升级边缘节点池

重要
  • 升级边缘节点池之前必须保证控制面已升级完成。

  • 边缘集群节点池下的所有边缘节点都升级成功,边缘节点池才算升级完成。

在待升级边缘节点池下的所有边缘节点上,依次执行如下命令,完成所有边缘节点的升级。

 export REGION="" INTERCONNECT_MODE="" TARGET_CLUSTER_VERSION=""; export ARCH=$(uname -m | awk '{print ($1 == "x86_64") ? "amd64" : (($1 == "aarch64") ? "arm64" : "amd64")}') INTERNAL=$( [ "$INTERCONNECT_MODE" = "private" ] && echo "-internal" || echo "" ); wget http://aliacs-k8s-${REGION}.oss-${REGION}${INTERNAL}.aliyuncs.com/public/pkg/run/attach/${TARGET_CLUSTER_VERSION}/${ARCH}/edgeadm -O edgeadm; chmod u+x edgeadm;./edgeadm upgrade --interconnect-mode=${INTERCONNECT_MODE} --region=${REGION}

参数说明如下:

参数

说明

示例值

TARGET_CLUSTER_VERSION

指定要升级到的目标集群版本。

说明

升级的目标集群版本就是控制面升级完成后的版本。

1.22.15-aliyunedge.1

ACK Edge集群发布的版本和具体版本号,请参见版本发布说明

REGION

指定集群所在地域的Region ID。

cn-hangzhou

ACK Edge集群支持的地域及其Region ID,请参见开服地域

INTERCONNECT_MODE

指定节点接入的网络类型。

  • basic:公网接入。

  • private:专线接入。

basic

返回如下执行结果,则说明当前边缘节点升级成功。

image

升级常见问题

若一直不升级,后台是否会强制完成自动升级?

不会,ACK Edge集群目前只支持手动升级,若您一直不进行升级操作,将一直使用旧的集群版本。建议您及时将集群升级到最新版本,获得更完整的功能特性和技术支持。

边缘节点升级失败如何处理?

请参见如何处理边缘节点升级失败的问题?排查原因。

相关文档

在执行升级前置检查时,若检查结果异常,可参考集群检查项及修复方案排查异常原因。