目录

  • Pod Affinity

    • Pod亲和性调度
    • pod互斥性调度

Pod Affinity

通过《K8S调度之节点亲和性》,我们知道怎么在调度的时候让pod灵活的选择node,但有些时候我们希望调度能够考虑pod之间的关系,而不只是pod与node的关系。于是在kubernetes 1.4的时候引入了pod affinity。

为什么有这样的需求呢?举个例子,我们系统服务 A 和服务 B 尽量部署在同个主机、机房、城市,因为它们网络沟通比较多;再比如,我们系统数据服务 C 和数据服务 D 尽量分开,因为如果它们分配到一起,然后主机或者机房出了问题,会导致应用完全不可用,如果它们是分开的,应用虽然有影响,但还是可用的。

pod affinity 可以这样理解:调度的时候选择(或者不选择)这样的节点 N ,这些节点上已经运行了满足条件 X。条件 X 是一组 label 选择器,它必须指明作用的 namespace(也可以作用于所有的 namespace),因为 pod 是运行在某个 namespace 中的。

这里的X指的是集群中的节点、机架、区域等概念,通过kubernetes内置节点标签中的key来进行声明。这个key的名字为topologyKey,意为表达节点所属的topology范围:

  • kubernetes.io/hostname
  • failure-domain.beta.kubernetes.io/zone
  • failure-domain.beta.kubernetes.io/region

和 node affinity 相似,pod affinity 也有 requiredDuringSchedulingIgnoredDuringExecution 和 preferredDuringSchedulingIgnoredDuringExecution,意义也和之前一样。如果有使用亲和性,在 affinity 下面添加 podAffinity 字段,如果要使用互斥性,在 affinity 下面添加 podAntiAffinity 字段。

先定义一个参照目标pod:

apiVersion: v1
kind: Pod
metadata:name: pod-flaglabels:security: "S1"app: "nginx"
spec:containers:- name: nginximage: nginx

Pod亲和性调度

下面是一个亲和性调度的示例

apiVersion: v1
kind: Pod
metadata:name: pod-affinity
spec:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: securityoperator: Invalues:- S1topologyKey: kubernetes.io/hostnamecontainers:- name: with-pod-affinityimage: gcr.io/google_containers/pause:2.0

创建后可以看到这个pod与上面那个参照的pod位于同一个node上,另外,如果将这个node上的kubernetes.io/hostname标签干掉,将会发现pod会一直处于pending状态,这是因为找不到满足条件的node了。

pod互斥性调度

下面是一个互斥性调度的示例:

apiVersion: v1
kind: Pod
metadata:name: with-pod-affinity
spec:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: securityoperator: Invalues:- S1topologyKey: "failure-domain.beta.kubernetes.io/zone"podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: securityoperator: Invalues:- S2topologyKey: kubernetes.io/hostnamecontainers:- name: with-pod-affinityimage: gcr.io/google_containers/pause:2.0

这个例子要求这个新pod与security=S1的pod为同一个zone,但是不与security=S2的pod为同一个node。

原则上,topologyKey可以使用任何合法的标签Key赋值,但是出于性能和安全方面的考虑,对topologyKey有如下限制:

  • 在pod亲和性和RequiredDuringScheduling的pod互斥性的定义中,不允许使用空的topologyKey
  • 如果admission controller包含了LimitPodHardAntiAffinityTopology,那么针对RequiredDuringScheduling的pod互斥性定义就被限制为kubernetes.io/hostname,要使用自定义的topologyKey,就要改写或禁用该控制器
  • 在PerferredDuringScheduling类型的Pod互斥性定义中,空的topologyKey会被解释为kubernetes.io/hostname、failure-domain.beta.kubernetes.io/zone及failure-domain.beta.kubernetes.io/region的组合

podAffinity规则设置的注意事项:

  • 在labelSelector和topologyKey同级,还可以定义namespaces列表,表示匹配哪些namespace里面的pod,默认情况下,会匹配定义的pod所在的namespace,如果定义了这个字段,但是它的值为空,则匹配所有的namespaces。
  • 所有关联requiredDuringSchedulingIgnoredDuringExecution的matchExpressions全都满足之后,系统才能将pod调度到某个node上。

转载于:https://www.cnblogs.com/breezey/p/9101675.html

