当前位置: 首页 > news >正文

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

文章目录

  • 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-demoimage: stressargs:- --vm- "1"- --vm-bytes- 200Mresources:requests:memory: 50Milimits: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-demoimage: nginx#args:#- --vm#- "1"#- --vm-bytes#- 200Mresources:requests:cpu: 200mmemory: 50Milimits:cpu: 1memory: 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-demoimage: 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-demoimage: stressargs:- --vm- "1"- --vm-bytes- 1Gi				//和 Guaranteed 不同的是,该 Pod 申请了资源。resources:requests:memory: 500Milimits: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-demoimage: stressresources: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.lryc.cn/news/92521.html

相关文章:

  • 【pytorch】维度变换
  • vue3中的nextTick()
  • 高效学习传感器|霍尔式传感器
  • 2023年前端面试高频考点HTML5+CSS3
  • 企业开源测试项目实战(附全套实战项目教程+视频+源码)
  • 信创办公–基于WPS的EXCEL最佳实践系列 (创建表格)
  • 四、HAL_驱动机械按键
  • 机器学习实战六步法之数据收集方法(四)
  • 神经网络:CNN中的filter,kernel_size,strides,padding对输出形状的影响
  • Spring Boot集成Redisson布隆过滤器案例
  • 使用 VSCode SSH 公网远程连接本地服务器开发 - cpolar内网穿透
  • portraiture宿主插件最新v4中文版本下载及使用教程
  • 一. ATR技术指标的定义与运用
  • linux find帮助文档
  • 搜索与图论(acwing算法基础)
  • 【数据结构】何为数据结构。
  • 【P57】JMeter 保存响应到文件(Save Responses to a file)
  • Visual Studio 2022 v17.6 正式发布
  • std::chrono时间处理
  • ieda codeformatV2.xml
  • Hbase
  • [golang 微服务] 5. 微服务服务发现介绍,安装以及consul的使用,Consul集群
  • 【数据结构】哈希应用
  • 【 Python 全栈开发 - WEB开发篇 - 31 】where条件查询
  • Android系统的Ashmem匿名共享内存子系统分析(5)- 实现共享的原理
  • 谈一谈冷门的C语言爬虫
  • 基于状态的维护(CBM)如何推动设备效率提高?
  • DC LAB8SDC约束四种时序路径分析
  • 学生考试作弊检测系统 yolov8
  • 【基于容器的部署、扩展和管理】 3.2 基于容器的应用程序部署和升级