22-k8s中pod的调度-亲和性affinity

这篇具有很好参考价值的文章主要介绍了22-k8s中pod的调度-亲和性affinity。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一·、概述

        在k8s当中,“亲和性”分为三种,节点亲和性、pod亲和性、pod反亲和性;

亲和性分类 名称 解释说明
nodeAffinity 节点亲和性 通过【节点】标签匹配,用于控制pod调度到哪些node节点上,以及不能调度到哪些node节点上;(主角node节点)
podAffinity pod亲和性 通过【节点+pod】标签匹配,可以和哪些pod部署在同一个节点上(拓扑域);(主角是pod)
podAntiAffinity pod反亲和性 通过【节点+pod】标签匹配,与pod亲和性相反,就是和那些pod不在一个节点上(拓扑域);

二、nodeAffinity-节点亲和性

1,给k8s节点创建标签

[root@k8s231 ~]# kubectl label nodes k8s231 k8s=xinjizhiwa-01
node/k8s231 labeled
[root@k8s231 ~]# kubectl label nodes k8s232 k8s=xinjizhiwa-02
node/k8s232 labeled
[root@k8s231 ~]# kubectl label nodes k8s233 k8s=xinjizhiwa-03
node/k8s233 labeled

查看标签

[root@k8s231 dns]# kubectl get nodes --show-labels

22-k8s中pod的调度-亲和性affinity,k8s系列,kubernetes,容器,云原生

2,编辑资源清单设置节点亲和性

[root@k8s231 nodeaffinity]# cat nodeaffinity.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm-affinity
spec: 
  replicas: 20
  selector: 
    matchLabels:
      k8s: xinjizhiwa
  template:
    metadata:
      name: pod-affinity 
      labels:
        k8s: xinjizhiwa
    spec:
      #声明亲和性
      affinity:
        #声明亲和性类型
        nodeAffinity:
          #硬限制,必须满足的条件有哪些?(不满足下面的条件,亲和性就设置失败)
          requiredDuringSchedulingIgnoredDuringExecution:
            #设置节点选择器列表:
            nodeSelectorTerms:
            #声明基于节点的标签进行关联
            - matchExpressions:
              - key: k8s
                values: 
                - xinjizhiwa-03
                - xinjizhiwa-02
                #设置key和value的关系;
                #--In:key==value(必须写value)
                #--NotIn:key !=value(必须写value)
                operator: In
          #软限制,不一定满足,但会优先满足,相当于一高了调度的优先级;
          preferredDuringSchedulingIgnoredDuringExecution:
          #配置权重
          - weight: 10
            #偏向性
            preference:
              #基于节点的标签进行关联
              matchExpressions:
              #节点的标签名称
              - key: k8s
                values:
                - xinjizhiwa-03
                #关联关系,表示key和values的关系
                #In:表示包含关系(value必须写)
                #NotIn:表示不包含(value必须写)
                #Exists: 表示存在关系(不能写value)
                #DoesNotExist:不存在(不能写value)
                #Gt:大于(value必须是一个单一的元素,且值将被解释称一个整数)
                #Lt:小于(value必须是一个单一的元素,且值将被解释称一个整数)
                operator: In
      containers:
      - name: c1
        image: nginx:1.20.1-alpine
        ports:
        - containerPort: 80

3,创建资源

[root@k8s231 nodeaffinity]# kubectl apply -f nodeaffinity.yaml

4,查看pod所在节点,验证亲和性

22-k8s中pod的调度-亲和性affinity,k8s系列,kubernetes,容器,云原生

22-k8s中pod的调度-亲和性affinity,k8s系列,kubernetes,容器,云原生

三、podAffinity-pod的亲和性

22-k8s中pod的调度-亲和性affinity,k8s系列,kubernetes,容器,云原生

        基于“节点标签”进行设置,第一个pod副本创建在了哪个节点上,那么其余副本也会创建在这个节点上;

        拓扑域:节点机器的标签的key和value都相等的机器,就是同一个拓扑域;

1,编辑资源清单设置pod亲和性

