首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在库伯奈特,首选的荚间亲缘关系从未得到尊重。

在库伯奈特,首选的荚间亲缘关系从未得到尊重。
EN

Stack Overflow用户
提问于 2020-04-28 14:05:28
回答 2查看 185关注 0票数 0

我有一个jenkins吊舱,标签是app: jenkins-master

它驻留在jenkins命名空间中。

我希望部署的nginx吊舱(位于另一个名称空间,default上)与上面的吊舱并置。

因此,我在其规范中添加了以下内容:

代码语言:javascript
复制
spec:
  affinity:
    podAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          namespaces:
            - all
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - jenkins-master
          topologyKey: "kubernetes.io/os"

我有一个由8个节点组成的GKE集群。

在我创建/删除部署的5-6次中,nginx pod实际上从未将降落在与jenkins-master相同的节点上。

我知道这是preferred调度,但这种行为正常吗?

"v1.15.9-gke.24"开发GKE

编辑1:我已经按照下面几个答案中的建议更改了topologyKey: "kubernetes.io/hostname",但这也没有多大帮助。

编辑2:这些是为调度jenkins-master pod的节点分配的资源

代码语言:javascript
复制
  Resource                   Requests      Limits
  cpu                        1691m (43%)   5013m (127%)
  memory                     4456Mi (33%)  8902Mi (66%)

由于调度是基于请求的,所以我不明白下面的部署为什么不能配置,所以我提出的请求是最小的

代码语言:javascript
复制
resources:
  limits:
    memory: "1Gi"
    cpu: "100m"
   requests:
    memory: "100Mi"
    cpu: "50m"
EN

回答 2

Stack Overflow用户

发布于 2020-04-28 14:39:15

我认为您在使用topologyKey: "kubernetes.io/os"时犯了错误,如果您在集群中混合操作系统(例如:混合Linux和Windows节点),就会使用它。

您应该使用:topologyKey: "kubernetes.io/hostname",其中Kubelet用主机名填充这个标签。

票数 1
EN

Stack Overflow用户

发布于 2020-04-28 18:37:09

我假设您知道,topology指的是在集群初始化时自动给节点的一些标签。

因此,topology将节点分组为一个节点(通过这些标签),所以当您说topologyKey: "kubernetes.io/os"时,您是说选择一个属于这个组的节点,并在其上安排结荚。因为您的所有节点都有相同的操作系统,所以对调度程序来说,它是一个可以运行的有效节点。所以,是的,这是故意的行为。

注意,这仍然是一个首选项,但是如果有足够的资源,它仍然会尝试在正确的节点上调度。

您要做的是建议您使用omricoco;topologyKey: "kubernetes.io/hostname"。您需要让调度程序组按主机名,这样每个组只有一个节点,而要调度的吊舱将位于同一个节点上。

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

https://stackoverflow.com/questions/61482159

复制
相关文章

相似问题

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