首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将荚间亲和力应用于气流调度程序。

不能将荚间亲和力应用于气流调度程序。
EN

Stack Overflow用户
提问于 2021-11-01 21:17:02
回答 1查看 429关注 0票数 2

当我试图将podAffinity附加到官方气流舵图的Scheduler部署时,我遇到了一种奇怪的行为,比如:

代码语言:javascript
复制
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app 
            operator: In
            values:
            - postgresql
        topologyKey: "kubernetes.io/hostname"

通过一个示例部署,podAffinity应该将其“连接”到:

代码语言:javascript
复制
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" . }}

其结果是:

代码语言:javascript
复制
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会在结果中显示出来。

这似乎不是任何资源限制的问题,因为我已经尝试了各种信任,每次都有相同的结果。除了节点关联之外,我不使用任何自定义配置。

有没有人遇到过同样的情况,或者知道我可能做错了什么?

设置:

  • AKS簇
  • 气流舵图1.1.0
  • 气流1.10.15 (但我认为这不重要)
  • kubectl客户端(1.22.1)和服务器(1.20.7)

与气流图的链接:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-25 10:01:30

我已经在我的GKE集群上重新创建了这个场景,并且我决定提供一个Community答案,以表明调度器上的调度器可以像预期的那样工作。我将一步一步地描述我如何在下面测试它。

  1. values.yaml文件中,我按照以下方式配置了podAffinity
代码语言:javascript
复制
$ cat values.yaml
...
# Airflow scheduler settings
scheduler:  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - postgresql
        topologyKey: "kubernetes.io/hostname"
...
  1. 我已经使用带有指定气流,气流文件的Helm包管理器在Kubernetes集群上安装了values.yaml
代码语言:javascript
复制
$ helm install airflow apache-airflow/airflow --values values.yaml

过一会儿,我们可以检查scheduler的状态。

代码语言:javascript
复制
$ kubectl get pods -owide | grep "scheduler"
airflow-scheduler-79bfb664cc-7n68f   0/2     Pending   0          8m6s   <none>      <none>                                 <none>           <none>
  1. 我用app: postgresql标签创建了一个示例部署:
代码语言:javascript
复制
$ 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,...
  1. 最后,我们可以检查scheduler是否已经成功创建:
代码语言:javascript
复制
$ 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 affinitypod anti-affinity的详细信息可以在理解荚亲和力文档中找到:

荚亲和力和荚反亲和力允许您根据其他荚上的键/值标签来约束您的荚的哪些节点有资格被调度。 如果新荚上的标签选择器与当前荚上的标签匹配,则pod亲缘关系可以告诉调度程序在同一节点上定位一个新荚。 如果新荚上的标签选择器与当前荚上的标签匹配,则pod反亲和力可以阻止调度程序在同一个节点上定位一个新的荚,因为它具有相同的标签。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69802881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档