当我试图将podAffinity附加到官方气流舵图的Scheduler部署时,我遇到了一种奇怪的行为,比如:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- postgresql
topologyKey: "kubernetes.io/hostname"通过一个示例部署,podAffinity应该将其“连接”到:
metadata:
name: {{ template "postgresql.fullname" . }}
labels:
app: postgresql
chart: {{ template "postgresql.chart" . }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
serviceName: {{ template "postgresql.fullname" . }}-headless
replicas: 1
selector:
matchLabels:
app: postgresql
release: {{ .Release.Name | quote }}
template:
metadata:
name: {{ template "postgresql.fullname" . }}
labels:
app: postgresql
chart: {{ template "postgresql.chart" . }}其结果是:
NotTriggerScaleUp: pod didn't trigger scale-up: 1 node(s) didn't match pod affinity/anti-affinity, 1 node(s) didn't match pod affinity rules但是,将相同的podAffinity 配置应用于the服务器部署是很好的。另外,将示例部署更改为vanilla会在结果中显示出来。
这似乎不是任何资源限制的问题,因为我已经尝试了各种信任,每次都有相同的结果。除了节点关联之外,我不使用任何自定义配置。
有没有人遇到过同样的情况,或者知道我可能做错了什么?
设置:
与气流图的链接:
发布于 2021-11-25 10:01:30
我已经在我的GKE集群上重新创建了这个场景,并且我决定提供一个Community答案,以表明调度器上的调度器可以像预期的那样工作。我将一步一步地描述我如何在下面测试它。
values.yaml文件中,我按照以下方式配置了podAffinity:$ cat values.yaml
...
# Airflow scheduler settings
scheduler: affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- postgresql
topologyKey: "kubernetes.io/hostname"
...values.yaml。$ helm install airflow apache-airflow/airflow --values values.yaml过一会儿,我们可以检查scheduler的状态。
$ kubectl get pods -owide | grep "scheduler"
airflow-scheduler-79bfb664cc-7n68f 0/2 Pending 0 8m6s <none> <none> <none> <none>app: postgresql标签创建了一个示例部署:$ cat test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: postgresql
name: test
spec:
replicas: 1
selector:
matchLabels:
app: postgresql
template:
metadata:
labels:
app: postgresql
spec:
containers:
- image: nginx
name: nginx
$ kubectl apply -f test.yaml
deployment.apps/test created
$ kubectl get pods --show-labels | grep test
test-7d4c9c654-7lqns 1/1 Running 0 2m app=postgresql,...scheduler是否已经成功创建:$ kubectl get pods -o wide | grep "scheduler\|test"
airflow-scheduler-79bfb664cc-7n68f 2/2 Running 0 14m 10.X.1.6 nodeA
test-7d4c9c654-7lqns 1/1 Running 0 2m27s 10.X.1.5 nodeA此外,关于pod affinity和pod anti-affinity的详细信息可以在理解荚亲和力文档中找到:
荚亲和力和荚反亲和力允许您根据其他荚上的键/值标签来约束您的荚的哪些节点有资格被调度。 如果新荚上的标签选择器与当前荚上的标签匹配,则pod亲缘关系可以告诉调度程序在同一节点上定位一个新荚。 如果新荚上的标签选择器与当前荚上的标签匹配,则pod反亲和力可以阻止调度程序在同一个节点上定位一个新的荚,因为它具有相同的标签。
https://stackoverflow.com/questions/69802881
复制相似问题