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

K8s Pod的QoS类

文章目录

  • Overview
  • Pod的QoS分类
    • Guaranteed
      • 1.如何将 Pod 设置为保证Guaranteed
      • 2. Kubernetes 调度器如何管理Guaranteed类的Pod
    • Burstable
      • 1. 如何将 Pod 设置为Burstable
      • 2.b. Kubernetes 调度程序如何管理 Burstable Pod
    • BestEffort
      • 1. 如何将 Pod 设置为 BestEffort
      • 2. Kubernetes 调度程序如何管理 BestEffort Pod
  • 结论

Overview

服务质量(QoS)类是 Kubernetes 的一个概念,调度器用它来决定 pod 的调度和驱逐优先级。
QoS 类是由 Kubernetes 分配给 pod 的,如以下示例所示,可以通过更改资源request和limit定义来设置。

Pod的QoS分类

  • Guaranteed
  • Burstable
  • BestEffort
    大致如下图所示:
    在这里插入图片描述

要解释 QoS 类,必须了解 cpu 和内存的“Request”和“Limit”概念。request是容器請求获得的资源,limit是容器能够获得的最大资源。

Guaranteed

1.如何将 Pod 设置为保证Guaranteed

Guaranteed类意味着request和limit的资源值是相同的。因为在任何情况下,容器将拥有完全相同的 CPU 和内存。
当request和limit的资源相同时,qosClass 标记如下:

root@k8smaster:~# kubectl get pod calico-node-pqgmw -n kube-system -o yaml|grep limits  -A 5;kubectl get pod calico-node-pqgmw -n kube-system -o yaml|grep qos
      limits:
        cpu: 250m
        memory: 70Mi
      requests:
        cpu: 250m
        memory: 70Mi
  qosClass: Guaranteed

2. Kubernetes 调度器如何管理Guaranteed类的Pod

Kubernetes 调度器通过确保所有容器的内存和 CPU 请求总和低于节点的总 CPU 和内存来管理保证Guaranteed类的 Pod
这些 Pod 优先级最高,除非系统超过资源限制,否则不会被终止。

Burstable

1. 如何将 Pod 设置为Burstable

当容器的内存或 CPU 的limit大于request的值时,Pod 会被分配为Burstable类。
当 Pod 需要一定范围的 CPU 或内存使用时,应使用此类。值可以在定义的request和limit之间。
当limit的值大于request的值时,qosClass 为Burstable,如下所示:


root@k8smaster:~#  kubectl get pod  etcd-k8smaster.pci.co.id -n kube-system -o yaml|grep resources -A 5;kubectl get pod  etcd-k8smaster.pci.co.id -n kube-system -o yaml|grep qos
    resources:
      limits:
        cpu: 100m
        memory: 100Mi
      requests:
        cpu: 100m
        memory: 100Mi
    startupProbe:
      failureThreshold: 24
  qosClass: Burstable

如果没有限制值,则 Pod 是“Burstable”,如下所示:

root@k8smaster:~#  kubectl get pod  etcd-k8smaster.pci.co.id -n kube-system -o yaml|grep resources -A 5;kubectl get pod  etcd-k8smaster.pci.co.id -n kube-system -o yaml|grep qos
    resources:
      requests:
        cpu: 100m
        memory: 100Mi
    startupProbe:
      failureThreshold: 24
  qosClass: Burstable

Kubernetes 调度程序如何管理Burstable Pod

2.b. Kubernetes 调度程序如何管理 Burstable Pod

Kubernetes 调度程序无法确保 Burstable Pod 部署到具有足够资源的节点。
如果没有 BestEffort 类 Pod,则这些 Pod 在达到限制时会先于 Guaranteed 类 Pod 被终止。

BestEffort

1. 如何将 Pod 设置为 BestEffort

当 pod 没有内存或 CPU request或limit的定义时,它会被标记为BestEffort类。
由于没有limits定义,标记为 BestEffort 的 pod 只能获取节点上剩余的内存或 CPU。
当没有limit或request值时,qosClass 如下所示为 BestEffort:

kubectl get pod kube-proxy-sndtg  -n kube-system -o yaml|grep -i resources -A 1 ;kubectl get pod kube-proxy-sndtg  -n kube-system -o yaml|grep -i qos
    resources: {}
    securityContext:
  qosClass: BestEffort

2. Kubernetes 调度程序如何管理 BestEffort Pod

BestEffort类的pod 不保证被管理到有足够资源的节点上。它们能够使用节点上的任何空闲资源。这有时可能会导致其他 pod 的资源问题。
这些类的 pod 优先级最低,如果系统没有内存,它们将首先被终止。

结论

Kubernetes 调度程序根据 Pod 的 QoS 类值来调度 Pod。Pod 的 QoS 类由容器的资源限制和请求定义指定。这些类会影响节点的资源利用率。为了有效利用可用资源,必须考虑它们。

相关文章:

  • 【NetTopologySuite类库】生成凸包
  • 关于怎么用Cubemx生成的USBHID设备实现读取一体的鼠标键盘设备(改进版)
  • 360数字安全:2024年2月勒索软件流行态势分析报告
  • 【html】简单网页模板源码
  • 在 Unreal Engine 5.4 中加载 5.3 版本的插件
  • 传统工科硕士想转嵌入式,时间够吗?
  • Java 的动态代理是基于什么原理?
  • 自然语言处理(NLP)技术。
  • 天行健咨询 | 谢宁DOE培训的课程内容有哪些?
  • Java为什么会成为现在主流的编程语言
  • mysql log_bin
  • 这才是计科之 Onix XV6 源码分析(3、Unix-like系统的进程调度模块)
  • 软件测试--Linux快速入门
  • 开源目标检测数据集汇总
  • 《PyTorch 实战宝典》重磅发布!
  • stack和queue的模拟实现
  • 后端进阶-分库分表
  • 使用 Apache Commons Exec 自动化脚本执行实现 MySQL 数据库备份
  • javascript导入excel文件
  • 如何搭建一台永久运行的个人服务器?
  • 俄乌交换205名被俘人员,俄方人员已抵达白俄罗斯
  • 沪幼升小网上报名明起开始,是否参与民办摇号怎么定?
  • 科技赋能文化体验,“五一”假期“海昏侯”人气创新高
  • 法国宣布投资1亿欧元吸引外国科研人员
  • 当一群杜克土木工程毕业生在三四十年后怀念大学的历史课……
  • “矿茅”国际化才刚开始?紫金矿业拟分拆境外黄金矿山资产于港交所上市