图文并茂带你解读 Kube-scheduler - 行业动态 -

当前位置:首页  >  行业动态  > 正文

图文并茂带你解读 Kube-scheduler

图文并茂带你解读 Kube-scheduler
2023-02-15 15:02:45 来源:腾讯云

作者 | ContainerLabs 译者 | Luga Lee 策划 | Luga Lee

Hello folks,今天为大家分享一个由 ContainerLabs 出品的关于 Kubernetes Scheduler 的文章。

在 Kubernetes 中,Pod 是最小的可部署工作负载单元。所以显而易见的问题:

“Pod 应该部署在哪里?”


(资料图)

当然,答案是:Pod 始终在 Node 内执行。

但是…… 有这么多 Node 节点 ,我们应该将这个 Pod 部署到哪个 Node ???

大家好,我是 “Kubernetes Scheduler” ~

让我们用简单的场景打个比方来剖析一下 Kubernetes Scheduler 的工作原理以及选择 Node 的方式。

假设我们有一家“社交餐厅”,里面有几张桌子,每张桌子周围有几个座位,有很多顾客和酒店服务员。“社交餐厅”意味着不同的顾客群可以坐在同一张桌子旁,如果有足够的座位并且满足所有条件。

桌子 = Node 节点(VM 或物理机)座位 = VM 上的资源可用性服务员= Kube-Scheduler客户组 = Pod组内单个客户 = Container

1、Resource requirements and availability - 资源需求和可用性

1、一个 *Customer-Group 进入餐厅并提出一个简单的座位请求。服务员分析客户组的需求并查看他们需要多少个座位。然后,他查看所有可用的桌子,过滤无法“安排”的桌子,并为他们分配(绑定)满足他们座位要求的桌子。 *

2、这是基本的调度类型——Kube 调度程序不断监视 API Server 以查看是否有任何未调度的 Pod,查看 Pod 内每个容器的资源需求。

3、请记住,容器是那些在规范中有资源需求的容器,而不是 Pod 本身。

在下面的示例中,我们对所部署的 Pod 的 CPU 和内存进行了资源定义。要求是 500 milli CPU 和 128 MiB 内存。

apiVersion: v1kind: Podmetadata:  name: nginxspec:  containers:  - name: nginx    image: nginx:1.7.9    resources:      requests:        memory: "128Mi"        cpu: "500m"

现在让我们看一下其中一个 Node(餐厅餐桌)以确保它们有足够的容量。我们运行以下命令:

kubectl describe nodes 

2、Node Selector - 节点选择器

另一个 *Customer-Group 来到餐厅,要求坐在任何“蓝色”的桌子上。服务员查看他的库存并找到所有带有蓝色标签的表并将客户组分配给适当的桌子*

在这种情况下,Pod 有一个指定的 nodeSelector(键值对),它请求部署 Pod 到与键值对匹配的任何 Node 节点上。

新的 YAML 文件如下所示:

apiVersion: v1kind: Podmetadata:  name: nginx-bluespec:  containers:  - name: nginx    image: nginx:1.7.9  nodeSelector:    color: blue

为了查询我的所有 Node 以检查我们是否有标签 “blue” ,我们运行以下命令进行查看:

kubectl get nodes --show-labels

从列表中我们可以看到 “worker-2” 的标签为 color=blue。Kubernetes 也为我们提供了几个内置标签。

棒极了 !如果您现在部署它,调度程序会自动将其分配给正确的节点。我们可以通过运行以下命令来确认这一点。

kubectl get pod -o wide

请注意,如果您没有带有适当标签的 Node 节点,则部署将处于挂起状态。

3、 Node affinity and anti-affinity -节点亲和与反亲和

节点亲和性和反亲和性很像节点选择器,但它通过支持表达语言和软/硬偏好而不只是硬性要求为您提供更大的灵活性。

让我们说另一个 *Customer-Group 进入餐厅。他们更喜欢放在任何“海景”的桌子上,但这不是必需的。服务员查看他的库存并找到所有标签为“海洋”的桌子并将客户组分配给适当的桌子*

