文章目录

  • 01 引言
  • 02 案例
    • 2.1 创建PriorityClass
    • 2.2 Pod声明优先级类别
    • 2.3 注意事项
  • 03 文末

01 引言

声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记

对于运行各种负载(如:ServiceJob)的中等规模或者大规模的集群来说,出于各种原因,我们需要尽可能提高集群的资源利用率

提高资源利用率的常规做法是采用优先级方案,即不同类型的负载对应不同的优先级,同时允许集群中的所有负载所需的资源总量超过集群可提供的资源,在这种情况下,当发生资源不足的情况时,系统可以选择释放一些不重要的负载(优先级最低的),保障最重要的负载能够获取足够的资源稳定运行。

本文主要举例演示pod的优先级调度。

02 案例

2.1 创建PriorityClass

首先,由集群管理员创建PriorityClassPriorityClass不属于任何命名空间):

apiversion:scheduling.k8s.io/vlbetal kind:Priorityclass
metadata:name:high-priority
va1ue:1000000
globalDefault:false
description:"This priority class should be used for XYZ service pods only."

上述YAML文件定义了一个名为high-priority的优先级类别,优先级为 100000数字越大,优先级越高,超过一亿的数字被系统保留,用于指派给系统组件。

2.2 Pod声明优先级类别

可以在任意Pod上引用上述Pod优先级类别:

apiVersion: v1
kind: Pod
metadata:name: nginx labels:env: test
spec:containers:
- name: nginximage: nginximagePullPolicy: IfNotPresent priorityclassName: high-priority

如果发生了需要抢占的调度,高优先级Pod就可能抢占节点N,并将其低优先级Pod驱逐出节点N,高优先级Podstatus信息中的nominatedNodeName字段会记录目标节点的名称。

需要注意,高优先级Pod仍然无法保证最终被调度到节点N上,在节点N上低优先级Pod被驱逐的过程中,如果有新的节点满足高优先级Pod的需求,就会把它调度到新的Node

而如果在等待低优先级的Pod退出的过程中,又出现了优先级更高的Pod,调度器就会调度这个更高优先级的Pod到节点N上,并重新调度之前等待的高优先级Pod

2.3 注意事项

优先级抢占的调度方式可能会导致调度陷入“死循环”状态。当Kubernetes集群配置了多个调度器(Scheduler)时,这一行为可能就会发生,比如下面这个例子:

Scheduler A为了调度一个(批)Pod,特地驱逐了一些Pod,因此在集群中有了空余的空间可以用来调度,此时Scheduler B恰好抢在Scheduler A之前调度了一个新的Pod,消耗了相应的资源,因此,当Scheduler A清理完资源后正式发起Pod的调度时,却发现资源不足,被目标节点的kubelet进程拒绝了调度请求! 这种情况的确无解,因此最好的做法是让多个Scheduler相互协作来共同实现一个目标。

高优先级Pod抢占节点并驱逐低优先级的Pod,这个问题对于普通的服务型的
Pod来说问题不大,但对于执行批处理任务的Pod来说就可能是个灾难,当一个高 优先级的批处理任务的Pod创建后,正在执行批处理任务的某个低优先级的Pod可 能因为资源不足而被驱逐,从而导致对应的批处理任务被搁置。

为了避免这个问题发生,PriorityClass增加了一个新的属性一preemptionPolicy,当它的值为 preemptionLowerPriorty(默认)时,就执行抢占功能,当它的值被设置为Never 时,就默认不抢占资源,而是静静地排队,等待自己的调度机会

03 文末

最后要指出一点:使用优先级抢占的调度策略可能会导致某些Pod永远无法被 成功调度。因此优先级调度不但增加了系统的复杂性,还可能带来额外不稳定的因素。因此,一旦发生资源紧张的局面,首先要考虑的是集群扩容,如果无法扩容,则再考虑有监管的优先级调度特性,比如结合基于命名空间的资源配额限制来约束任意优先级抢占行为

本文主要讲解的是Pod的优先级调度的案例以及注意事项,希望能帮助到大家,谢谢大家的阅读,本文完!