K8S调度之pod亲和性相关推荐

  1. 【项目实战23】k8s(9)—k8s调度(节点亲和性,Taint污点,pod容忍性)

    k8s调度 一.k8s调度背景介绍 二.nodeName方式调度 三.nodeSelector方式调度 (1).使用方式 (2).节点亲和性 四.Taints污点 (1).介绍 (2).使用 五.to ...

  2. k8s调度之node的亲和性以及pod的亲和性/反亲和性

    k8s调度之node的亲和性以及pod的亲和性/反亲和性 通常情况下,使用的都是k8s默认的调度调度方式,但是在有些情况下,我们需要将pod运行在具有特定的标签的node上才能都运行,这个时候,pod ...

  3. k8s调度(nodeName、nodeSelect、节点、pod的亲和和反亲和、Taints)

    k8s调度 nodeName nodeSelector 亲和与反亲和 节点亲和 pod 亲和性和反亲和性 Taints(污点) 调度器通过 kubernetes 的 watch 机制来发现集群中新创建 ...

  4. k8s学习(二十一) 亲和性调度

    亲和性调度可以分成软策略和硬策略两种方式: 软策略就是如果你没有满足调度要求的节点的话,pod 就会忽略这条规则,继续完成调度过程,说白了就是满足条件最好了,没有的话也无所谓了的策略 硬策略就比较强硬 ...

  5. Kubernetes调度器-Pod分配给节点(node-pod亲和性、固定节点)

    1.需求 约束一个Pod只能在特定的 Node(s)上运行,或者优先运行在特定的节点上.有几种方法可以实现这点,推荐的方法都是用标签选择器来进行选择.通常这样的约束不是必须的,因为调度器将自动进行合理 ...

  6. k8s调度:亲和度、容忍度

    k8s调度:亲和性调度.容忍度调度 一.实验环境及简介 1.1.实验环境 1.2.亲和性 1.3.污点和容忍度 二.节点亲和性调度 2.1.节点硬亲和性 2.2.节点软亲和性 三.Pod亲和度 3.1 ...

  7. k8s调度之亲和/反亲和

    Pod的调度流程 在k8s集群中kube-scheduler组件负责为Pod选择运行节点,并由对应节点上的kubelet创建Pod.对于每个未绑定至任何节点的Pod对象,无论是新建.被驱逐等,kube ...

  8. k8s调度过程中的资源分配问题

    想要明白调度过程中的资源分配问题,首先要明白一件事,k8s中的资源分配,是以Pod为单位的.而Pod本质上而言,其实就是一个进程.就像操作系统一样,进程是资源分配的最小单位. k8s解决的一个比较大的 ...

  9. 从零开始入门 K8s | 调度器的调度流程和算法介绍

    作者 | 汪萌海(木苏)  阿里巴巴技术专家 关注"阿里巴巴云原生"公众号,回复关键词**"入门"**,即可下载从零入门 K8s 系列文章 PPT. 导读:Ku ...

最新文章

  1. 利用反射光电管 ITR9909 制作节能信标光电感应开关
  2. [HNOI2009]最小圈 (二分答案+负环)
  3. leetcode动态规划(python与c++)
  4. 微信小程序 本地mysql_微信小程序系列之使用缓存在本地模拟服务器数据库
  5. -e mysql_root_password 无效_43万的价格,53万的面子!宝马5系对比奔驰E级
  6. 动态规划--凑硬币问题
  7. 瑞禧分享二维晶体表征介绍及定制SnPSe3晶体;CoBi4Te7 磁性拓扑绝缘体/CuInP2S6晶体;Nb2SiTe4晶体/Sb2TeSe2晶体等
  8. 企业中常见的杀毒软件
  9. 字节跳动新员工入职一周,工作很少,每天很闲,从不加班!公司一堆漂亮小姐姐!完全不像外面说得那么忙!
  10. 显示屏色温调节 影响 测试软件,教你把显示器调到最佳效果
  11. The requested URL *** was not found on this server
  12. Codeforces 1077E Thematic Contests(二分)
  13. 练习三 HTML5 logo
  14. mac outlook删除服务器邮件,设置苹果MAC 端outlook客户端说明
  15. [ML-03] Matplotlib-3
  16. 阿里云域名备案和域名解析流程详解
  17. 国内外开源社区资源汇总
  18. flex布局中 flex:1和flex:auto的区别
  19. 青蛙游戏 linux,小青蛙2048
  20. 简单免费内网穿透教程,利用树莓派实现低成本建站 无需公网

热门文章

  1. MIT有个做披萨的GAN,登上了CVPR:加香肠、去橄榄、再烤熟,分层才是王道
  2. 机器“血液”登上Nature:一条假鱼靠它续航36小时,无需固态电池
  3. 整理oracle 树形查询
  4. 新东家要哭了,雅虎终于承认上亿用户数据被盗
  5. Java学习笔记(43)——Java泛型
  6. vim带你装逼带你飞(一)
  7. Linux各发行版流行度统计数据与排名
  8. 二层交换机的六条安全秘诀
  9. python数据可视化库 动态的_python --数据可视化(一)
  10. 计算机网络基础 — 网络设备 — 路由器(Router)