Kubernetes 中特定命名空间的 Pod 亲和性

deb*_*bek 5 kubernetes google-kubernetes-engine

我想将我的 Pod 部署在特定的命名空间中。我考虑了 Pod Affinity,但找不到如何选择特定命名空间的解决方案。有人做吗?

lev*_*ich 7

作为反关联性的一部分,您可以允许namespaceSelector: {}匹配labelSelector来自所有命名空间的 pod 上的标签,而不仅仅是 pod 自己的命名空间。

源代码中有关 NamespaceSelector 的注释: https://github.com/kubernetes/kubernetes/blob/287888b191968198679159580b1bb76b529aa8c0/staging/src/k8s.io/api/core/v1/types.go#L2927

例子

          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
                - weight: 100
                  podAffinityTerm:
                    labelSelector:
                      matchExpressions:
                        - key: app.kubernetes.io/name
                          operator: In
                          values:
                            - foobar
                    topologyKey: "kubernetes.io/hostname"
                    namespaceSelector: {}
Run Code Online (Sandbox Code Playgroud)

编辑:pod亲和力的namespaceSelctor位于Alpha v1.21中

功能讨论:https://github.com/kubernetes/kubernetes/issues/68827


Abd*_*UMI 1

Pod 反亲和性是告诉 Kubernetes 在比运行其他 Pod Y 的节点更远的节点(机器)中调度(运行)这个 Pod X。

所以 :

  • X 是什么?
  • Y 是什么?
  • “远”的标准是什么?

看这个例子:

apiVersion: v1
kind: Pod
metadata:
  name: pod-x
spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: y-key
              operator: In
              values:
              - y-value
          topologyKey: failure-domain.beta.kubernetes.io/zone
Run Code Online (Sandbox Code Playgroud)

在这个例子中:

  • X 是 pod-x
  • Y 是任何有标签的 Pod (y-key=y-value)
  • “距离”的标准是failure-domain.beta.kubernetes.io/zone

如果这一点很清楚,您将看到名称空间与反亲和力甚至亲和力无关。

查看官方文档也是一个很好的做法。