[root@k8s231 nodeaffinity]# cat podaffinity.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm-affinity
spec: 
  replicas: 20
  selector: 
    matchLabels:
      k8s: xinjizhiwa
  template:
    metadata:
      name: pod-affinity 
      labels:
        k8s: xinjizhiwa
    spec:
      #声明亲和性
      affinity:
        #声明亲和性类型
        podAffinity:
          #硬限制,必须满足的条件有哪些?(不满足下面的条件,亲和性就设置失败)
          requiredDuringSchedulingIgnoredDuringExecution:
          #设置拓扑域,指定【节点的标签名】
          #【节点key】就是说,设置了拓扑域,pod就会往这个标签的节点进行创建

          #只要满足key是k8s的节点的标签,那么就是同一个拓扑域
          - topologyKey: k8s
            #【pod标签】确定pod的标签,用于二次确认,选中了拓扑域(节点标签的key),再次选中pod标签才能确认调度到哪个节点;
            labelSelector:
              matchExpressions: 

              #意思是说,只要key的值是k8s的pod创建在了哪个节点,“我”就跟随他。也创建在这个节点上;
              - key: k8s
                #如果pod标签,出现了key值相同,value值不同的情况下,就不见设置Exists存在的关系了
                #建议设置:In的方式进行匹配,当然此时Value就不能设置了;
                operator: Exists
      containers:
      - name: c1
        image: nginx:1.20.1-alpine
        ports:
        - containerPort: 80

2,创建资源

[root@k8s231 nodeaffinity]# kubectl apply -f podaffinity.yaml

3,查看pod所在节点

[root@k8s231 nodeaffinity]# kubectl get pods -o wide

22-k8s中pod的调度-亲和性affinity,k8s系列,kubernetes,容器,云原生

四、podAntAffinity-pod的反亲和性

        pod的亲和性:符合拓扑域的范围,指定标签的pod创建在哪里,其他pod就创建在哪里;

        pod的反亲和性:与之相反,符合拓扑域的范围,指定标签的pod创建在哪里,其他pod就不能创建在哪里;

1,编辑资源清单设置pod的反亲和性

[root@k8s231 nodeaffinity]# cat podantaffinity.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm-affinity
spec: 
  replicas: 4
  selector: 
    matchLabels:
      k8s: xinjizhiwa
  template:
    metadata:
      name: pod-affinity 
      labels:
        k8s: xinjizhiwa
    spec:
      #声明亲和性
      affinity:
        #声明亲和性类型
        podAntiAffinity:
          #硬限制,必须满足的条件有哪些?(不满足下面的条件,亲和性就设置失败)
          requiredDuringSchedulingIgnoredDuringExecution:
          #设置拓扑域,指定【节点的标签名】
          #【节点key】就是说,设置了拓扑域,pod就会往这个标签的节点进行创建
          - topologyKey: k8s
            #【pod标签】确定pod的标签,用于二次确认,选中了拓扑域(节点标签的key),再次选中pod标签才能确认调度到哪个节点;
            labelSelector:
              matchExpressions: 
              - key: k8s
                #如果pod标签,出现了key值相同,value值不同的情况下,就不见设置Exists存在的关系了
                #建议设置:In的方式进行匹配,当然此时Value就不能设置了;
                operator: Exists
      containers:
      - name: c1
        image: nginx:1.20.1-alpine
        ports:
        - containerPort: 80
 

2,创建资源

[root@k8s231 nodeaffinity]# kubectl apply -f podantaffinity.yaml

3,查看pod

22-k8s中pod的调度-亲和性affinity,k8s系列,kubernetes,容器,云原生

结论:

1,由于第一pod创建在了k8s232中,所以第二个pod就无法再k8s232中创建;

2,第二个pod就再k8s233中创建了;

3,由于我们是4个副本,k8s231还设置了污点,无法创建pod;

4,所以,我们4个副本,最后只能创建成功2个,剩下两个pending;

至此,亲和性,学习完毕文章来源地址https://www.toymoban.com/news/detail-829101.html

