Kubernetes Pod QoS(服务等级)

刚才我们创建的 Pod 在 describe 的信息里有一个字段叫 Qos Class ,它的值是 Burstable。这是由 Pod 的 requests 和 limits 设计所决定的一个字段。Qos 全称是 Quality of Service, 表示了 Kubernetes 对不同的 Pod 因其 requests/limits 设置而对其运行情况的保障,具体分为以下几类:

  • Guaranteed: requests = limits ,二者是一样的值。高优先级,Kubernetes 保证只要资源使用不超过 limits 就不会被 kill
  • Burstable: requests < limits,Pod 可以使用 requests 到 limits 之间数量的资源,中优先级, 但是当机器资源紧张的时候,如果这些 Pod 对资源的使用超过了 requests ,就很有可能会被 kill 掉 (没有 BestEffort 的 pod 的情况下)
  • BestEffort: 没有设置具体的 requests 和 limits。低优先级, 如果机器资源紧张,这些 Pod 会优先被 kill 掉

由此可见,它其实是类似于 linux 中进程 priority 的一个概念,通过 requests 值和 limits 值的设置,让用户自己选择去将其应用划分为不同的优先级。我们上面使用的例子就是一个 Burstable 的 pod。下面我们看看其他的例子。

Guaranteed

文件名:pod-qos-guaranteed.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-qos-guaranteed
spec:
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
    resources:
      limits:
        memory: "200Mi"
        cpu: "700m"
      requests:
        memory: "200Mi"
        cpu: "700m"

这个示例中, requests = limits, 在命令行中执行如下命令进行创建:

kubectl create -f /share/lesson/kubernetes/pod-qos-guaranteed.yaml
kubectl describe po pod-qos-guaranteed | grep QoS

可以看到其 QoS Class 是 Guaranteed

BestEffort

文件名:pod-qos-besteffort.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-qos-besteffort
spec:
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

在命令行中执行如下命令进行创建:

kubectl create -f /share/lesson/kubernetes/pod-qos-besteffort.yaml
kubectl describe po pod-qos-besteffort | grep QoS

可以看到其 QosClass 为 BestEffort

移动端设备除iPad Pro外,其它移动设备仅能阅读基础的文本文字。
建议使用PC或笔记本电脑,浏览器使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。
您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关合作请扫描右侧二维码添加好友。

狐狸教程 Copyright 2021

进入全屏