Loading
0

kubernetes/k8s硬亲和性和软亲和性是什么如何使用

技术小学生微信公众号
腾讯云服务器大促销。
华为服务器

前言:本文章介绍k8s中,什么是节点亲和性以及硬亲和性和软亲和性及反亲和性的说明和使用方法。
说明:完整的k8s教程可访问https://blog.tag.gg/showinfo-3-36255-0.html
节点亲和性nodeAffinity和之前nodeSelector基本一样,根据节点上标签约束对pod调度到哪些节点上。(功能更强大)
硬亲和性:requiredDuringSchedulingIgnoredDuringExecution (硬限制, 同nodeSelector),如果不满足则不进行调度。
软亲和性:preferredDuringSchedulingIgnoredDuringExecution(软限制)可以满足也可以不满足,尝试满足。不满足的情况下会调度的不符合条件的Node上。
范例:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key:
env_role
            operator: In
            values:
            - dev
            - test

      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1               //取值范围1-100
        preference:
          matchExpressions:
          - key:
env_role2
            operator: In
            values:
            -
devs
  containers:
  - name: nginx
    image: docker.io/nginx

以上规则表达的意思是,该 Pod 只能被调度到拥有 env_role=dev 或者 env_role=test 标签的节点上,   operator: In 表示在什么里面选择,比如上面实例是指在devtest上调度,(如果硬亲和力中没有满足条件,则会一直等待状态)选择其中在满足之前标签条件的同时更倾向于调度在拥有 env_role2=devs 标签的节点上。
标签判断的操作符除了使用In之外,还可以使用NotIn、Exists、DoesNotExist、Gt、Lt 操作符, 也可以使用 NotIn 、 DoesNotExist 来实现反亲和性,也可以通过 node taints 来实现。
    In:label 的值在某个列表中
    NotIn:label 的值不在某个列表中
    Gt:label 的值大于某个值
    Lt:label 的值小于某个值
    Exists:某个 label 存在
    DoesNotExist:某个 label 不存在
1)如果同时指定 nodeSelector 和 nodeAffinity ,两者同时满足才会被调度。
2)如果指定多个nodeSelectorTerms,则只要满足其中一个条件,就会被调度到相应的节点上。
3)如果指定多个matchExpressions,则所有的条件都必须满足,才会调度到对应的节点。
什么是反亲和性:
添加参数:podAntiAffinity 或 NotIn 、 DoesNotExist则是反亲和力。
技术小学生微信公众号
华为服务器
腾讯云服务器大促销。

声明:站长码字很辛苦啊,转载时请保留本声明及附带文章链接:https://blog.tag.gg/showinfo-3-36273-0.html
亲爱的:若该文章解决了您的问题,可否收藏+评论+分享呢?
上一篇:解决kubernetes/k8s污点及污点容忍是什么?如何添加污点。
下一篇:kubernetes/k8s删除Pod以及删除Service方法