You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE中如何避免DaemonSet被集群自动扩缩容组件驱逐?

GKE环境下避免DaemonSet被集群自动扩缩容组件驱逐的可行方案

你使用的上游cluster-autoscaler注解在部分版本的GKE托管集群中不会生效,属于GKE侧的适配差异,可通过以下方法解决:

  • 配置高优先级Pod优先级类
    cluster-autoscaler默认不会驱逐优先级高于2000000000的Pod,你可以自定义高优先级类绑定到DaemonSet的Pod模板:
    1. 先创建PriorityClass资源:
    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: ds-no-evict-priority
    value: 2000001000
    globalDefault: false
    description: "用于DaemonSet Pod,避免被集群自动扩缩容组件驱逐"
    
    1. 在DaemonSet的spec.template.spec字段下新增优先级配置:
    priorityClassName: ds-no-evict-priority
    
    如果你部署的DaemonSet处于kube-system命名空间,也可以直接使用GKE内置的system-cluster-critical或system-node-critical优先级类,无需自行创建。
  • 为运行目标DaemonSet的节点添加缩容禁用注解
    给节点添加注解cluster-autoscaler.kubernetes.io/scale-down-disabled: "true"后,cluster-autoscaler会直接跳过该节点的缩容逻辑,节点上所有Pod都不会被驱逐。你可以手动给节点打注解,也可以部署一个辅助DaemonSet自动检测节点上是否运行了目标DaemonSet Pod,匹配成功后自动给节点添加该注解。
  • 给DaemonSet Pod配置本地临时存储
    GKE的cluster-autoscaler默认开启了--skip-nodes-with-local-storage=true参数,不会缩容运行了带有本地存储Pod的节点。你可以在DaemonSet的Pod模板中新增emptyDir类型的临时存储挂载,即可触发该规则:
    1. 在spec.template.spec.volumes下新增卷配置:
    volumes:
    - name: local-tmp
      emptyDir: {}
    
    1. 在对应容器的volumeMounts下新增挂载配置:
    volumeMounts:
    - name: local-tmp
      mountPath: /tmp
    
    注意该方案下emptyDir内的数据会在Pod重建时清空,请勿在该路径下存储需要持久化的数据。

内容的提问来源于stack exchange,提问作者Fulo Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:48:03