Cassandra 集群 Pod 的有状态集在重新启动时不会调度到同一节点

问题描述 投票:0回答:1

我在 kubernetes 中有 20 个工作节点 cassandra 集群,其中每个 pod 都调度在单独的工作节点中,当多个 pod 重新启动时,如果达到 cpu/内存等阈值限制,则 pod 不会每次都调度到同一个工作节点。为了解决这个问题,我必须强行杀死每个 Pod,一旦全部杀死,我就必须将副本更改回正常状态

是否有任何可能的解决方案可以让我每次都将 pod 调度到同一个节点。在有状态集中,Pod 名称每次都是固定的。

我尝试设置 nodeaffnity ,以了解它如何因 statefulset 而未执行。我正在使用部署类型来安排有状态集。

kubernetes containers openshift kubernetes-statefulset
1个回答
0
投票

我建议不要在 Kubernetes 中每次都强制 pod 到同一个节点,因为当节点由于某种原因发生故障时,这可能会导致问题,并且现在无法调度 pod,因为您试图强制它们部署在某个节点上。机器停机了。

注意事项,有两种方法可以做到这一点:

  1. 使用守护进程
  2. 使用 pod 反亲和性和节点选择器

守护进程:

使用 Daemonset Pod 可以保证每个节点都是唯一的。唯一的缺点是你失去了可预测的 pod 名称和可预测的 pod 替换

使用 NodeSelector 和 PodAntiAffinity 进行调度:

在 StatefulSet 规范中定义一个 nodeSelector,指定所需的节点标签(例如,硬件类型、存储容量)。这会影响日程安排,但不能保证安置。 将 podAntiAffinity 与 PreferredDuringScheduling pod 拓扑传播约束结合使用:

podAntiAffinity:
  preferredDuringSchedulingIgnoredDuringExecution:
  - podAffinityTerm:
      labelSelector:
        matchExpressions:
        - key: <app-name>
          operator: In
          values:
          - <your-app-name>
      topologyKey: "kubernetes.io/hostname"

这鼓励在具有相同应用程序名称标签的不同节点上调度 Pod,但在首选节点不可用时允许灵活性。

© www.soinside.com 2019 - 2024. All rights reserved.