• K8s Pod的QoS类


    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 类由容器的资源限制和请求定义指定。这些类会影响节点的资源利用率。为了有效利用可用资源,必须考虑它们。

  • 相关阅读:
    硅-罗丹明-二苯并环辛炔;硅基罗丹明-二苯并环辛炔染料,SIR-DBCO,CAS号:2259859-41-9
    前端性能优化
    【面试题精讲】Java移位运算符
    求臻医学:实体肿瘤FDA/NMPA新获批抗癌药物/适应症盘点
    计算机相关内容的网站主题说明书
    OSPF—— LSA-1和 LSA-2
    Dockerfile(3) - WORKDIR 指令详解
    细说react源码中的合成事件
    图计算发展简史(上)
    高阶组件使用
  • 原文地址:https://blog.csdn.net/weixin_43230594/article/details/139439109