在此示例中,Pod 定义了一个 nodeAffinity,它表明我们更喜欢与键值对匹配的“节点”-> view : ocean(我们通过下面的 matchExpressions 来做到这一点)

这里有两个选项:

preferredDuringSchedulingIgnoredDuringExecution: 这意味着匹配条件的节点将是首选,但不保证何时分配到节点。

IgnoredDuringExecution- 如果在调度 Pod 后删除或更改节点的标签,则不会删除 Pod。换句话说,affinity 选择仅在调度 Pod 时起作用,而在执行时不起作用

requiredDuringSchedulingIgnoredDuringExecution: 表示选择节点时需要符合条件的节点。IgnoredDuringExecution 和以前一样。
apiVersion: v1kind: Podmetadata:  name: nginx-oceanviewspec:  containers:  - name: nginx    image: nginx:1.7.9  affinity:    nodeAffinity:      preferredDuringSchedulingIgnoredDuringExecution:      - weight: 1        preference:          matchExpressions:            - key: view              operator: In              values:                - ocean

这种情况下的运算符也可以是其他值,例如 In、NotIn、Exists、DoesNotExist、Gt、Lt。NotInDoesNotExist 会产生相反的效果 nodeAntiAffinity。

4、 Pod affinity and anti-affinity -Pod 亲和与反亲和

另一个素食主义者女孩团伙*顾客团体来到餐厅。他们有一项要求,即不得将其放置在任何包含已经被肉食者占据的座位的桌子上。他们有点挑剔——他们还想坐在已经有男孩子坐的桌子上。换句话说,他们对肉食者没有亲和力,但对男孩有亲和力。 *

让我们来看一个真实世界的场景,您有一组 Redis 缓存和 Web 服务器部署。以下是条件:

您希望将 redis-cache Pod 部署得尽可能靠近 web-servers Pod (podAffinity)您不希望同一节点中有两个 redis-cache Pod (podAntiAffinity)您不想在同一个节点中部署两个网络服务器 Pod (podAntiAffiinity)您希望这些规则适用于节点范围。(拓扑)

以下是 redis-cache 部署 YAML :

apiVersion: apps/v1kind: Deploymentmetadata:  name: redis-cachespec:  selector:    matchLabels:      apptype: redis-cache  replicas: 3  template:    metadata:      labels:        apptype: redis-cache    spec:      affinity:        podAntiAffinity:          requiredDuringSchedulingIgnoredDuringExecution:          - labelSelector:              matchExpressions:              - key: apptype                operator: In                values:                - redis-cache            topologyKey: "kubernetes.io/hostname"      containers:      - name: redis-server        image: redis:3.2-alpine

在上面的示例中,您看到 redis-cache 标签 (apptype=redis-cache) 被添加到作为此部署的一部分部署的每个 Pod。

描述 podAntiAffinity 为没有两个 redis-cache Pod 部署在同一台服务器内。这是由内置拓扑 “kubernetes.io/hostname” 定义的,这意味着它是一个 Node 。如果需要,这也可以扩展到区域或任何其他合法密钥。

现在,让我们看一下 Web 服务器部署 YAML 文件:

apiVersion: apps/v1kind: Deploymentmetadata:  name: web-serverspec:  selector:    matchLabels:      apptype: web-server  replicas: 3  template:    metadata:      labels:        apptype: web-server    spec:      affinity:        podAntiAffinity:          requiredDuringSchedulingIgnoredDuringExecution:          - labelSelector:              matchExpressions:              - key: apptype                operator: In                values:                - web-server            topologyKey: "kubernetes.io/hostname"        podAffinity:          requiredDuringSchedulingIgnoredDuringExecution:          - labelSelector:              matchExpressions:              - key: apptype                operator: In                values:                - redis-cache            topologyKey: "kubernetes.io/hostname"      containers:      - name: web-app        image: nginx:1.12-alpine

