我在 kubernetes 中有 20 个工作节点 cassandra 集群,其中每个 pod 都调度在单独的工作节点中,当多个 pod 重新启动时,如果达到 cpu/内存等阈值限制,则 pod 不会每次都调度到同一个工作节点。为了解决这个问题,我必须强行杀死每个 Pod,一旦全部杀死,我就必须将副本更改回正常状态
是否有任何可能的解决方案可以让我每次都将 pod 调度到同一个节点。在有状态集中,Pod 名称每次都是固定的。
我尝试设置 nodeaffnity ,以了解它如何因 statefulset 而未执行。我正在使用部署类型来安排有状态集。
我建议不要在 Kubernetes 中每次都强制 pod 到同一个节点,因为当节点由于某种原因发生故障时,这可能会导致问题,并且现在无法调度 pod,因为您试图强制它们部署在某个节点上。机器停机了。
注意事项,有两种方法可以做到这一点:
使用 Daemonset Pod 可以保证每个节点都是唯一的。唯一的缺点是你失去了可预测的 pod 名称和可预测的 pod 替换
在 StatefulSet 规范中定义一个 nodeSelector,指定所需的节点标签(例如,硬件类型、存储容量)。这会影响日程安排,但不能保证安置。 将 podAntiAffinity 与 PreferredDuringScheduling pod 拓扑传播约束结合使用:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: <app-name>
operator: In
values:
- <your-app-name>
topologyKey: "kubernetes.io/hostname"
这鼓励在具有相同应用程序名称标签的不同节点上调度 Pod,但在首选节点不可用时允许灵活性。