到了这里,关于22-k8s中pod的调度-亲和性affinity的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S亲和性,反亲和性,及污点

    nodeName:硬匹配,不走调度策略 nodeSelector:根据节点的标签选择,会走调度的算法 只要是走调度算法,在不满足预算策略的情况下,所有pod都是pending node节点的亲和性: 硬策略:必须满足的条件。匹配原则也是根据节点的标签 软策略:尽量满足你的要求,而不是一定满足

    2024年01月16日
    浏览(31)
  • k8s之亲和性、污点

    目录 亲和性 键值运算关系 硬策略 软策略 Pod亲和性与反亲和性 污点(Taint) 和 容忍(Tolerations) 污点(Taint)  容忍(Tolerations) 维护操作 故障排除步骤 官方介绍:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/ (1)节点亲和性 pod.spec.nodeAffinity ●preferredDuringSchedulingIgnore

    2024年02月06日
    浏览(33)
  • k8s~节点的亲和性

    在Kubernetes中,你可以使用节点亲和性(Node Affinity)来控制Pod部署在哪些节点上。通过配置节点亲和性,你可以指定一些规则,以确保多个服务不会被调度到同一个节点上。 requiredDuringSchedulingIgnoredDuringExecution:通过 requiredDuringSchedulingIgnoredDuringExecution ,可以定义在调度期间必

    2024年02月13日
    浏览(33)
  • K8s之标签、Node选择器与亲和性详解

    1、标签是什么? 标签其实就是一对key/value,key的值必须唯一 标签可以在创建一个对象的时候直接定义,也可以在后期随时修改,每一个对象可以拥有多个标签 标签可以用来划分特定的对象(比如版本,服务类型等) 创建标签后,方便我们对资源进行分组管理(通过标签查

    2024年02月07日
    浏览(26)
  • pod的亲和性和反亲和性

    调度策略:       匹配标签        操作符              拓扑域   调度目标 node的亲和性    主机标签  In Notin exists doesexists Gt Lt  不支持   指定主机 pod的亲和性     pod的标签 In Notin exists doesexists      支持   pod和指定标签的pod部署在同一拓扑域 pod的反亲

    2024年01月23日
    浏览(37)
  • 【k8s】pod调度——亲和,反亲和,污点,容忍

    官方网址:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/ pod.spec.nodeAffinity ●preferredDuringSchedulingIgnoredDuringExecution:软策略  p开头 ●requiredDuringSchedulingIgnoredDuringExecution:硬策略  r开头 pod.spec.affinity.podAffinity/podAntiAffinity ●preferredDuringSchedulingIgnoredDuringExecution:软策

    2024年02月05日
    浏览(33)
  • Kubernetes亲和性学习笔记

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是欣宸在学习Kubernetes调度器的过程中,对亲和性相关知识点的整理和总结,这是一篇笔记性质的博客 调度过程如下: 预选(Predicates) 优选(Priorities) 选定(Select) 这里将亲和性先分类,便

    2024年02月17日
    浏览(29)
  • K8S pod 均匀调度分配 —— 筑梦之路

      在 k8s 中 通过  kube-scheduler  组件来实现 pod 的调度,所谓调度,即把需要创建的 pod 放到 合适的 node 上,大概流程为,通过对应的  调度算法  和  调度策略 ,为待调度的 pod 列表中的 pod 选择一个最合适的 Node,然后目标节点上的  kubelet  通过 watch 接口监听到  kube-sch

    2024年02月16日
    浏览(31)
  • 【K8s】什么是Pod?Pod的调度与控制器

    每个Pod中都可以包含一个或者多个容器 ,这些容器可以分为两类: 1) 用户容器 :用户程序所在的容器,数量可多可少 2) 根容器 :Pause容器,由Kubernetes创建,这是每个Pod都会有的一个根容器,它的作用有两个: 可以以它为依据,评估整个Pod的健康状态 可以在根容器上设

    2024年02月06日
    浏览(29)
  • 学习笔记十四:K8S最小调度单元POD概述

    K8s官方文档:https://kubernetes.io/ K8s中文官方文档: https://kubernetes.io/zh/ K8s Github地址:https://github.com/kubernetes/kubernetes Pod资源对应的官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/ Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包