在上面的示例中,您看到 Web 服务器标签 (apptype=web-server) 被添加到作为此部署的一部分部署的每个 Pod:

podAntiAffinity 被描述为没有两个网络服务器 Pod 部署在同一台服务器内。这是由

内置的 topologyKey 定义的,"kubernetes.io/hostname" 这意味着它是一个 Node。如果需要,这也可以扩展到区域或任何其他合法密钥。

podAffinity 被描述为将 Web 服务器 Pod 部署为尽可能靠近 redis 缓存。

一旦你部署了这个 - 我们就得到了我们的目标 - 3 个网络服务器和 3 个 redis 缓存服务器 - 每个节点上都有一个副本!

5、 Taint and Tolerations -污点和容忍

这一次,餐厅周围的一张桌子被花生溢出的灾难“污染”了。所以他们说不会在这张桌子上安排新的 *Customer-Groups 以避免过敏反应。所以任何新的客户组都被放置在除了这个受污染的桌子之外的所有其他桌子上。*

到目前为止,我们一直在从 Pod 的角度来看调度。但是,如果 Node 的另一方决定不再安排新的 Pod 怎么办?这就是污点进来的地方。一旦你污染了一个 Node,你将有两个选择:

1、NoSchedule - 这意味着一旦它被污染,就不应该在这个 Node 上安排新的 Pod。*除非他们有容忍度

2、NoExecute - 现有的 Pod 一旦被污染,就会从 Node 中逐出。*除非他们有容忍度(我们将在一分钟内讨论容忍度)

那么我们如何污染节点呢?

kubectl taint nodes  mytaintkey=mytaintvalue:NoSchedule

一旦我们有了这个设置,Node 节点现在就被以下键值对 (mytaintkey=mytaintvalue) 污染了。因此无法安排新的 Pod。

但是如果你想从 Node 中驱逐现有的 Pod 怎么办?

kubectl taint nodes  mytaintkey=mytaintvalue:NoExecute

这将从当前 Node 中驱逐所有的 Pod,并将它们移动至另一个可用的 Node 节点上。

但过了一会儿,一个客户组走过来说 - “哦,那很好。我们对花生过敏有“容忍度”**。所以请继续并将我们放在“受污染”的桌子上”。Kube 调度程序验证它们的容忍度并将它们放入受污染的表中

现在,如果 Pod 对 Node 指定的污点键值具有容忍度,则此 Pod 将免除污点,并在必要时放置在 Node 上。

apiVersion: v1kind: Podmetadata:  name: web-serverspec:  containers:  - name: web-app    image: nginx:1.12-alpine  tolerations:  - key: "mytaintkey"    operator: "Equal"    value: "mytaintvalue"    effect: "NoExecute"

Adiós !

- EOF -

标签: 云数据库 Redis Kubernetes

(责任编辑:news01)
环球百事通!小孩小孩你别馋过了腊八就是年_小孩小孩你别馋 过了腊八就是年

环球百事通!小孩小孩你别馋过了腊八就是年_小孩小孩你别馋 过了腊八就是年

1、小孩儿,小孩儿你别馋,过了腊八就是年小孩,小孩,你别哭。2、这首歌是《正月里来年儿来到》。3、勤...
02-09 22:50:23
慧辰股份贱卖子公司股权背后的疑问

慧辰股份贱卖子公司股权背后的疑问

在收购北京信唐普华科技有限公司(以下简称“信唐普华”)22%股权两年后,慧辰股份(688500)要大幅打折出售...
02-09 20:11:48
车牌号测吉凶_天天快看

车牌号测吉凶_天天快看

预测结果:车牌号码001HH得分21分吉凶测算『吉』数字命理宇宙起源、天地宇宙开泰的太极数;大展鸿图,信用...
02-09 19:53:39
一件“小案”缘何得到“特殊”关注?取快递女子被造谣出轨案详情披露|焦点热门

一件“小案”缘何得到“特殊”关注?取快递女子被造谣出轨案详情披露|焦点热门

