通过Python begin_create_or_update()升级AKS的版本稳定性相关咨询
AKS版本升级相关问题解答
1. 当前代码获取的版本是否为稳定版
你当前的实现逻辑没有过滤预览版本,拿到的latest_version不一定是稳定版:
- 你调用
get_upgrade_profile返回的upgrades列表中,每个版本对象都带有is_preview字段,值为True代表该版本是预览版,未经过完整稳定性验证,不建议生产环境使用 - 你当前的逻辑是直接遍历所有升级版本,将最后遍历到的版本赋值为
latest_version,如果列表最后一个版本是预览版,你就会误升级到预览版本
2. stable自动升级通道与begin_create_or_update接口的适配逻辑
- AKS的自动升级通道是AKS提供的托管升级功能,你配置
stable通道后,AKS会自动筛选对应区域符合稳定标准的Kubernetes版本,在维护窗口内自动帮你完成集群升级,不需要你手动调用API begin_create_or_update是手动触发集群更新的底层API,本身和自动升级通道没有绑定关系,适配逻辑如下:- 只要你传入的
kubernetes_version是stable通道覆盖的正式发布版本,调用这个接口升级的效果和自动升级走stable通道的效果完全一致 - 该接口不会主动校验你传入的版本属于哪个自动升级通道,只会校验版本是否在当前区域可用、是否为当前集群支持升级的合法版本
- 只要你传入的
3. 代码优化建议
3.1 过滤稳定版本
修改遍历升级版本的逻辑,只筛选正式稳定版本再取最大值,示例修改:
if upgrades: # 只筛选非预览的稳定版本 stable_upgrades = [i for i in upgrades if not i.is_preview] if not stable_upgrades: print("没有可用的稳定版本更新!") else: # 按版本号排序取最大的稳定版 from packaging import version stable_upgrades.sort(key=lambda x: version.parse(x.kubernetes_version), reverse=True) latest_stable_version = stable_upgrades[0].kubernetes_version print("最新稳定可用版本:", latest_stable_version)
3.2 修复多节点池兼容问题
你当前的代码遍历节点池时会覆盖agent_pool_name变量,如果集群存在多个节点池,构造ManagedCluster参数时只传一个节点池配置会导致其他节点池被删除,需要把所有节点池的配置都保留并更新版本。
内容的提问来源于stack exchange,提问作者Matrix
相关产品推荐
相关产品推荐

