K8s入门:容器调度是什么意思?

新人入圈 👉 点击这里 👈

(备用微信号: domsm789

说到调度的过程,其实并不像我们想的那样随意乱伸手,它主要分成了两道严格的关卡来完成筛选,第一关卡叫“预选”,这就像是咱们进门先看能不能办卡,先看看你的 Pod 需要什么配置,比如你得有 CPU、内存、能不能跑在这个机房的特定机器上,如果某个 Node 的资源已经满了或者根本不支持你的 Pod 安装特定的软件,那这一关你就直接被 Pass 掉了,这一步的目的是先把那些明显不可能的要排除在外,避免后面的测试变得毫无意义,当预选关通过了一部分节点后,就轮到了第二道关卡——优选,这时候调度器手里已经有了几合情况的名单,就像 HR 手里有几个还不错的候选人,但到底谁最合适呢?这时就需要通过一套数学公式给每个节点打分,这个分数是由很多个因素决定的,比如这个机器离你最近的机器有多近(拓扑亲和性),它最近是不是太忙了导致负载过高,或者是根据你的预定义规则进行加权排序,分数最高的那个节点自然就成了最终的着陆点,这种逻辑确保了系统资源的最优化利用。

K8s入门:容器调度是什么意思? 一

面对这么复杂的规则,我们普通用户在开发应用的时候该怎么做才能影响这个分配过程呢?其实只要你懂一点 yaml 配置,就可以非常精细地控制调度器的行为,首先最基础的就是打标签,你可以给你的机器节点 Group 打上标识符,比如标记数据库的服务器是一组,缓存的服务器是另一组,然后让你的 Pod 在创建的时候就声明“我只要找那个标了数据库 Group 的机器住就行”,这在 K8s 里就是通过 nodeSelector 来实现的,除了这个硬性要求,你还想追求更高级的效果,比如我不想让应用飘来飘去,总想待在同一个机房或者同一台机器上,那你可以用 nodeAffinity 来定义偏好,这种偏好既有必须满足的“硬性要求”,也可以是“最好满足但不是不行”的“软性要求”,甚至还可以定义“我绝对不要去这台机器”, 如果真的遇到了特殊情况,比如说你的 Pod 非要挤满某台已经被标记为不可用的机器,那你还可以创建 tolerations(容忍度) 规则,强行覆盖调度器的某些决定,这听起来可能有点绕,但其实就是为了给系统保留最后的灵活性。

理解 K8s容器调度并不是要你变成数学家,而是要让你明白它是如何通过预选和优选两道关卡来确保你的应用在最适合的环境中运行的,通过合理设置标签、亲和性规则和容忍度,你实际上是在教会调度器如何像一个有经验的管家一样去管理你的计算资源,确保每一分性能都能用在刀刃上,这就是为什么说掌握了调度机制,就能算是真正跨进了 Kubernetes 世界的大门,希望今天这篇“说人话”的解释能让你对容器调度有个大概的印象,下次再看到那行绿色的代码时,你就能心里有底多了,这就是科学地管理大规模容器集群的第一步。

新人入圈 👉 点击这里 👈

(备用微信号: domsm789

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