一、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