k8s教程(pod篇)-优先级调度相关推荐

  1. k8s教程(pod篇)-定向调度

    文章目录 01 引言 02 举例 Step1:给Node打上标签 Step2:Pod指定NodeSelector Step3:验证 03 预定义的标签 04 文末 01 引言 声明:本文为<Ku ...

  2. k8s教程(Volume篇)-PVC详解

    文章目录 01 引言 02 PVC详解 2.1 参数配置 2.1.1 资源请求(Resources) 2.1.2 访问模式 (Access Modes) 2.1.3 存储卷模式(Volume Mode ...

  3. k8s教程(Volume篇)-PV详解

    文章目录 01 引言 02 PV详解 2.1 示例配置详解 2.1.1 存储容量 (Capacity) 2.1.2 存储卷模式 (Volume Modes) 2.1.3 访问模式 (Access Mo ...

  4. k8s查看pod的yaml文件_每天5分钟|轻松掌握开发工作中必会的k8s-yaml配置说明和常用命令...

    在 K8S 中,创建资源有两种方式: 方式一:使用kubectl 命令行,在输入kubectl命令的时候,填上对应的参数 优点:方便快捷,一行命令搞定 缺点:一行命令太多参数,可读性差,不利于维护 方 ...

  5. 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(上)

    目录 一.k8s 安全管理:认证.授权.准入控制概述 1.1 认证 认证基本介绍 授权基本介绍 准入控制基本介绍 为什么需要准入控制器呢? k8s 客户端访问 apiserver 的几种认证方式 ku ...

  6. K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目

    K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目 1.前言 2.简介 2.1.为什么写这篇文章 2.2.需求描述 2.3.需求分析 3. 部署实战 3.1 环境准备 3.2 i ...

  7. 万字长文:K8s 创建 pod 时,背后到底发生了什么?

    本文基于 2019 年的一篇文章What happens when ... Kubernetes edition![1]梳理了 K8s 创建 pod(及其 deployment/replicaset) ...

  8. 【K8S】整体原理-什么是K8S的Pod

    什么是Pod Pod是K8S的一个逻辑概念,Pod其实是一组紧密协作的容器,容器就是我们应用程序执行代码的地方,在K8S里管理员要去管理应用的生命周期(包括异常退出等),那就需要获取应用运行的状态,获 ...

  9. 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(下)

    目录 一.常见角色(role)授权的案例 1.1 允许读取核心 API 组的 Pod 资源 1.2 允许读写 apps API 组中的 deployment 资源 1.3 允许读取 Pod 以及读写 ...

最新文章

  1. 编者序:初衷、计划、要求、优势、目标和展望
  2. R语言split函数、unsplit函数按组拆分数据、合并数据实战
  3. shell中的PS命令的含义
  4. img设置宽高不生效_便宜 好用 不掉盘 保姆级粒子云刷机攻略
  5. Facebook 被指收集用户数据:通过照片和文本
  6. find命令 -- 之查找指定时间内修改过的文件
  7. Android P(3)---Android P版本刘海屏适配指南
  8. H.264(MPEG)-4AVC
  9. python MySQL操作(增删改查)
  10. java web 视频教程下载_Java web(Servlet+Jsp),视频教程下载
  11. 微擎小程序PHP,微擎配置小程序教程
  12. kafka 精准一次性
  13. 会议论文分析-CCS21-ML增强的符号执行方法
  14. 计算机软件考试成绩查询时间,2020年计算机软考什么时候出成绩,怎么查成绩?|...
  15. 彻底解决“Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA”警告
  16. kingcms常用标记
  17. 《从1到N企业数字化生存指南》读书笔记
  18. 什么是大数据的ETL
  19. 仿花瓣网html模板,仿花瓣网的自动悬浮导航效果 jquery
  20. 四月单向历——你是人间四月天

热门文章

  1. HTTPS双向认证破解抓包
  2. 落谷CF1003A Polycarp's Pockets
  3. Android xUtils3
  4. 白话“主成分分析” 1 :主成分分析用于降维的思想
  5. Hive SQL进阶案例(一):使用LAG函数判断日期连续性
  6. Ubuntu中C语言和C++的区别
  7. 利用Sigrity的SPEED2000进行时域电源噪声分析
  8. VS之实现计时器的几种方法
  9. 名画372 清代 佚名《静观万物册七开》
  10. 动态规划:得到目标货币的方法数(有限张货币 + 面值相同的货币相同)