第21章:Kubernetes高级调度

1. Node维度

  • nodeSelector

  • nodeAffinity

    (1)requiredDuringSchedulingIgnoredDuringExecution,和nodeSelector类似,强制(硬)亲和,但功能会比之更加丰富;注意:-nodeSelectorTerms-matchExpressions;
    示例如下:

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: topology.kubernetes.io/zone
            operator: In
            values:
            - antarctica-east1
            - antarctica-west1
  containers:
  - name: with-node-affinity
    image: registry.k8s.io/pause:2.0

(2)preferredDuringSchedulingIgnoredDuringExecution,尽力调度到符合的,但不是强制(软)亲和;注意:-weight-preference-matchExpression;
示例如下:

apiVersion: v1
kind: Pod
metadata:
  name: with-affinity-anti-affinity
spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: label-1
            operator: In
            values:
            - key-1
      - weight: 50
        preference:
          matchExpressions:
          - key: label-2
            operator: In
            values:
            - key-2
  containers:
  - name: with-node-affinity
    image: registry.k8s.io/pause:2.0

参考链接:Assigning Pods to Nodes

2. Pod维度

区分说明:Pod亲和性和反亲和性,是基于已经在某节点上运行的Pod的标签来约束Pod可以调度到哪些节点上,而不是节点的标签;

  • Pod Affinity
    一般是为了高速通信的需求,让Pod最好位于同一个节点、同一个机架、同一个区域;
  • Pod Anti-affinity

注意:Pod 亲和性和反亲和性需要相当的计算量,因此在大规模集群中会显著降低调度速度。 我们不建议在包含超过100个节点的集群中使用这类设置。

规则说明:如果拓扑键T(topologyKey)上已经运行了一个或者多个符合满足规则R的Pod,那么这个Pod应该亲和性运行在拓扑键T上,或者反亲和性不应该运行在拓扑键T上;这里的T可以看是节点(Node)、机架(Rack)、区域(Zone)等;

示例如下:

apiVersion: v1
kind: Pod
metadata:
  name: with-pod-affinity
spec:
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: security
            operator: In
            values:
            - S1
        topologyKey: topology.kubernetes.io/zone
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: security
              operator: In
              values:
              - S2
          topologyKey: topology.kubernetes.io/zone
  containers:
  - name: with-pod-affinity
    image: registry.k8s.io/pause:2.0

参考链接:Assigning Pods to Nodes

3. 综合维度(Node+Pod)

键值属性数据:

  • Label
  • Annotation
  • Taints(Node)或Toleration(Pod)

(1) Taints-Effect

  • NoSchedule,仅影响调度过程,对于已有Pod无影响;(如节点新增Pod无法容忍的污点,不会发生驱逐)
  • NoExecute,既影响调度过程,也影响已有Pod;(如节点新增Pod无法容忍的污点,必定发生驱逐)
  • PreferNoSchedule,即使Pod上没有节点的容忍,也可以调度到该节点上;

给节点添加污点的命令示例:

kubectl taint nodes node1 key1=value1:NoSchedule

给节点移除污点的命令示例:

kubectl taint nodes node1 key1=value1:NoSchedule-

(2) Tolerations-Operator

  • Exists,需要Pod的Tolerations的key和effect和Node的Taints的完全匹配;(存在性判断)
    示例如下:
tolerations:
- key: "key1"  
  operator: "Exists"  
  effect: "NoSchedule"
  • Equal,需要Pod的Tolerations的key、value和effect和Node的Taints的完全匹配;(等值比较)
    示例如下:
tolerations:
- key: "key1"  
  operator: "Equal"  
  value: "value1"  
  effect: "NoSchedule"

注意:如果key或者effect为空,则意味着任意皆可匹配;

参考链接:Taints and Tolerations

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Davidwatt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值