图文并茂带你解读 Kube-scheduler

深度 >
腾讯云
分享

作者 | 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

THE END
广告、内容合作请点击这里 寻求合作
免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表中国财投网的观点和立场。

相关热点

资讯播报

炒期货开户最低需要多少钱?现在开通期货开户需要多长时间?
图文并茂带你解读 Kube-scheduler
壶口瀑布门票多少钱?壶口瀑布简介
今日聚焦!如何成为淘宝达人?成为淘宝达人的步骤是什么?
天天速讯:卫生棉是啥东西?卫生巾分为几层?
全球快消息!农村50岁左右的女性有哪些工作可以做?过来人告诉你
史泰龙与李连杰合作过哪部电影?影片讲述了什么?
打春是一种传统习俗 2020年什么时候打春?
清淡的食物有哪些?清淡饮食的条件是什么?
视点!为什么有些文件无法删除?原因是什么?
环球观热点:如何查询高考成绩?查询方法是什么?
天天热头条丨西瓜子是西瓜里面的籽吗?西瓜子有什么功效?
焦点短讯!什么是加法?3加2除5等于几?
重要提醒:@所有人,事关这笔钱!今起预约
魔兽世界怀旧服狮王休玛在哪?正式服的坐标是什么?
天天实时:工业硅周评:需求回暖 成本支撑下冶金级硅价止跌回涨
今日讯!“故人已乘黄鹤”去下一句是什么?出自哪里?作者是谁?
全球实时:西溪湿地怎么玩?西溪湿地一日游攻略分享
刘彻之后的皇帝是谁?刘弗陵主要成就有哪些?
温州有什么旅游景点?温州旅游景点介绍
麒麟960相当于骁龙多少?华为手机使用技巧是什么?
苏有朋和秦岚一起演的电视剧叫什么名字?详情剧情介绍
王守仁名言名句有哪些?王守仁简介
每日关注!为什么乔丹最后去了奇才?原因是什么?
中信建投期货2月17日早间交易策略
当前热门:【东海期货2月17日产业链日报】贵金属篇:PPI超预期,金银震荡
cpi指数对股市的影响有哪些?cpi指数涨跌有什么意义?
支付宝会员日是每月几号?支付宝会员等级一年更新一次吗?
工商银行u盾密码初始是多少?工商银行u盾没电了怎么办?
visa信用卡怎么办理?如何申请?想知道visa信用卡在国内能用吗?
通俗解释一下平均线是什么?均线怎么设置参数最好?均线指标反映了什么?
当前快播:2000多个网点关停、公司要倒闭?400亿快递巨头深夜回应
天天视讯!中辉期货能源早盘关注:油价上涨动能相对不足,但底部支撑较为坚实
天天热推荐:高清图集丨南国春来早 万物竞芳菲
3个沃柑中就有2个来自广西!富硒沃土出好柑
快讯:晴天“沙尘暴”,雨天“千层浪”!上海这条路“隐藏关卡”太多,到底何时修?
通知存款是什么意思?通知存款和定期存款哪个利息高?有什么区别?
天天讯息:欧洲央行首席经济学家:加息影响尚未显现 货币紧缩政策仍在酝酿中
余额宝是复利计息吗?余额宝的复利相当于年利率多少?
广西将加开多个热门旅行线路列车!涉及这些地方
环球资讯:一条河激活一条“文旅路”
预期年化收益率保本吗?预期年化收益率是怎么计算的?
信贷产品及个人信贷的名词解释 常见的信贷产品有哪些?
世界快播:“预约车位凌晨开放”!上海医院预约车位也难抢?可能要提前3天,有的还需预约门诊编码
春节后“离婚潮”引上亿网友热议!快来看看:你的婚姻是消耗型还是滋养型
环球讯息:这条高铁有进展,又一座新建车站首桩开钻!
人民币贬值如何理财?人民币贬值对我们的影响是好是坏?我们该如何应对
当前观察:中辉期货宏观早报:美欧央行表态持续偏鹰,压制市场情绪
广西制定措施维护中小学幼儿园安全 实行这项制度
全球通讯!新一股弱冷空气影响广西 气温降幅不太明显
每日视讯:三立期货2月17日早间内参——能化
可转债预计价格下修 亚太药业还面临投资者维权
资讯:中汽协:1月商用车产销分别完成19.7万辆和18万辆 同比分别下降43.1%和47.7%
【天天热闻】第二批广西示范性托育机构拟确定名单公示
今热点:被指恶意裁员! 罗永浩:纠纷主体不是交个朋友 已协调解决
每日快讯!广西年内基本实现市市通高铁动车 建成10条高速路
环球简讯:最新!广西发布一批人事信息
简讯:EVTank:2030年电动重卡渗透率或升至30% 预计换电重卡将成行业主流
全球消息!同比增长8.1%!广西向海经济锚定新目标
世界快消息!重实效 强实干 抓落实丨大任产业园跑出项目建设“加速度”
环球最资讯丨沙特能源部长:欧佩克+产能协议将全年保持不变
环球微动态丨汇顶科技:融资净偿还1214.6万元,融资余额8.91亿元(02-16)
前沿资讯!中钢协:2月上旬钢材社会库存1341万吨 环比上升15.8%
天天新资讯:中国夜间经济行业数据分析: 47.0%消费者的夜间餐饮消费占全天的20-40%
全球热点评!我在他乡挺好一共多少集啊_我在他乡挺好的一共多少集
天天新资讯:是时候给ChatGPT们降降温了
水煮干丝需要哪些材料_水煮干丝的做法
最新消息!南宁凤岭片区将调整局部用地布局
每日速看!广西一批重大项目将开竣工!涉及医疗卫生、交通出行……
环球微速讯:广西发文规范中职学校新专业设置,布点率超过40%的专业不建议增设
每日简讯:美联储压力又增加了!美国PPI超预期上涨 环比增幅创去年6月来之最
全球动态:违停车辆“占领”非机动车道,停车位上却空荡荡!南宁交警:集中整治
美企利润见顶 随之而来的将是裁员巨浪?
左手倒右手?开价3.51亿收购控股股东0营收子公司,万凯新材收关注函
快资讯:南宁市三种专利新增授权14859件 排名全区第一
定点药店接入门诊统筹 是机遇也是挑战|K时评
天天快看:小米造车:劳模雷军最后一次创业狂飙?
别高兴太早!欧洲天然气价暴跌80%,但能源巨头正为高价做准备
今日热闻!南宁开发商回应房贷年龄延至100岁具体详细内容是什么
最新快讯!中辉期货原油日报20230216:原油价格企稳,价格重心有望上移
环球快播:群智咨询:供大于求 预计2月份智能手机面板价格仍将保持下行通道
全球最新:开航八载 北部湾航空助推广西民航高质量发展
全球新资讯:最新房价公布!广西这两个市新房价格涨了
热点在线丨骨科耗材兑现“集采红利” 爱康医疗涨超15%创近一年新高
世界观点:广西加快文化旅游业全面恢复振兴 着力打造五张世界级旅游名片
受企业业绩提振 英国富时100指数再创新高
天天快讯:算力,谁是盈利最强企业?
香港2022年11月至2023年1月失业率及就业不足率分别为3.4%及1.4%
焦点报道:一系列劲爆数据令美联储压力陡增 警惕衰退风险冲击市场!
【环球热闻】广西加快推进重大水利项目 预计可新增规模580亿以上
热点聚焦:广州荔湾“坑口生菜会”热闹开锣
臻和科技撤回在港交所上市申请:亏损持续扩大,杜波为控股股东
“50 Cent”重出江湖,“波动率末日2.0”临近! 近期美股注定不平静
今日聚焦!统计局:1月份一线城市商品房售价环比上涨0.2%
香港特区政府发售首批代币化绿色债券 发售金额8亿港元
影响股市的八大因素是什么?影响股票收益的因素有哪些?
可转债与股价有关系吗?可转债对股价有什么影响?投资可转债需注意的风险
石头科技什么时候开盘?石头科技股票代码是多少?什么时候上市的?
涨三不追跌四不压是什么意思?股票为什么追涨不追跌?追涨杀跌需要注意什么
华润微688396什么时候上市交易?华润微电子主营业务有什么?

相关推荐

精彩推送

3