CKA 09_Kubernetes工作负载与调度 资源调度 三类QoS request 资源需求 limit 资源限额

news2024/11/27 15:33:35

文章目录

  • 1. 资源调度
    • 1.1 准备工作
    • 1.2 为什么需要 request 和 limit
    • 1.3 内存限制
      • 1.3.1 Brustable
      • 1.3.2 Guaranteed
      • 1.3.3 BestEffort
      • 1.3.4 当容器申请的资源超出 limit 和 request
    • 1.4 CPU限制

1. 资源调度

1.1 准备工作

  • Kubernetes 采用 requestlimit 两种限制类型来对资源进行分配。
    request(资源需求):即运行 Pod 的节点必须满足运行 Pod 的最基本需求才能运行 Pod 。
    limit(资源限额):即运行 Pod 期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。

  • 资源类型:

    • CPU 的单位是核心数,内存的单位是字节。
      • 一个容器申请 0.5 个CPU,就相当于申请 1 个CPU的一半,你也可以加个后缀 m 表示千分之一的概念。比如说 100m 的CPU,100豪 的 CPU 和 0.1 个 CPU 都是一样的。
    • memory 内存单位:
      • K、M、G、T、P、E #通常是以1000为换算标准的。
      • Ki、Mi、Gi、Ti、Pi、Ei #通常是以1024为换算标准的。
    • ephemeral-storage: 临时存储
    • extended-resource:gpu

1.2 为什么需要 request 和 limit

  • 三类 QoS 及适应场景

    • Guaranteed 敏感型、需要保障的业务
    • Burstable 次敏感型、需要弹性的业务
    • BestEffort 可容忍型业务
  • 不同的 QoS 对调度的影响

    • 调度器使用 request 进行调度
    • CPU 按照 request 划分权重
    • memory 划分 OOMScore
    • BestEffort 会被优先驱离

1.3 内存限制

官方文档:任务 | 配置 Pods 和容器 | 为容器和 Pod 分配内存资源

1.3.1 Brustable

  1. 创建 Pod
  • 该 Pod 中的容器会申请 200M 的内容,并且内存最基本需求是50 MiB,最大不能超过 100MiB
  • 上下文冲突了,所以,在生效时一定会失败
[root@k8s-1 ~]# vim memory-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: stress
    args:
    - --vm
    - "1"
    - --vm-bytes
    - 200M
    resources:
      requests:
        memory: 50Mi
      limits:
        memory: 100Mi
  1. 生效后,发现 Pod 处于失败的状态
[root@k8s-1 ~]# kubectl apply -f memory-pod.yaml 
pod/memory-demo created
[root@k8s-1 ~]# kubectl get pod

在这里插入图片描述

  1. 查看 Pod 的状态,发现该 Pod 的 QoS 为 Brustable(弹性业务)
[root@k8s-1 ~]# kubectl describe pod memory-demo 
......
QoS Class:                   Burstable
......

在这里插入图片描述

  1. 查看 Pod 的运行日志
kubectl logs memory-demo

在这里插入图片描述

  1. 创建 Pod
  • 该 Pod 限制最少需要 200豪 CPU 和 50MiB 内存,最多不能超过 1 个 CPU 和 100MiB 内存
[root@k8s-1 ~]# vim memory-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: nginx
    #args:
    #- --vm
    #- "1"
    #- --vm-bytes
    #- 200M
    resources:
      requests:
        cpu: 200m
        memory: 50Mi
      limits:
        cpu: 1
        memory: 100Mi
  1. 生效后,Pod 正常运行
[root@k8s-1 ~]# kubectl apply -f memory-pod.yaml 
pod/memory-demo created
[root@k8s-1 ~]# kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
memory-demo   1/1     Running   0          15s
  1. 查看 Pod 的状态,发现它的 QoS 为 Brustable
[root@k8s-1 ~]# kubectl describe pod memory-demo 