一件“小案”缘何得到“特殊”关注?取快递女子被造谣出轨案详情披露
02-09 18:18:24
【环球新要闻】保丽洁(832802)龙虎榜数据(02-09)

【环球新要闻】保丽洁(832802)龙虎榜数据(02-09)

沪深交易所2023年02月09日公布的交易公开信息显示,保丽洁因成为当日换手率达到20%的证券而登上龙虎榜。
02-09 16:42:32
如何单独给手机相册加密_怎么给手机相册加密

如何单独给手机相册加密_怎么给手机相册加密

1、安卓手机相册怎么加密?相信这个问题是很多安卓智能手机用户非常想知道的,因为相册涉及很多个人隐私...
02-09 16:06:27
全球热点评!北京菜百黄金价格今天多少一克(2023年02月09日)

全球热点评!北京菜百黄金价格今天多少一克(2023年02月09日)

北京菜百黄金价格今天多少一克,菜百今日金价查询(2023年02月09日)
02-09 14:55:31
世界速读:得分王之争榜首再易主:恩比德遭东契奇反超 仅差0.1分悬念大

世界速读:得分王之争榜首再易主:恩比德遭东契奇反超 仅差0.1分悬念大

得分王之争榜首再易主:恩比德遭东契奇反超仅差0 1分悬念大,哈登,76人队,美国篮球,阿德托昆博,得分王之...
02-09 12:04:22
广州地铁早上几点开始运行 广州地铁时刻表 天天热讯

广州地铁早上几点开始运行 广州地铁时刻表 天天热讯

1、广州地铁早上6:10分开始运行。2、广州地铁时刻表:广州地铁1号线,首末班车时间:广州东站06:10-23:...
02-09 11:51:50
独家资金:早盘主力买入前10股

独家资金:早盘主力买入前10股

独家资金:早盘主力买入前10股
02-09 10:50:41
当前热文:家联科技2月9日快速上涨

当前热文:家联科技2月9日快速上涨

以下是家联科技在北京时间2月9日09:43分盘口异动快照:2月9日,家联科技盘中快速上涨,5分钟内涨幅超过2...
02-09 09:38:07
拖男挈女是什么意思? 含义是什么

拖男挈女是什么意思? 含义是什么

1、拖男挈女释义:带领着儿子和女儿,比喻路途艰苦和生活的艰难。2、选自:喊一声,都拖男挈女,呼弟呼兄,...
02-09 07:56:13
摩根大通CEO戴蒙:如果通胀被证明具有粘性,美联储可能会加息至5%以上。|环球信息

摩根大通CEO戴蒙:如果通胀被证明具有粘性,美联储可能会加息至5%以上。|环球信息

摩根大通CEO戴蒙:如果通胀被证明具有粘性,美联储可能会加息至5%以上
02-09 06:59:41
当前热议!团结友爱的格言

当前热议!团结友爱的格言

单丝不成线,独团结一致,同心同德,任何强大的敌人,任何困难的环境,都会向我们投降。团结友爱的格言1...
02-09 04:16:44
宝岛眼镜店装修效果图_宝岛眼镜店 当前信息

宝岛眼镜店装修效果图_宝岛眼镜店 当前信息

1、宝岛眼镜店是好,质量不错,不过就有一点比较贵。2、所以现在很多人都不去实体店买眼镜了,情愿去网...
02-09 03:57:42
北京中小学生2月13日重返校园 建设高质量基础教育体系

北京中小学生2月13日重返校园 建设高质量基础教育体系

中新网北京2月8日电(记者杜燕)北京市中小学生将于2月13日重返校园。北京教育系统坚持以学生的健康成长为...
02-09 01:48:49
如何开发儿童智力|世界今日讯

如何开发儿童智力|世界今日讯

智力是人的一种心理品质,它具有无法观察到的特点,关于智力的概念是国内外长期争论的问题,至今没有一...
02-09 00:17:06
ST交投(002200.SZ)联合体中标师宗县城乡绿化美化提升及污水处理厂二期建设项目 世界头条

