k8s sheduler的简单理解

2021-07-22  本文已影响0人  Wu杰语

k8s是云时代的“操作系统”,对于k8s的理解,我们可以对照操作系统来学习理解。本篇我们对schduler组件进行简单理解。

Scheduler

先看一下k8s的部署图


k8s部署图

要理解的组件是Scheduler组件。

scheduler组件干啥的,顾名思义,这是一个调度器。和操作系统比较一下,操作系统的调度器有哪些关节概念:

下面我们对比一下。

k8s调度对象

操作系统调度的对象是进程,k8s调度的是什么呢,是Pod,Pod是k8s的最小调度对象。

进程中有占用的代码段、数据段、堆、进程指针等关键信息,Pod中的关键信息是什么。


apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: test
    image: test
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

如上Pod描述,关心的是cpu和memory,cpu是可压缩资源,memory是不可压缩资源,可压缩资源不够只会饥饿不会挂,不可压缩资源不够会挂掉。

其中limits对应的是操作系统底层的Cgroups 的 cpu.cfs_quota_us和memory.limit_in_bytes,request对应的是操作系统底层的cpu.shares。

k8s调度过程
k8s调度过程
Pod的优先级

Pod的优先级是怎么定义的呢?见如下资源定义:


apiVersion: scheduling.k8s.io/v1beta1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for high priority service pods only."

k8s默认的优先级最大值就是1000000。优先级越高,在上述k8s调度图中,该api对象会排在PriorityQueue的前面,会优先被调度。相比于操作系统的优先级定义,这里的优先级定义更加简单直接。

抢占式调度

和操作系统的占式调度相比,k8s的抢占式调度也是一样的,所不同的是,为了让高优先级的Pod调度成功,需要将低优先级的Pod给delete掉。

小结

k8s是云时代的“操作系统”是一个很好的比喻,既说明了k8s的价值,有说明了k8s的运转和操作系统类似。对于Scheduler的理解更加印证了这一点。

上一篇 下一篇

猜你喜欢

热点阅读