美文网首页
k8s sheduler的简单理解

k8s sheduler的简单理解

作者: Wu杰语 | 来源:发表于2021-07-22 18:17 被阅读0次

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调度过程
  • 当通过apiServer提交了各种调度api对象到Etcd后,infomer会把需要调度的api对象从Etcd中取出,放入Priority Queue中。
  • 在Scheduler Cache中缓存了集群相关信息, 调度器从Priority Queue中取出待调度api对象,从Scheduler Cache中取出集群节点信息,经过Predicates算法过滤出符合要求的Node信息,这里的要求就是Node可使用的cpu和memery是否满足Pod中的request的要求。Predictes 过滤有GeneralPredicates、Volume、宿主机、Pod等过滤规则。
  • Priorities对过滤出的Node进行优先级筛选,选出最佳的Node。注意这里的Priorities是指一个模块组件而不是Pod的优先级。
  • 当找到节点后,就把api对象和Node绑定起来,并更新相关的信息到Scheduler Cache和Etcd。
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的理解更加印证了这一点。

相关文章

  • k8s sheduler的简单理解

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

  • 如何看待 k8s 的 HPA

    ​ 最近被问到如何理解 k8s 弹性伸缩的这样的问题,而我最初的回答很简单也很肤浅,我说:k8s 是 H...

  • k8s集群搭建

    简介 k8s集群有两种方式 方式优势缺点kubeadm简单、快速无法更好的理解k8s各个组件之间的关系二进制包安装...

  • Kubernetes简单说

    简单说说k8s架构便于理解和记忆: 1. Kubernetes master(图中)负责管理子节点 API:...

  • k8s存储的简单理解

    学习过docker,我们知道在docker中可以配置volume,将容器内和本机地址映射起来,达到容器销毁后再次创...

  • Kubernetes容器编排技术

    k8s:云原生(在各种云都像是在本地部署<个人理解>)的基础设置 K8S宏观组件理解 service\lable ...

  • Kubernetes Ingress使用

    Ingress可以简单的理解成k8s内部的nginx, 用作负载均衡器, 这样是有很多好处的. 动态配置服务 如果...

  • k3s 运行dolphin scheduler

    今天看到dolphin sheduler毕业成为apache 顶尖项目,今天就拿它来玩下参考文章kubernete...

  • kubernetes(k8s) 介绍及简单例子

    本文为转载,原文:kubernetes(k8s) 介绍及简单例子 1. 介绍 Kubernetes(k8s)是自动...

  • kubernetes(k8s)修仙录总纲

    我是一个牛逼的目录 炼气境—第1层:理解K8S一些基础概念 炼气境—第2层: 理解K8S 的组件和架构计 炼气境—...

网友评论

      本文标题:k8s sheduler的简单理解

      本文链接:https://www.haomeiwen.com/subject/rncymltx.html