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

是否存在ReplicaSet与DaemonSet的混合方案?维持2个Pod分属不同节点

实现始终2个Pod且分布在不同节点的方案

当然有可行的方案!你完全不需要混合ReplicaSet和DaemonSet——其实用ReplicaSet搭配Pod反亲和性就能完美满足你的需求,而且配置起来很直观。

核心思路

用ReplicaSet保证始终有2个Pod处于运行状态,同时通过Pod反亲和性规则,强制要求新调度的Pod不能和已有的同类型Pod部署在同一个节点上。这样既满足了副本数要求,又严格保证了节点分散。

具体配置示例

下面是一个完整的ReplicaSet配置yaml,关键部分是podAntiAffinity规则:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-app-replicaset
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - my-app
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: my-app-container
        image: your-image:tag
        ports:
        - containerPort: 80

配置说明

  • replicas: 2:直接指定要维持的Pod数量,ReplicaSet会自动监控并保证这个数量始终达标。
  • podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution:这是强制调度约束,K8s必须满足该条件才能完成Pod调度:
    • labelSelector:匹配所有带有app: my-app标签的Pod(也就是我们自己的业务Pod)
    • topologyKey: "kubernetes.io/hostname":明确要求“新Pod不能和匹配到的Pod部署在同一个节点上”

额外注意事项

  • 你的集群有10个节点,完全满足调度冗余需求——就算其中某个节点故障,ReplicaSet会自动在其他空闲节点上重建Pod,依然保持2个Pod且分布在不同节点的状态。
  • 如果你的业务是有状态服务,也可以把ReplicaSet换成StatefulSet,上述反亲和性规则完全通用。
  • 要是你担心节点资源不足导致调度失败,可以配合节点亲和性或污点容忍规则进一步缩小调度范围,但对你的场景来说,基础的反亲和性配置已经足够解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:42:28