是否有一种方法可以告诉Kubernetes永远不要在同一节点上运行两个Pod,例如我有两个Pod副本,我希望它们始终分布在zone1/zone2
上,并且永远不要在同一区域中。< / p>
apiVersion: app/v1
kind: Deployment
metadata:
name: testApp
labels:
app: testApp-front
namespace:
spec:
replicas: 2
selector:
matchLabels:
app: testApp-front
template:
metadata:
labels:
app: testApp-front
spec:
nodeSelector:
failure-domain.beta.kubernetes.io/zone: zone1
答案 0 :(得分:1)
似乎可以使用Interpod Affinity完成:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
spec:
selector:
matchLabels:
app: testApp-front
replicas: 3
template:
metadata:
labels:
app: testApp-front
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- testApp-front
topologyKey: "kubernetes.io/hostname"
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- store
topologyKey: "kubernetes.io/hostname"
containers:
- name: web-testApp-front
image: nginx:1.12-alpine
您可以看到完整的example here
答案 1 :(得分:1)
我认为您需要“吊舱抗亲和力”概念。该群集位于一个群集内,以确保pod不在一个工作节点上。 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
答案 2 :(得分:1)
非常简单,您可以使用守护进程集来运行不同节点中的每个Pod,或者就像其他人所说的那样,您可以使用Pod Anti-Affinity
答案 3 :(得分:0)
k8s调度程序是一款智能软件。
Kubernetes调度程序将首先根据您的亲和力/反亲和力/资源限制/等来确定可以部署Pod的所有可能节点。
然后,调度程序将找到可以部署Pod的最佳节点。 如果可能的话,调度程序将自动将Pod调度到单独的可用区域和单独的节点上。
P.S。 如果您从不希望将Pod的2个副本放在同一节点上,请定义一个反关联性规则。