ST交投(002200.SZ)联合体中标师宗县城乡绿化美化提升及污水处理厂二期建设项目 世界头条

ST交投(002200 SZ)联合体中标师宗县城乡绿化美化提升及污水处理厂二期建设项目
02-08 23:01:09
忻州古城客如潮 文明赏灯度元宵 世界新视野

忻州古城客如潮 文明赏灯度元宵 世界新视野

忻州古城客如潮文明赏灯度元宵
02-08 21:11:15
当前快看:2022最新五一劳动节调休时间公布

当前快看:2022最新五一劳动节调休时间公布

我们对五一劳动节的普遍印象就是,这是个节假日,又能出门玩了,或者是可以休息几天,放松一下。那么关...
02-08 20:23:20
Prague英文_prague是哪个国家

Prague英文_prague是哪个国家

是捷克的首都捷克首都布拉格,位于国境西部,座落在拉贝河支流伏尔塔瓦河两岸,人口121万,是一座美丽而...
02-08 19:53:27
【天天新要闻】乌克兰调3万警察组成八大突击旅,还能扛多久

【天天新要闻】乌克兰调3万警察组成八大突击旅,还能扛多久

前线精锐伤亡惨重,乌克兰调3万警察组成八大突击旅:还能扛多久前线精锐伤亡惨重,乌军缺乏兵力根据综合...
02-08 17:46:26
世界热头条丨c5当前等待中扇区数_c5当前待映像的扇区数

世界热头条丨c5当前等待中扇区数_c5当前待映像的扇区数

1、硬盘出现坏道可以尝试通过以下方案解决:1 MHDD修复扫描需要有一定DOS基础详情建议百度一下-MHDD2 如果知道
02-08 17:01:25
当前关注:四德工程个人学习心得5篇精选

当前关注:四德工程个人学习心得5篇精选

四德教育是指以增强诚信意识为重点,加强社会公德、职业道德、家庭美德、个人品德建设。接下来是小编为...
02-08 16:28:57
港股异动 | 元亨燃气(00332)涨14% 拟向贵州燃气(600903.SH)供应天然气交易额上限为0.6亿元 环球视讯

港股异动 | 元亨燃气(00332)涨14% 拟向贵州燃气(600903.SH)供应天然气交易额上限为0.6亿元 环球视讯

智通财经APP获悉,元亨燃气(00332)盘中明显反弹,午盘初升约14%。公司将向贵州燃气(600903)(600903 SH)...
02-08 15:00:22
Hershey 环球速看料

Hershey 环球速看料

1、Hershey。2、演员。3、主要作品有2009年上映的《诅咒》。文章到此就分享结束,希望对大家有所帮助。
02-08 13:26:24
环球实时:感恩父母的作文

环球实时:感恩父母的作文

感恩父母的作文20篇在学习、工作乃至生活中,大家都接触过作文吧,借助作文可以宣泄心中的情感,调节自...
02-08 12:34:23
珠海:今年将争取开展数字货币跨境创新试点,配合推进横琴封关运作 焦点热闻

珠海:今年将争取开展数字货币跨境创新试点,配合推进横琴封关运作 焦点热闻

2月8日上午,珠海市第十届人民代表大会第三次会议开幕。珠海市委副书记、市长黄志豪表示,2023年,将支...
02-08 11:14:02
马字旁的字有哪些_弓字旁的字有哪些 当前快看

马字旁的字有哪些_弓字旁的字有哪些 当前快看

1、1、总笔画数3:弓总笔画数4:弖吊引总笔画数5:弘弗总笔画数6:弛弚弜弙总笔画数7:弝弟张弡弞总笔画...
02-08 10:18:58
环球观热点:珍惜的话语

环球观热点:珍惜的话语

关于珍惜的话语所谓话语是人们说出来或写出来的语言。话语分析是指对人们说(叙述)什么,如何说(叙述...
02-08 08:33:59

为您推荐

精彩推送