我試圖讓我的部署只將副本部署到沒有運行rabbitmq(這正在運行)并且還沒有我正在部署的pod(不作業)的節點。
我似乎無法讓它發揮作用。例如,如果我有 3 個節點(2 個帶有 app.kubernetes.io/part-of=rabbitmq 標簽),那么所有 2 個副本都會部署到其余節點。這就像部署在確定反關聯性時沒有考慮到它們自己創建的 pod。我想要的狀態是它只部署 1 個 pod,另一個不應該被安排。
kind: Deployment
metadata:
name: test-scraper
namespace: scrapers
labels:
k8s-app: test-scraper-deployment
spec:
replicas: 2
selector:
matchLabels:
app: testscraper
template:
metadata:
labels:
app: testscraper
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/part-of
operator: In
values:
- rabbitmq
- key: app
operator: In
values:
- testscraper
namespaces: [scrapers, rabbitmq]
topologyKey: "kubernetes.io/hostname"
containers:
- name: test-scraper
image: #######:latest```
uj5u.com熱心網友回復:
我認為那是因為matchExpressions清單的一部分,它要求 pod 需要同時具有標簽 app.kubernetes.io/part-of: rabbitmq 并 app: testscraper滿足反關聯規則。
根據您提供的部署 yaml,這些 pod 將只有app: testscraper但沒有 pp.kubernetes.io/part-of: rabbitmq因此兩個副本都被安排在同一個節點上
來自檔案(要求是 ANDed。):
kubectl explain pod.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution.labelSelector
...
FIELDS:
matchExpressions <[]Object>
matchExpressions is a list of label selector requirements.
**The requirements are ANDed.**
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/401720.html
標籤:Kubernetes Kubernetes-pod kubernetes-部署
