Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文介绍 Azure Kubernetes 服务 (AKS) 如何在检测到已弃用的 Kubernetes API 用法时自动阻止集群升级。
概述
若要保持在受支持的 Kubernetes 版本中,必须每年至少升级一次群集,并准备可能中断。 这些中断性因素可能包括 API 破坏性变更、弃用,以及对 Helm 和容器存储接口(CSI)等的依赖。 很难预判这些中断情况,并在不停机的情况下迁移关键工作负载。
当 AKS 检测到目标版本的弃用 API 使用情况时,它可以自动阻止次要版本升级操作,并提醒你出现问题。 此行为有助于避免意外中断,并在继续升级之前及时修复已弃用的 API 使用情况。
先决条件
请确保满足以下先决条件:
- 升级操作是集群控制平面的 Kubernetes 的次要版本更改。
- Kubernetes 目标版本为 1.26 或更高版本。
- 目标版本中已弃用 API 的最后一次使用发生在升级操作前 12 小时内。 AKS 按小时记录使用情况,因此在最近一小时内的使用情况不能保证显示在检测中。
注释
无需手动启用此检测功能。 AKS 标准群集预配置它。
缓解已停止的升级操作
如果满足 先决条件,请尝试升级,并收到类似于以下错误消息的错误:
Bad Request({
"code": "ValidationError",
"message": "Control Plane upgrade is blocked due to recent usage of a Kubernetes API deprecated in the specified version. Please refer to https://kubernetes.io/docs/reference/using-api/deprecation-guide to migrate the usage. To bypass this error, set enable-force-upgrade in upgradeSettings.overrideSettings. Bypassing this error without migrating usage will result in the deprecated Kubernetes API calls failing. Usage details: 1 error occurred:\n\t* usage has been detected on API flowcontrol.apiserver.k8s.io.prioritylevelconfigurations.v1beta1, and was recently seen at: 2023-03-23 20:57:18 +0000 UTC, which will be removed in 1.26\n\n",
"subcode": "UpgradeBlockedOnDeprecatedAPIUsage"
})
使用以下选项之一:
删除已弃用 API 的使用(建议)
在 Azure 门户中,导航到群集资源并选择“诊断并解决问题”
选择“ 创建”、“升级”、“删除”和“缩放>Kubernetes API 弃用”。
从最后一次看到弃用的 API 使用情况起,等待 12 小时。 只读谓词从弃用的 API 用法中排除,即 Get/List/Watch。 还可以通过启用 容器见解 并浏览 kube 审核日志来检查过去的 API 使用情况。
重试群集升级。
绕过验证以忽略 API 更改
注释
此方法需要Azure CLI 2.57 或更高版本。 如果已安装预览 CLI 扩展,请更新到版本 3.0.0b10 或更高版本。 不建议对正常生产操作使用此方法,因为目标 Kubernetes 版本中已弃用的 API 可能会长期失败。 升级后尽快删除已弃用的 API 用法。
使用带有 az aks upgrade 的 --enable-force-upgrade 命令执行绕过验证的升级,并设置 --upgrade-override-until 以指定绕过窗口的结束时间。 如果未设置值,窗口默认为从当前时间开始的三天。 提供的日期和时间必须在未来。
# Set environment variables
RESOURCE_GROUP_NAME=<your-resource-group-name>
CLUSTER_NAME=<your-cluster-name>
KUBERNETES_VERSION=<target-kubernetes-version>
# Run the upgrade command with validation bypass
az aks upgrade --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --kubernetes-version $KUBERNETES_VERSION --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z
注释
Z 是零 UTC/GMT 偏移量的区时标识符,也称为“Zulu”时间。 本示例将窗口的末尾设置为 13:00:00 GMT。 有关详细信息,请参阅 合并日期和时间表示形式。
生产注意事项
对于生产工作负荷,请遵循以下做法:
- 将升级阻止视为安全机制,而不是故障状态。
- 首选 API 迁移而不是强制绕过。
- 利用计划维护窗口并进行升级前检查。
- 持续监控已弃用 API 的使用情况,以避免在最后时刻升级受阻。
相关内容
本文介绍了如何在 API 中断性变更时自动停止 AKS 群集升级。 若要详细了解 AKS 群集的更多升级选项,请参阅 Azure Kubernetes 服务 (AKS) 群集的升级选项。