在这里插入图片描述

1.3.2 Guaranteed

  • 当运行重要业务时,使用 Guaranteed
  1. 创建 Pod
  • 将该 Pod 的资源限制 limit 和 request 设置成一样的
[root@k8s-1 ~]# vim memory-pod.yaml 

在这里插入图片描述

  1. 生效后,查看 Pod 的运行状态和状态信息
  • 发现 Pod 的 QoS 是 Guaranteed(敏感型、需要保障的业务)
    在这里插入图片描述

1.3.3 BestEffort

  1. 创建 Pod
  • limit 和 request 都不设置
[root@k8s-1 ~]# vim memory-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: nginx
    #args:
    #- --vm
    #- "1"
    #- --vm-bytes
    #- 200M
    #resources:
    #  requests:
    #    cpu: 200m
    #    memory: 50Mi
    #  limits:
    #    cpu: 1
    #    memory: 100Mi
  1. 生效后,查看 Pod 的运行状态和状态信息
  • 发现 Pod 的 QoS 为 BestEffort(可容忍型业务
  • 当资源不够时,为保证集群节点的运行状态,会驱离该 Pod,因为 BestEffort 的优先级很低
[root@k8s-1 ~]# kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
memory-demo   1/1     Running   0          16s
[root@k8s-1 ~]# kubectl describe pod memory-demo 

在这里插入图片描述

1.3.4 当容器申请的资源超出 limit 和 request

  1. 创建 Pod
  • 该 Pod 申请 1G 的内存资源,但是限制其最多最少只能使用 500M 内存
  • 所以,在生效后,这个 Pod 一定是失败的
[root@k8s-1 ~]# vim memory-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: stress
    args:
    - --vm
    - "1"
    - --vm-bytes
    - 1Gi				//和 Guaranteed 不同的是,该 Pod 申请了资源。
    resources:
      requests:
        memory: 500Mi
      limits:
        memory: 500Mi
  1. 生效后,发现 Pod 失败

在这里插入图片描述

1.4 CPU限制

官方文档: 任务 | 配置 Pods 和容器 | 为容器和 Pod 分配 CPU 资源

  1. 先查看主机的 CPU 信息
  • 当前主机是 2 个 核
[root@k8s-1 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 94
Model name:            Intel Core Processor (Skylake, IBRS)
Stepping:              3
CPU MHz:               2304.000
BogoMIPS:              4608.00
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
L3 cache:              16384K
NUMA node0 CPU(s):     0,1
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 arat umip spec_ctrl intel_stibp arch_capabilities
  1. 创建 Pod
  • 该 Pod 申请 2 个 CPU,资源限制最少 5 个 CPU,最多不能超过 10 个 CPU
[root@k8s-1 ~]# cp memory-pod.yaml cpu.yaml
[root@k8s-1 ~]# vim cpu.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: cpu-demo
spec:
  containers:
  - name: cpu-demo
    image: stress
    resources:
      limits:
        cpu: "10"
      requests:
        cpu: "5"
    args:
    - -c
    - "2"
  1. 生效后,查看 Pod 运行状态和状态信息
  • 发现 Pod 处于 Pending 状态
  • 调度器主要查看的是 request 的限制,request 设置最少不能低于 5 个 CPU,但是主机只有 2 个CPU,所以,调度失败
[root@k8s-1 ~]# kubectl get pod
NAME       READY   STATUS    RESTARTS   AGE
cpu-demo   0/1     Pending   0          5s
  • 该 Pod 也一直被 kubelet 重启,但是,发现集群的 3 个节点都无法提高 5 个 CPU ,所以,Pod 自始至终都是 Pending 的状态
[root@k8s-1 ~]# kubectl describe pod cpu-demo 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国电子学会2023年05月份青少年软件编程Python等级考试试卷一级真题(含答案)

2023-05 Python一级真题 分数:100 题数:37 测试时长:60min 一、单选题(共25题,共50分) 1. 可以对Python代码进行多行注释的是?(C ) A.# B." " C. D. 2. 下列可以作为Py…

ChatGPT有哪些神奇的使用方式? ChatGPT十大功能

原文:ChatGPT有哪些神奇的使用方式? ChatGPT十大功能_其他工具_软件教程_脚本之家 随着微软、百度等巨头加码,AIGC(人工智能自动生成内容)领域或将成为2023年最值得关注的、全球最热门赛道。AI大模型相当于是通过积累大量知识&a…

MT6705B 同步整流器

MT6705B 是用于反激式变换器的高性能45V 同步整流器。它兼容各种反激转换器类型。支持 DCM、CCM 和准谐振模式。MT6705B集成了一个40V功率MOSFET&#xff0c;可以取代肖特基二极管&#xff0c;提高效率。V SW <V TH-ON 时&#xff0c;内部 MOSFET 导通。V SW >V TH-OFF 时…

前端响应式布局--更新中

前端响应式布局原理与方案&#xff08;详细版&#xff09; 文章目录 媒体查询Grid布局Flex布局 响应式布局&#xff1a;在不同屏幕尺寸下&#xff0c; 同一页面有不同的布局。 传统的开发模式&#xff1a;PC端搞一套布局&#xff0c;移动端搞一套布局。 使用了响应式布局&#…

SpringBoot中集成Swagger2

介绍 Swagger是非常流行的API框架&#xff0c;能够自动生成RESTFul 风格的API文档&#xff0c;还可以在线测试后台接口。 使用Swagger你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;再通过Swagger衍生出来的一系列项目和工具&#xff0c;就可以做到生成各种格式…

【论文阅读】Language Models are Few-Shot Learners(GPT-3)

前言 本文简要介绍了GPT-3的背景&#xff0c;模型架构&#xff0c;训练数据以及训练方式部分。具体训练细节&#xff0c;实验结果很多&#xff0c;可以在用到的时候再看 Intro 本文剖析了pretrain-finetune架构存在的问题&#xff1a; 对于每个新的任务&#xff0c;都需要大…

kotlin withTimeoutOrNull超时返回

kotlin withTimeoutOrNull超时返回 import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withTimeoutOrNullfun main(args: Array<String>) {testTimeOut(1000) //如果是2000&#xff0c;则正常返回 OK }fun testTimeOut(…

OpenGL 坐标系统

1.简介 OpenGL希望在每次顶点着色器运行后&#xff0c;我们可见的所有顶点都为标准化设备坐标。也就是说&#xff0c;每个顶点的x&#xff0c;y&#xff0c;z坐标都应该在-1.0到1.0之间&#xff0c;超出这个坐标范围的顶点都将不可见。将坐标变换为标准化设备坐标&#xff0c;接…

在职读研探索更大的世界,中国人民大学与加拿大女王大学金融硕士给予你前行的力量

生活总是在变化中前进&#xff0c;这个世界从未停止过为我们带来新的挑战和机遇。职场中我们偶尔会感到困惑和迷茫&#xff0c;不知道该怎么去做。但我们可以选择去发现更大的世界&#xff0c;重新定义自己。中国人民大学与加拿大女王大学金融硕士项目给予你前行的力量。 知识…

建站教程:阿里云服务器安装宝塔面板搭建网站全流程

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云服务器网以CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账号和密码…

浅谈集群,分布式和微服务的区别

一.概念 集群&#xff1a; 分布式&#xff1a; 微服务&#xff1a; 二.区别 集群是多台服务器一起处理同一个业务,可以使用负载均衡使得每一个服务器的负载相对平衡,集群中的一台服务器出现问题,该服务器所负责的业务可以由其他的服务器代为处理。直白一点:就是只有一个项目&…

深入理解PE,手工制作64位PE程序

深入理解PE&#xff0c;手工制作64位PE程序 文章目录 深入理解PE&#xff0c;手工制作64位PE程序手工构建64位PE程序制作准备创建一个空文件Dos头 IMAGE_DOS_HEADERNT头 IMAGE_NT_HEADERS文件头 IMAGE_FILE_HEADER可选头 IMAGE_OPTIONAL_HEADER64 节区头 IMAGE_SECTION_HEADER.…

基本 SQL 命令 、重要的 SQL命令、SQL 约束 及 SQL语句 的 执行顺序

学习目标&#xff1a; 学习目标如下&#xff1a; SQL语句执行顺序 学习内容&#xff1a; 基本 SQL 命令&#xff1a; FROMONJOINWHEREGROUP BYAGG_FUNCWITHHAVINGSELECT 从数据库中提取数据UNIONDISTINCTORDER BY 排序LIMIT 重要的sql命令&#xff1a; 1、SELECT - 从数据…

Java --- springboot3之嵌入式容器原理

目录 一、嵌入式容器 1.1、自动配置原理 1.2、相关操作 二、切换服务器 一、嵌入式容器 Servlet容器&#xff1a;管理、运行Servlet组件&#xff08;Servlet、Filter、Listener&#xff09;的环境&#xff0c;一般指服务器 1.1、自动配置原理 1、SpringBoot 默认嵌入Tomc…

打死也要学完的vue

目录 创建一个 Vue 应用# 应用实例# 根组件# 挂载应用# DOM 中的根组件模板# 应用配置# 多个应用实例# 模板语法# 文本插值# 原始 HTML# Attribute 绑定# 简写# 布尔型 Attribute# 动态绑定多个值# 使用 JavaScript 表达式# 仅支持表达式# 调用函数# 受限的全…

华为OD机试真题B卷 Java 实现【计算礼品发放的最小分组数目】,附详细解题思路

一、题目描述 又到了一年的末尾&#xff0c;项目组让小明负责新年晚会的小礼品发放工作。 为使得参加晚会的同时所获得的小礼品价值相对平衡&#xff0c;需要把小礼品根据价格进行分组&#xff0c;但每组最多只能包括两件小礼品&#xff0c;并且每个分组的价格总和不能超过一…

Calling Add-ins (C#)

本范例展示如何通过实现 IEdmAddIn5::GetAddInInfo 和 IEdmAddIn5::OnCmd 去创建一个当用户在数据卡中点击一个按钮时被调用的Visual C# add-in程序。这个add-in在用户浏览文件时打开一个对话框. add-in 将所选文件的路径复制到 文件的数据卡。 注意&#xff1a; 因为 SOLIDWO…

【图书推荐 | 12】前端系列

【赠书活动第十二期 】 图书推荐 本期书籍&#xff1a;前端系列 图书列表&#xff1a; Vue.js核心技术解析Nuxt.js实战Nuxt.js Web开发实战HTML5CSS 从入门到精通Flutter2 开发实例精解Electron项目开发实战 Vue.js核心技术解析 Nuxt.js实战 Nuxt.js Web开发实战 HTML5CSS 从入…

算法与数据结构基数排序

一、基数排序算法示意图 下方的基数排序算法的实现是利用“桶”来实现的&#xff0c;首先我们创建10个桶&#xff0c;然后按照基数入桶&#xff0c;基数的取值是从数字的低位到高位以此取值。我们还是以[62, 88, 58, 47, 62, 35, 73, 51, 99, 37, 93]这个序列为例&#xff0c;…

PINN学习与实验之拟合sin(x)

首先给出数学上的知识。 1. 2. 3. 其次给出PINN最基础的理解与应用说明。 1.PINN中的MLP多层感知机的作用&#xff1f; 答&#xff1a;目的是用来拟合出我们需要的那个 常微分方程&#xff0c;即函数逼近器。 2.PINN中物理信息的作用&#xff1f; 答&#xff1a;用于约束MLP反向…