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

如何实现redis-sentinel Pod在Kubernetes不同节点上分散部署?

问题根因

当前配置使用的是preferredDuringSchedulingIgnoredDuringExecution软反亲和规则,且权重仅为1,这类规则仅作为调度器的参考偏好,不做强制约束。当节点剩余资源满足Pod运行要求时,调度器会综合资源余量、镜像缓存等其他打分项做决策,完全可能将多个同标签Pod调度到同一节点,这就是3个Pod堆积在单节点的直接原因。

调整方案

你的集群有10个节点,远大于4个副本的规模,直接将软反亲和替换为强制硬反亲和规则即可保证每个Redis Pod分散到不同节点,不需要修改Chart模板,直接在你的自定义Helm Chart的values.yaml中给Bitnami Redis依赖传入如下覆盖配置即可:

# 以下配置项对应Bitnami Redis 15.7.0版本的参数,key名与你声明依赖时的alias保持一致,默认alias为redis
redis:
  replicaCount: 4 # 保持原有副本数配置
  sentinel:
    enabled: true # 保持原有sentinel启用配置
  # 替换原有亲和性配置为强制Pod反亲和
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchLabels:
            app.kubernetes.io/component: node
            app.kubernetes.io/instance: myapp
            app.kubernetes.io/name: redis
        namespaces:
        - test
        topologyKey: kubernetes.io/hostname
操作注意事项
  • 配置修改后执行helm upgrade生效即可。由于Redis节点是StatefulSet部署,为避免升级时自动滚动重启触发主从切换影响业务,可追加--strategy=OnDelete参数,升级后手动逐个删除旧Pod,等待新Pod调度到独立节点、集群状态同步完成后再删除下一个旧Pod。
  • 若你担心后续集群节点故障、可用节点数不足时硬反亲和会导致Pod一直处于Pending状态,也可以保留软反亲和模式,但需要将权重调整到最大值100,不过该模式仅能尽可能提升分散调度的概率,无法100%保证Pod不落在同一节点,对数据可靠性要求高的场景优先使用硬反亲和。
  • 反亲和是Pod级别的调度规则,你当前每个Pod内同时运行Redis、Sentinel两个容器属于同Pod内容器,不会被反亲和规则拦截,不需要额外调整容器相关配置。

内容的提问来源于stack exchange,提问作者Martín C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:57:21