最新GKE Autopilot集群是否不支持cluster-autoscaler.kubernetes.io/safe-to-evict注解?
问题解答
该限制是否为GKE Autopilot的近期更新?
是,该限制是GKE Autopilot 1.21版本正式上线的强制策略。
GKE Autopilot的核心设计是托管全集群的节点生命周期、扩缩容、调度逻辑,cluster-autoscaler.kubernetes.io/safe-to-evict=false注解会干扰Autopilot的节点维护、缩容等正常流程,因此1.21及以上版本的Autopilot集群通过Policy Controller做了准入拦截,禁止工作负载配置该注解。你使用的1.20版本旧集群尚未上线该强制策略,因此可以正常运行。
无需移除注解的可行解决方案
因为注解硬编码在Helm模板中,你可以通过以下方案绕过限制,无需修改原Helm chart源码:
- Helm参数覆盖注解值:部署时通过
--set参数强制覆盖该注解的取值,优先级高于模板内的硬编码配置。如果注解配置在CronJob的Job spec层级,执行命令时添加参数:
如果注解配置在Pod模板层级,调整参数对应的YAML路径即可。--set cronjob.annotations."cluster-autoscaler\.kubernetes\.io/safe-to-evict"=true - 配置Policy Controller豁免规则:给目标CronJob或者其所在的命名空间添加标签
policycontroller.gke.io/ignore: "true",即可跳过该准入策略的校验。注意该配置会让对应资源/命名空间豁免所有Policy Controller的规则校验,建议仅在必要场景使用。 - Kustomize后置补丁修改:如果你的部署流程使用Helm + Kustomize组合,可以编写Kustomize补丁文件,在Helm渲染完成后覆盖或删除该注解,无需修改原Chart源码。
额外说明
如果你配置该注解的需求是避免运行中的Job被自动驱逐,GKE Autopilot本身对普通非抢占式Job有原生保护逻辑:节点缩容或维护时,会主动等待Job运行完成后再处理对应节点,不需要额外配置该注解即可保障Job运行稳定性。
内容的提问来源于stack exchange,提问作者James Evans
相关产品推荐
相关产品推荐

