美文网首页
Pod 拓扑分布约束 (Pod Topology Spread

Pod 拓扑分布约束 (Pod Topology Spread

作者: Joening | 来源:发表于2023-10-16 18:41 被阅读0次

    Pod 拓扑分布约束 (Pod Topology Spread Constraints) 介绍

    使用 topologySpreadConstraints将 Pod 最大程度上均匀的打散调度到各个节点上:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          topologySpreadConstraints:
          - maxSkew: 1
            topologyKey: kubernetes.io/hostname
            whenUnsatisfiable: DoNotSchedule
            labelSelector:
            - matchLabels:
                app: nginx
          containers:
          - name: nginx
            image: nginx
    

    topologyKey: 与 podAntiAffinity 中配置类似。
    labelSelector: 与 podAntiAffinity 中配置类似,只是这里可以支持选中多组 pod 的 label。
    maxSkew: 必须是大于零的整数,表示能容忍不同拓扑域中 Pod 数量差异的最大值。这里的 1 意味着只允许相差 1 个 Pod。
    whenUnsatisfiable: 指示不满足条件时如何处理。DoNotSchedule 不调度 (保持 Pending),类似强反亲和;ScheduleAnyway 表示要调度,类似弱反亲和;
    以上配置连起来解释: 将所有 nginx 的 Pod 严格均匀打散调度到不同节点上,不同节点上 nginx 的副本数量最多只能相差 1 个,如果有节点因其它因素无法调度更多的 Pod (比如资源不足),那么就让剩余的 nginx 副本 Pending。

    所以,如果要在所有节点中严格打散,通常不太可取,可以加下 nodeAffinity,只在部分资源充足的节点严格打散:

        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: io
                    operator: In
                    values:
                    - high
          topologySpreadConstraints:
          - maxSkew: 1
            topologyKey: kubernetes.io/hostname
            whenUnsatisfiable: DoNotSchedule
            labelSelector:
            - matchLabels:
                app: nginx
    

    或者类似弱反亲和, 将 Pod 尽量均匀的打散调度到各个节点上,不制 (DoNotSchedule 改为 ScheduleAnyway):

        spec:
          topologySpreadConstraints:
          - maxSkew: 1
            topologyKey: kubernetes.io/hostname
            whenUnsatisfiable: ScheduleAnyway
            labelSelector:
            - matchLabels:
                app: nginx
    

    相关文章

      网友评论

          本文标题:Pod 拓扑分布约束 (Pod Topology Spread

          本文链接:https://www.haomeiwen.com/subject/cgxfidtx.html