云其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > 云其它 > k8s设置非强一致反亲和性

k8s设置非强一致反亲和性示例

作者:ponponon

这篇文章主要为大家介绍了k8s设置非强一致反亲和性示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Q:如何设置反亲和性

尽可能让 pod 部署在不同的 node 上,如果需要部署的pod数大于节点数,也可以在一个节点上部署多个 pod,如何设置?

A:要设置反亲和性(PodAntiAffinity),以尽可能让Pod部署在不同的节点上,但允许多个Pod在一个节点上部署,您可以使用适当的PodAntiAffinity规则。这通常涉及到使用适当的标签和拓扑域。

以下是如何设置这样的反亲和性规则的一般步骤:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100  # 设置优先级
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: "app"
              operator: In
              values:
              - my-app
          topologyKey: "kubernetes.io/hostname"  # 使用节点的主机名标签,或者您设置的标签

上述示例中,我们创建了一个PodAntiAffinity规则,该规则使用preferredDuringSchedulingIgnoredDuringExecution字段,这表示这是一个"优先级规则",而不是绝对必需的规则。该规则要求不同Pod的my-app标签值必须匹配,但它们不能调度到相同的节点上,使用节点的主机名标签(kubernetes.io/hostname)作为拓扑域键来实现这一点。

部署Pod

当您部署多个Pod时,Kubernetes调度器将根据反亲和性规则尽力确保它们不会在相同的节点上调度。如果有足够的节点可用,它们可以分布在不同的节点上,以满足反亲和性规则。如果节点数量少于Pod数量,一些Pod可能需要共享节点,但反亲和性规则会尽力确保它们分布在尽可能多的不同节点上。

请注意,设置preferredDuringSchedulingIgnoredDuringExecution而不是requiredDuringSchedulingIgnoredDuringExecution允许一些Pod仍然可以共享节点,如果没有足够的节点可供选择。这可以帮助在节点资源有限的情况下仍然尽量满足反亲和性规则。

确保您的集群中有足够的节点来容纳您的Pod,以便反亲和性规则可以正常工作。如果节点资源不足,Pod可能会被迫在同一节点上调度,这可能会违反反亲和性规则。

Q:帮我修改

affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution: #设置调度策略。
      - labelSelector:
          matchExpressions:
            - key: app
              operator: In
              values:
                - imdb-match-api
        topologyKey: kubernetes.io/hostname

A: 您提供的配置是使用requiredDuringSchedulingIgnoredDuringExecution,这表示Pod之间的反亲和性是强制的,而且如果违反规则,Pod将不会被调度。

如果您希望Pod之间的反亲和性是强制的,但仍然允许多个Pod在一个节点上部署,您可以使用preferredDuringSchedulingIgnoredDuringExecution,这样如果没有足够的节点来满足规则,Pod仍然可以共享节点。

修改版本

以下是您的配置的修改版本:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100  # 设置优先级
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - imdb-match-api
          topologyKey: kubernetes.io/hostname

这将创建一个"优先级规则",它要求不同Pod的imdb-match-api标签值必须匹配,但它们不能调度到相同的节点上。如果没有足够的节点来满足这一规则,Pod仍然可以共享节点,但反亲和性规则将尽力确保它们分布在尽可能多的不同节点上。

以上就是k8s设置非强一致反亲和性示例的详细内容,更多关于k8s设置非强一致反亲和性的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文