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

Kubernetes Deployment节点调度配置及Ingress-Nginx Helm Chart适配咨询

定制Kubernetes Deployment调度策略及Ingress-Nginx适配方案

一、Deployment YAML配置

要实现目标调度逻辑,核心依赖Pod拓扑分布约束(TopologySpreadConstraints),配合集群自动扩缩容(Cluster Autoscaler)处理节点不足的场景。以下是满足需求的Deployment配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-app
spec:
  replicas: 4 # 可根据实际需求调整副本数
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      topologySpreadConstraints:
        # 约束1:优先在现有节点均衡分布Pod
        - maxSkew: 1
          topologyKey: kubernetes.io/hostname
          whenUnsatisfiable: DoNotSchedule
          labelSelector:
            matchLabels:
              app: sample-app
        # 约束2:副本数>2时必须分布在至少2个节点,节点不足时触发扩容
        - maxSkew: 1
          topologyKey: kubernetes.io/hostname
          whenUnsatisfiable: ScheduleAnyway
          labelSelector:
            matchLabels:
              app: sample-app
          minDomains: 2
          nodeTaintsPolicy: HonorTaints
      containers:
        - name: sample-container
          image: nginx:alpine
          ports:
            - containerPort: 80

配置逻辑说明

  • 第一个拓扑约束:通过maxSkew:1保证Pod在节点间尽可能均衡分布,当无法满足均衡条件时暂不调度,对应副本数3/4时优先利用现有节点的需求。
  • 第二个拓扑约束:minDomains:2强制副本数>2时Pod必须分布在至少2个节点;若当前仅1个节点可用,该约束会导致Pod处于Pending状态,此时Cluster Autoscaler会检测到Pending Pod并自动扩容节点。
  • 节点自动扩容需提前部署Cluster Autoscaler,并配置好节点组的扩缩容规则。

二、Ingress-Nginx Helm Chart适配

要给Ingress-Nginx的Pod应用相同调度逻辑,只需在Helm安装/升级时通过配置传递拓扑分布约束即可,以下提供两种实现方式:

方式1:通过自定义values.yaml配置

创建custom-ingress-values.yaml文件:

controller:
  replicaCount: 4
  podLabels:
    app: ingress-nginx
  topologySpreadConstraints:
    - maxSkew: 1
      topologyKey: kubernetes.io/hostname
      whenUnsatisfiable: DoNotSchedule
      labelSelector:
        matchLabels:
          app: ingress-nginx
    - maxSkew: 1
      topologyKey: kubernetes.io/hostname
      whenUnsatisfiable: ScheduleAnyway
      labelSelector:
        matchLabels:
          app: ingress-nginx
      minDomains: 2
      nodeTaintsPolicy: HonorTaints

执行安装/升级命令:

helm upgrade --install ingress-nginx ingress-nginx \
  --namespace ingress-nginx --create-namespace \
  -f ./custom-ingress-values.yaml

方式2:命令行直接传递参数

无需编写values文件,直接通过--set参数配置:

helm upgrade --install ingress-nginx ingress-nginx \
  --namespace ingress-nginx --create-namespace \
  --set controller.replicaCount=4 \
  --set controller.topologySpreadConstraints[0].maxSkew=1 \
  --set controller.topologySpreadConstraints[0].topologyKey=kubernetes.io/hostname \
  --set controller.topologySpreadConstraints[0].whenUnsatisfiable=DoNotSchedule \
  --set controller.topologySpreadConstraints[0].labelSelector.matchLabels.app=ingress-nginx \
  --set controller.topologySpreadConstraints[1].maxSkew=1 \
  --set controller.topologySpreadConstraints[1].topologyKey=kubernetes.io/hostname \
  --set controller.topologySpreadConstraints[1].whenUnsatisfiable=ScheduleAnyway \
  --set controller.topologySpreadConstraints[1].labelSelector.matchLabels.app=ingress-nginx \
  --set controller.topologySpreadConstraints[1].minDomains=2 \
  --set controller.topologySpreadConstraints[1].nodeTaintsPolicy=HonorTaints

补充说明

  • 节点自动扩容同样依赖Cluster Autoscaler,需确保已部署并正确配置节点组的扩缩容阈值。
  • 若Ingress-Nginx使用DaemonSet模式,需改为Deployment模式(默认即为Deployment)才能配置副本数和拓扑约束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:05:12