【云原生--Kubernetes】K8s 亲和、反亲和、污点、容忍

本文介绍了Kubernetes调度的基本原理,重点解析了亲和性与反亲和性(包括硬亲和和软亲和)、污点与容忍的概念及其用法。通过设置Pod和Node的亲和与反亲和策略,实现Pod的智能调度。同时,详细阐述了污点(Taint)的类型和设置方法,以及容忍(Toleration)的配置,以确保Pod能正确调度到具有特定污点的Node上。
摘要由CSDN通过智能技术生成

一. K8s调度

  1. 调度器通过kubernetes的list-watch机制来发现集群中新创建且尚未被调度到Node上的Pod。调度器会将发现的每一个未调度的Pod调度到一个合适的Node上来运行。
  2. kube-scheduler是Kubernetes集群的默认调度器,并且是集群控制面的一部分。如果你真的希望或者有这方面的需求,kube-scheduler在设计上是允许你自己写一个调度组件并替换原有的kube-scheduler。
  3. 在做调度决定时需要考虑的因素包括:单独和整体的资源请求、硬件/软件/策略限制、亲和以及反亲和要求、数据局域性、负载间的干扰等等。

二. 亲和与反亲和

2.1 Pod和Node

  1. 从pod出发,可以分成亲和性和反亲和性,分别对应podAffinity和podAntiAffinity。
  2. 从node出发,也可以分成亲和性和反亲和性,分别对应nodeAffinity和nodeAntiAffinity。
  3. 从操作指令来讲,可以有ln、Notln、Exists、DoesNotExist等等。
针对亲和性来讲,in代表我要调度到有这个标签的位置
针对反亲和性来讲,in代表我不要调度到有这个标签的位置

2.2 硬亲和和软亲和

preferredDuringSchedulingIgnoredDuringExecution 软亲和

  • 软策略:结合下面的 “operator: NotIn”,意思就是尽量不要将 pod 调度到匹配到的节点,但是如果没有不匹配的节点的话,也可以调度到匹配到的节点。
    requiredDuringSchedulingIgnoredDuringExecution 硬亲和
  • 硬策略:结合下面的 “operator: In”,意思就是必须调度到满足条件的节点上,否则就等着 Pending。
    不管哪种方式,最终还是要依赖 label 标签。
kubectl get pods -n company ai-action-statistic-gray-86465f9c4b-hdfk4 -oyaml | grep nodeSelector -B 5 -A 5
  uid: ed47f094-f70a-45ed-b7dd-d46f2d01986f
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:    #硬策略
        nodeSelectorTerms:
        - matchExpressions:
          - key: node-role.kubernetes.io/gray
            operator: In
            values:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值