如何使用AWS Boto3查询EKS集群的可用更新
问题答复
目前Boto3 EKS客户端不存在可以直接查询EKS集群所有可用更新的单一专用方法。你查阅文档找到的describe_update、list_updates接口,仅支持查询已经手动触发的历史更新任务的执行记录与状态,确实无法返回待执行的可用更新列表。
要获取集群维度的所有可用更新,需要按更新类型组合调用现有EKS接口实现,常见场景的实现路径如下:
- 集群控制面版本可用更新
- 调用
describe_cluster接口传入目标集群名称,从返回结果中获取当前集群运行的Kubernetes版本、平台版本、升级策略配置 - 调用版本列表查询接口获取当前区域支持的所有EKS K8s版本,按照EKS不支持跨次版本升级的规则,过滤出当前版本紧邻的可升级高版本,即为控制面可用的版本更新
- 调用
- 已安装Addon可用更新
- 调用
list_addons接口获取集群下所有已安装的EKS托管Addon列表 - 对每个Addon调用
describe_addon,拿到当前安装的Addon版本 - 调用
describe_addon_versions传入Addon名称、当前集群版本,拿到该Addon兼容当前集群的所有可安装版本,和当前运行版本对比,过滤出可升级的版本,就是对应Addon的可用更新
- 调用
- 节点组可用更新
- 调用
list_nodegroups接口获取集群下所有托管节点组列表 - 对每个节点组调用
describe_nodegroup,拿到当前节点组绑定的EKS版本、节点AMI发布版本 - 对照当前集群版本(或待升级的目标集群版本)匹配AWS发布的最新托管节点AMI版本,即可得到节点组的版本、AMI更新项
- 调用
简单的代码实现片段参考:
import boto3 eks = boto3.client("eks") cluster_name = "your-cluster-name" # 获取集群基础信息 cluster_info = eks.describe_cluster(name=cluster_name)["cluster"] current_cluster_version = cluster_info["version"] print(f"当前集群版本: {current_cluster_version}") # 查询所有Addon可用更新 addons = eks.list_addons(clusterName=cluster_name)["addons"] for addon in addons: addon_info = eks.describe_addon(clusterName=cluster_name, addonName=addon)["addon"] current_ver = addon_info["addonVersion"] # 取兼容当前集群的默认推荐版本 addon_version_list = eks.describe_addon_versions( addonName=addon, kubernetesVersion=current_cluster_version )["addons"][0]["addonVersions"] latest_ver = next( v["addonVersion"] for v in addon_version_list if v["compatibilities"][0]["defaultVersion"] ) if current_ver != latest_ver: print(f"Addon {addon} 可从 {current_ver} 升级到最新推荐版 {latest_ver}")
注意:如果你的集群开启了控制面、节点组自动升级配置,部分更新会由AWS在配置的维护窗口自动触发,这类更新不会在上述手动查询结果中单独标记,需要结合集群的
updateConfig配置项判断。
内容的提问来源于stack exchange,提问作者awab-dogsbody
相关产品推荐
相关产品推荐

