一、QoS类
Kubernetes的QoS(Quality of Service)类别允许您指定可用于应用程序的可用资源数量,以便更好地控制应用程序的可用性。它还允许您限制特定应用程序的资源使用率,以帮助保护系统的稳定性和性能。
Kubernetes 创建 Pod 时就给它指定了下列三种 QoS 类:
-
Guaranteed
-
Burstable
-
BestEffort
1.1 QoS 类为 Guaranteed 的 Pod
对于 QoS 类为 Guaranteed 的 Pod:
-
Pod 中的每个容器都必须指定内存限制和内存请求。
-
对于 Pod 中的每个容器,内存限制必须等于内存请求。
-
Pod 中的每个容器都必须指定 CPU 限制和 CPU 请求。
-
对于 Pod 中的每个容器,CPU 限制必须等于 CPU 请求。
这些限制同样适用于初始化容器和应用程序容器。
下面是目录 qos-pod.yaml 容器的 Pod 配置文件。 容器设置了内存请求和内存限制,值都是 200 MiB。 容器设置了 CPU 请求和 CPU 限制,值都是 700 MiCPU:
[root@k8s-master-node1 kubernetes]# cat qos-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: qos-1
spec:containers:- name: qos-1image: nginx:latestresources:limits:cpu: "200m"memory: "700Mi"requests:cpu: "200m"memory: "700Mi"
-
创建Pod
[root@k8s-master-node1 kubernetes]# kubectl create -f qos-pod.yaml
pod/qos-1 created
-
查看Pod详情
输出结果表明 Kubernetes 为 Pod 配置的 QoS 类为 Guaranteed。 结果也确认了 Pod 容器设置了与内存限制匹配的内存请求,设置了与 CPU 限制匹配的 CPU 请求。
[root@k8s-master-node1 kubernetes]# kubectl describe pod qos-1
···Limits:cpu: 200mmemory: 700MiRequests:cpu: 200mmemory: 700Mi
···
QoS Class: Guaranteed
···
1.2 QoS 类为 Burstable 的 Pod
指定 Pod 的 QoS 类为 Burstable需要满足下面的两个条件:
-
Pod 不符合 Guaranteed QoS 类的标准。
-
Pod 中至少一个容器具有内存或 CPU 的请求或限制。
下面是目录 qos-pod-2.yaml 容器的 Pod 配置文件。 容器设置了内存限制 200 MiB 和内存请求 100 MiB。
apiVersion: v1
kind: Pod
metadata:name: qos-2
spec:containers:- name: qos-2image: nginxresources:limits:memory: "200Mi"requests:memory: "100Mi"
-
创建Pod
[root@k8s-master-node1 kubernetes]# kubectl create -f qos-pod.yaml
pod/qos-2 created
-
查看Pod详情
输出结果表明 Kubernetes 为 Pod 配置的 QoS 类为Burstable 。 结果也确认了 Pod 容器设置了与内存限制匹配的内存请求。
[root@k8s-master-node1 kubernetes]# kubectl describe pod qos-2
···Limits:memory: 200MiRequests:memory: 100Mi
···
QoS Class: Burstable
···
1.3 QoS 类为 BestEffort的Pod
对于 QoS 类为 BestEffort 的 Pod,Pod 中的容器必须没有设置内存和 CPU 限制或请求。
下面是目录 qos-pod-3.yaml 容器的 Pod 配置文件。 容器没有设置内存和 CPU 限制或请求。
[root@k8s-master-node1 kubernetes]# cat qos-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: qos-3
spec:containers:- name: qos-3image: nginx:latest
-
创建Pod
[root@k8s-master-node1 kubernetes]# kubectl create -f qos-pod.yaml
pod/qos-3 created
-
查看Pod详情
输出结果表明 Kubernetes 为 Pod 配置的 QoS 类为BestEffort
[root@k8s-master-node1 kubernetes]# kubectl describe pod qos-3 | grep QoS
QoS Class: BestEffort