1
sniperking1234 2021-05-28 17:44:16 +08:00
使用 podAntiffinity
|
2
finian 2021-05-28 17:55:14 +08:00
`podAntiffinity` 是软满足(尽量满足),也可能会出现分布不均的情况。如果 K8s 是 1.18 及以上版本的话,用 `topologySpreadConstraints` 吧,并设置 `whenUnsatisfiable: DoNotSchedule`,这样能保证均匀分布
|
4
RudyS 2021-05-28 18:00:39 +08:00
topologySpreadConstraints
|
5
anubu 2021-05-28 18:19:49 +08:00
用 PodAntiAffinity 的 requiredDuringSchedulingIgnoredDuringExecution 。
topologySpreadConstraints 可能并不完全适用你的场景,maxSkew 为 1 在正常情况下可以满足你的要求,但如果某一节点宕机则会调度 2 个 Pod 到某一节点,可能导致 hostPath 内有状态数据异常。 |
6
farmer01 OP @anubu 我用的是 1.20.2 版本的,然后在 1.14.x 版本上是正常的,会自动调度到不同 node.
Helm 里面我也看了,确认了有这些: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: es-accobot-hkpf operator: In values: - es-accobot-hkpf podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - elasticsearch topologyKey: kubernetes.io/hostname |
7
finian 2021-05-28 19:02:22 +08:00
@anubu `podAntiffinity` 在正常情况下也可能会调度 2 个 Pod 到某一节点,它只是尽量满足约束条件,不是强制的。你说的某个节点宕机的情况下,在 `whenUnsatisfiable: DoNotSchedule` 设置下,不会出现 2 个 Pod 被调度到一个节点的情况(因为这时最大的 skew 为 2,不满足 maxSkew: 1 的约束),但是这时系统会停止调度(只部署了 2 个 Pod 在不同的节点,另外一个节点因为宕机无法调度)
|
8
anubu 2021-05-28 19:29:08 +08:00
|
9
swulling 2021-05-28 21:00:21 +08:00 via iPhone
|
10
finian 2021-05-28 21:42:42 +08:00
@swulling 你说得对。我错看成 preferredDuringSchedulingIgnoredDuringExecution 了。因为我们之前的场景是希望 Pod 均匀分布,且每个节点会多于一个,在 1.18 版本之前,只能使用 podAntiAffinity 的 preferredDuringSchedulingIgnoredDuringExecution,这时候是不能保证均匀分布的。后来 1.18 版本后才改成使用 topologySpreadConstraints
|
11
Illusionary 2021-05-29 00:10:36 +08:00
DaemonSet
|
12
wellsc 2021-05-29 00:12:39 +08:00 via iPhone
statefulSet 真的靠谱吗,目前还不敢尝试
|
13
lixiang2017 2021-05-29 03:35:36 +08:00 via Android
用的 DaemonSet 从来没出现过这种情况。
|