电话咨询
业务留言
回到顶部

客户案例

文章博客

文章博客

全部文章
解决方案
企业动态

文章博客 > 文章内容

AKS升级路线最佳实践方案

分类:

MSP解决方案

发布日期: 2025年06月13日

前言   

Kubernetes 社区大约每 4 个月发布次要版本,次要版本包括新增功能和改进。补丁发布更为频繁(有时每周都会发布),适用于次要版本中的关键 Bug 修复。修补程序版本包括针对安全漏洞或主要 bug 的修复。对于受支持版本列表以外的群集,AKS 将不会在正常运行时间或其他方面做出任何保证。为了使AKS版本始终能获得支持,需要制定计划将AKS升级至受支持版本。在AKS Kubernetes 发布日历(https://learn.microsoft.com/zh-cn/azure/aks/supported-kubernetes-versions?tabs=azure-cli#aks-kubernetes-release-calendar)上参考即将推出的版本发布和弃用事项。

AKS版本升级路径说明 

升级受支持的 AKS 群集时,不能跳过 Kubernetes 次要版本。Kubernetes 控制平面版本倾斜策略不支持跳过次要版本。例如,对于以下升级过程:

  • 1.28.x ->1.29.x:允许。
  • 1.27.x ->1.28.x:允许。
  • 1.27.x ->1.29.x:允许。

若要从 1.27.x ->1.29.x 升级,请执行以下操作:

  • 从 1.27.x ->1.28.x 升级。
  • 从 1.28.x ->1.29.x 升级。

仅当从不受支持的版本升级回受支持的最低版本时,才能跳过多个版本。例如,如果 1.27 是最低受支持的次要版本,可以从不受支持的 1.25.x 升级到受支持的 1.27.x。   

从跳过两个或更多次要版本的不支持版本执行升级时,执行升级时不保证任何功能,并且不在服务级别协议和有限保修范围内。运行不受支持的版本的群集具有将控制平面升级与节点池升级分离的灵活性。但是,如果版本明显过期,建议重新创建群集。

AKS升级策略 

从 Kubernetes 1.19 开始,开源社区已将支持时间延长到 1 年。AKS 承诺启用修补程序并提供与上游承诺使用量匹配的支持。对于版本 1.19 和更高版本上的 AKS 群集,每年至少升级一次,以便始终使用受支持的版本。

AKS升级将会有什么影响 

  • AKS次要版本升级将会更新弃用API,如果在升级AKS前不对弃用API进行处理,两个版本的AKS API不兼容,会造成AKS升级失败和使用弃用API的资源部署失败。已弃用 API 的迁移指南(https://kubernetes.io/zh-cn/docs/reference/using-api/deprecation-guide/)
  • 所有pod将会重启。2024年06月06日国内关闭了docker hub镜像缓存服务,在这期间pod没有重启过的在AKS升级后镜像会丢失,而且无法从docker hub中拉取,从而导致pod拉取镜像失败。
  • 没有对节点池预设的labels和Taints在AKS升级后会被清除。
  • 会对有依赖性的服务产生影响,需要按照启动的先后顺序重启服务。

升级步骤 

升级状态跟踪表

升级路线 

例:1.22.6 → 1.27.3 → 1.28.9 → 1.29.4

AKS Upgrade PreCheck 

  • 在升级前进行AKS现状检查,并进行统计,需要处理的邮件发送至各位Owner及时处理。
  • 与客户及涉及到的各个应用沟通时间窗口并安排升级计划。
  • 提前发送邮件book需要参与AKS升级的相关人员(应用开发/Cloud Team/SRE Team)的时间。

检查是否存在即将废弃的API 

  • 微软提供的查询语句

查询query:

AzureDiagnostics| where Category == "kube-audit"

| where log_s has 'deprecated' and TimeGenerated > ago(1d)

| extend log = parse_json(tostring(parse_json(log_s)))

| extend removed_release = toreal(tostring(log.annotations['k8s.io/removed-release']))

| where removed_release == '1.26' or removed_release == '1.27'

| extend verb = tostring(log.verb)

| extend userAgent = tostring(log.userAgent)

| extend username = tostring(log.user.username)

| extend resource = tostring(log.objectRef.resource)

| extend apiGroup = tostring(log.objectRef.apiGroup)

| extend apiVersion = tostring(log.objectRef.apiVersion)

| extend requestURI = tostring(split(log.requestURI, '?')[0])

| extend source_ip = tostring(log.sourceIPs[0])

| extend api = strcat(apiGroup, '/', apiVersion)

| project TimeGenerated, userAgent, username, api, resource, verb, requestURI, source_ip, Resource

  • 命令检查废弃API 

例:从 v1.27 版本开始不再提供 storage.k8s.io/v1beta1 API 版本的 CSIStorageCapacity。

$ kubectl get csistoragecapacities.storage.k8s.io -A -o=jsonpath="{$.items[?(@.apiVersion=='storage.k8s.io/v1beta1')].metadata.name}";

注意:在AKS升级前,需要为所有可能的中断做好准备。 这些中断包括 API 中断性变更、弃用以及 Helm 和容器存储接口 (CSI) 等依赖项导致的中断。 预测这些中断并在不停机的情况下迁移关键工作负载可能比较困难。可以将 AKS 群集配置为自动停止包含次要版本更改和已弃用 API 的升级操作,并提醒你注意此问题。 此功能有助于避免意外中断,并使你有时间在继续升级之前及时解决已弃用的 API。参考:发生 API 中断性变更时自动停止 Azure Kubernetes 服务 (AKS) 群集升级

检查部署源文件api version

检查部署源文件中的api version,例如helm等,如果存在目标版本即将要废弃的api version,需要在AKS升级前计划修改,在修改前注意检查是否开启资源自动同步。

检查公共Image   

  • 检查是否存在已经丢失公共镜像源的服务。
  • 检查是否存在仍然在使用被自动清除策略删除的镜像。

附:扫描namespace下所有镜像的检查命令

$ kubectl describe pod -n <namespace> | grep Image | awk '{print $2}' | grep -v 'ID' | sort -u

检查节点亲和性

检查是否存在有节点依赖的服务。

$ kubectl get deployments.apps -A -o=jsonpath="{$.items[?(@.spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution)].metadata.name}";

$ kubectl get statefulsets.apps -A -o=jsonpath="{$.items[?(@.spec.template.spec.affinity.deAffinity.requiredDuringSchedulingIgnoredDuringExecution)].metadata.name}";

$ kubectl get deployments.apps -A -o=jsonpath="{$.items[?(@.apiVersion=='apps/v1')].spec.template.spec.nodeSelector}";

$ kubectl get statefulsets.apps -A -o=jsonpath="{$.items[?(@.apiVersion=='apps/v1')].spec.template.spec.nodeSelector}";

查看所有节点及labels并记录。

$ kubectl get node --show-labels

检查是否有污点 

检查节点是否标记有污点并记录。

$ kubectl get nodes -o jsonpath='{range $.items[?(.spec.taints)]}{@.metadata.name}   {@.spec.taints}{"\n"}{end}'

检查PDB设置 

升级前备份并删除PDB,系统PDB除外,否则会导致AKS集群升级失败。参考:排查由于 PDB 导致的逐出失败而导致的 UpgradeFailed 错误(https://learn.microsoft.com/zh-cn/troubleshoot/azure/azure-kubernetes/create-upgrade-delete/error-code-poddrainfailure)

检查地址空间 

升级前确认地址空间充足。   打开Azure Portal > Kubernetes 服务 > 设置 - 节点池 > 选择节点池 > 配置 - 子网 > 点击子网 > 复制Subnet并搜索

检查服务器类型配额是否足够 

查看使用的服务器类型

检查升级节点激增数 

$ az aks nodepool show --name <nodePool> --resource-group <resourceGroup> --cluster-name <clusterName> |grep maxSurge

设置节点激增数(设置AKS集群升级中同时升级的节点数),一般是按照节点池总数的三分之一或二分之一设置。

# Set max surge for a new node pool

az aks nodepool add --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 33%
# Update max surge for an existing node pool

az aks nodepool update --name mynodepool --resource-group MyResourceGroup --cluster-name MyManagedCluster --max-surge 5

检查并记录升级前所有pod状态 

升级前记录所有pod状态,在AKS升级完成后作为参考。

检查JDK版本 

在AKS升级到1.25版本后,Pod可能由于内存饱和或内存不足而停止工作。

现象:

  • -节点上的内存压力
    -与升级前应用的内存使用量相比,增加了应用的内存使用率
    -节点上的 CPU 限制
    -由于 OOM 错误而导致 Pod 失败
     
  • 在以下环境中运行的应用可能会降低性能:
  • -对于 低于版本 11.0.18 或版本 1.8.0 372 的 JRE 版本 ,Java 运行时环境 (JRE) ()
    -低于版本 5.0 的 .NET 版本
    -Node.js

参考:群集升级到 Kubernetes 1.25 后,Pod 中会出现内存饱和

https://learn.microsoft.com/zh-cn/troubleshoot/azure/azure-kubernetes/create-upgrade-delete/aks-memory-saturation-after-upgrade

扫描namespace下所有pod的JDK版本

$ vim show_pods_jdk_version.sh

#!/usr/bin/bash

for pod in `kubectl get po -n $1 | awk '{print $1}' | grep -v NAME`

do

  echo $pod

  result=$(kubectl exec -it -n $1 $pod -- java -version 2>/dev/null)

  if [[ $? != 0 ]]; then

    echo 'no_jdk' 

 else

    echo `kubectl exec -it -n $1 $pod -- java -version 2>/dev/null | grep 'openjdk version\|java version'`

  fi

done

$ bash show_pods_jdk_version.sh <namespace>  

AKS Upgrade Cut Over   

Kubernetes服务 > 群集配置 > 升级版本 > 选择下一个次版本 > 保存

强制升级(可选项)

用户也可以尝试临时性的disable该检查,强制让aks先完成升级。但这就意味着后续升级到新版本之后,用户业务pod可能会直接无法使用(新k8s版本上老旧的api已经下架)

参考:Stop Azure Kubernetes Service (AKS) cluster upgrades automatically on API breaking changes

https://docs.azure.cn/en-us/aks/stop-cluster-upgrade-api-breaking-changes#bypass-validation-to-ignore-api-changes

$ az aks update --name myAKSCluster --resource-group myResourceGroup --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z   //预估的时间窗口 

AKS Upgrade PostCheck 

检查node labels 

设置labels   

$ kubectl label nodes <node> <key>=<value>

检查污点 

设置污点

$ kubectl taint nodes <node> <key>=<value>:NoSchedule 

检查所有pod状态 

对比在PreCheck中记录的pod状态检查,如有问题及时处理。

通知应用自检查 

确保所有pod正常启动后检查业务系统状态,更新完成CMDB,并汇总业务的反馈信息做升级报告提交。 

业务标签

FinOps DevOps MSP 云安全 大数据

精选文章

联系我们

选择您关注的产品或解决方案,我们将尽快联系您!

售前咨询

400-670-5818 (周一至周五 9:30-18:00)
隐私政策

更新日期:2021年 08 月 27 日
生效日期:2021年 08 月 27 日

上海联蔚数字科技集团股份有限公司及其关联公司(简称“我们”)深知个人信息对您的重要性,我们将按照法律法规的规定,会尽全力保护您的个人信息安全可靠。我们制定本“隐私政策”并特别提示:希望您在使用我们招聘及相关服务前仔细阅读并理解本隐私政策,以便做出适当的选择。

请仔细阅读——了解我们如何收集和使用您的信息,以及您可以如何控制这些信息非常重要。有关您个人信息权益的条款重要内容我们已用加粗形式提示,请特别关注。

一、我们收集哪些信息以及如何使用信息

个人信息是以电子或者其他方式记录的与已识别或者可识别的自然人有关的各种信息,不包括匿名化处理后的信息。
(一) 您须授权我们收集和使用您个人信息的情形
收集个人信息的目的在于向您提供产品和/或服务,并且保证我们遵守适用的相关法律、法规及其他规范性文件。请您注意,只有在您确认同意后,我们才会开始收集、使用、处理和存储您的个人信息。您有权自行选择是否同意授权提供您的个人信息,但多数情况下,如果您不提供,我们可能无法向您提供相应的服务,也无法回应您遇到的问题。

例如,当您通过我们网站申请意向职位时,我们需要您提供:真实姓名、联系方式等个人信息。这些信息包含敏感个人信息,亦属于使用我们服务所必须的信息,您可以选择不予提供,但您可能无法完全使用我们提供的招聘等服务。

为评估您是否符合我们对相关职位的预期与需求,我们可能会使用您的上述个人信息进行职位、工作能力以及相关职业资格等方面的评估,如您符合/不符合我们的预期与需求,我们可能使用您提供的手机号与您联系

(二) 收集您的设备信息
为了保障服务的安全运行及优化改进系统功能,我们也会收集您的IP 地址、操作、服务日志(即使您未向我们申请职位,仅仅是浏览我们网页)。

(三) 征得授权同意的例外
根据相关法律法规的规定,在以下情形中,我们可以在不征得您的授权同意的情况下收集、使用一些必要的个人信息:
1. 与国家安全、公共安全、公共卫生、重大公共利益直接相关的;
2. 与犯罪侦查、起诉、审判和判决执行等直接相关的;
3. 所收集的个人信息是您自行向社会公众公开的;
4. 从合法公开披露的信息中收集到您的个人信息,如从合法的新闻报道、政府信息公开等渠道;
5. 法律法规规定的其他情形。

二、我们如何共享、转让、公开披露个人信息

(一)共享
为改善我们的产品或服务水平,提高您的服务体验,我司基于合法、正当目的会遵循以下原则向第三方共享您的信息
1. 事先获得您的明确授权或同意。 获得您的明确同意,我们会与其他方共享您的个人信息;除非共享的个人信息是去标识化处理后的信息,且共享第三方无法重新识别此类信息的自然人主体。
2. 合法正当与最小必要原则:向第三方共享的数据必须具有合法正当目的,且共享的数据以达成目的必要为限。比如在收到您的职位申请后,我们进行岗位评估时,启动对您的背景调查,包括委托第三方背景调查服务提供商或向您的前雇主进行调查,可能涉及需向第三方共享您个人信息情形,但我们会坚持最小必要原则进行信息共享。
(二) 转让
我们不会转让您的个人信息给任何其他第三方,除非征得您的明确同意。
(三)披露 除非获取您的明确同意,我们不会公开披露您的个人信息。
但基于法律、法律程序、诉讼或政府主管部门强制性要求的情况下,我们会向有权机关披露您的个人信息。但我们保证,在上述情况发生时,我们会要求披露请求方必须出具与之相应的有效法律文件,同时尽合理可能对被披露的信息采取符合法律和业界标准的安全防护措施。

三、我们如何存储个人信息

(一) 存储地点
我们依照法律法规的规定,将在境内运营过程中收集和产生的您的个人信息存储于中华人民共和国境内。目前,我们不会将上述信息传输至境外,如果我们向境外传输,我们将会遵循相关国家规定及征求您的同意。
(二) 存储期限
我们仅在为实现您申请的岗位招聘之目的所必需的期间内保留您的个人信息,超出必要期限后,我们将对您的个人信息进行删除或匿名化处理,但法律法规另有规定的除外。

四、我们如何保护个人信息的安全

(一) 技术安全
我们非常重视您个人信息的安全,将努力采取合理的安全措施(包括技术方面和管理方面)来保护您的个人信息,防止您提供的个人信息被不当使用或未经授权的情况下被访问、公开披露、使用、修改、损坏、丢失或泄漏。
(二)我们已经取得公安部信息安全等级保护三级认证,并与监管机构建立了良好的沟通协调机制,及时抵御并处置各类信息安全威胁,为您的信息安全提供全方面的保障。
(三)您知悉并理解,通过互联网传输信息并不完全安全。尽管我们将实施并保持合理措施来保护您的个人信息,但我们不能保证通过本网站或以其他方式通过互联网传输的信息的安全性,有可能因我们可控范围外的因素而出现问题,因此我们强烈建议您采取积极措施保护个人信息的安全。
(四)在不幸发生个人信息安全事件后,我们将按照法律法规的要求,及时向您告知:安全事件的基本情况和可能的影响,我们已采取或将采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等等。同时,我们还将按照监管部门的要求,主动上报个人信息安全事件的处置情况。

五、访问隐私政策

您可以在我们官网页面查看本隐私政策全部内容,我们有权根据服务范围和内容的更新,适时对本隐私政策进行修订,并及时通过官方网站进行发布。

六、联系我们

如果您对本隐私政策内容有任何疑问、意见或建议,您可以通过(【(021)6196-1588 】)与我们联系,我们核查并验证您的用户身份后会及时向您反馈。

本“隐私政策”的版权为我们所有,在法律允许的范围内,我们拥有解释和修改的权利。

以下规则(以下称“使用条款”)适用于所有访问本网站的用户或浏览者,上海联蔚数字科技集团股份有有限公司和/或其关联公司(以下统称"联蔚")保留随时修改这些规则的权利。访问本网站的权利由联蔚根据下列条款授予。

一、权利归属

1. 本网站上的所有内容均受著作权法的保护,其著作权均为联蔚拥有,但注明引用他方内容除外。 2. 联蔚仅允许仅为个人目的而非商业目的的浏览、拷贝、打印、传播本网页的内容。 3. 未经联蔚许可,任何人擅自使用上述内容,均可能会侵犯联蔚权利,我们将会追究侵权者的法律责任。 4. 本网站上所使用的所有商标、商号、标识的所有权均为联蔚所拥有,但注明属于他方拥有的商标、商号、标识除外。本网站的浏览、使用在任何情况下不得被解释为被授予使用本网站出现的任何标记的许可或权利。

二、网站使用说明

1. 任何人不得出于任何非法或本使用条款禁止的目的使用本网站包含的任何内容,不得将本网站包含的任何内容用于任何非法用途,也不得唆使任何非法活动或其他侵犯联蔚或他人权利的活动。 2. 任何人不得以任何非法方式,在未经授权的情况下访问本网站及其任何部分,或接受通过本网站提供的任何服务。 3. 任何人不得使用任何自动或手动的流程、抓取设备、程序、算法或方法,来访问、获取、拷贝或监控本网站的任何组成部分或内容。 4. 任何人不得以任何方式(包括但不限于使用任何设备、软件或程序)干扰或试图干扰本网站的正常运作及其他人对本网站的正常使用。 5. 任何人在使用本网站及其内容时,需遵守国家法律法规、社会公共道德。不得利用本网站及其内容从事制作、查阅、复制和传播任何违法、侵犯他人权益等扰乱社会秩序、破坏社会稳定的行为,亦不得利用本网站及其内容从事任何危害或试图危害计算机系统及网络安全的活动。

三、第三方链接

1. 如果联蔚将来提供了若干第三方网站的超级链接或指针,提供与这些第三方网站的任何链接只是为了向用户提供方便和信息而已。 2. 所链接的任何网站中的内容不在我们联蔚的控制之下,如果用户决定访问这些网站,则完全由用户本人承担风险和责任。

四、免责条款

1. 本网站所载的材料和信息,包括但不限于文本、图片、数据、观点、建议,联蔚并不保证这些材料和内容的准确、完整和可靠性,并且明确声明不对这些材料和内容的错误或遗漏承担责任,也不对这些材料和内容作出任何明示或默示的、包括但不限于有关所有权担保、没有侵犯第三方权利、质量和没有计算机病毒的保证。 2. 联蔚并不就网址上提供的任何产品、服务或信息作出任何声明、保证或认可,所有销售的产品和服务应受实际签订的销售合同约束。联蔚不应对间接、附带、特殊或任何形式的惩罚性赔偿承担任何责任,也不应对任何利润、收入、数据、数据使用的损失承担任何责任。联蔚不对本网站的“资料”承担任何责任,不论该责任因何原因引起或者基于何种侵权理论。 3. 联蔚可以在没有任何通知或提示的情况下随时对本网站上的内容进行修改,为了得到最新版本的信息,请定时访问本网站。

五、隐私保护

1. 联蔚深知个人信息的重要性,尊重并保护每个用户的个人信息安全。 2. 用户可以通过访问《隐私政策》来了解联蔚会收集哪些数据、为什么收集这些数据,会利用这些数据做些什么及如何保护这些数据。

六、争议解决及所适用法律

因本声明或使用本网站发生争议,应当协商解决,协商不成的,各方一致同意中国上海市有管辖权的法院具有相关的管辖权,所发生的争议适用中华人民共和国法律。

版权声明

此网站上的所有内容,包括但不限于文本、设计、图表、界面及其选择和安排,作为汇集作品受版权相关法律保护,上海联蔚数字科技集团股份有限公司及其关联公司(以下统称“联蔚”)对其发行作品享有版权。对于联蔚作品,未经联蔚书面许可的使用行为,联蔚均保留追究法律责任的权利。

商标声明

联蔚网站上使用和显示的所有商标、标志皆属联蔚或其许可人所有。未经事先书面许可,任何人不得以任何方式使用联蔚名称及联蔚的商标、标记。