kubenetes之配置pod的QoS


系列目錄

上節提到過,QoS影響pod的調度和驅離,本節講解如何通過配置pod來使它自動被賦予一個QoS

實際上是pod的配置達到一定標准,則kubernetes會自動為其它添加一個QoS類

QoS類型

當一個pod被創建,kubernetes會賦予它們以下類型的值之一

  • Guaranteed

  • Burstable

  • BestEffor

並且上一節我們講過,從上到下,他們的質量依次降低.

創建示例名稱空間

kubectl create namespace qos-example

創建一個會被賦予Guaranteed類型QoS的pod

滿足以下條件的pod將會被賦予GuaranteedQoS類型

  • pod中每個容器都必須包含內存請求和限制,並且值相等

  • pod中每個容器都必須包含cpu請求和限制,並且值相等

下面是一個pod中的container的配置.它包含內存請求和限制,並且值都等於200M;都包含cpu請求和限制,值都是700milliCPU

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "200Mi"
        cpu: "700m"
      requests:
        memory: "200Mi"
        cpu: "700m"

我們創建它

kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod.yaml --namespace=qos-example

我們來查看它的信息

kubectl get pod qos-demo --namespace=qos-example --output=yaml
spec:
  containers:
    ...
    resources:
      limits:
        cpu: 700m
        memory: 200Mi
      requests:
        cpu: 700m
        memory: 200Mi
...
  qosClass: Guaranteed

輸出信息顯示kubernetes給它了一個Guaranteed類型的QoS.同時也驗證了它的內存請求與限制相同,cpu請求與限制也相同.

請注意,如果pod僅聲明了內存限制,而沒聲明內存請求,則kubernetes會自動賦予它與限制相同的內存請求.對於cpu也是這樣的.

還要注意的是前面我們講過LimitRange會自動賦予默認值,但是本篇我們並沒有設置LimitRange,因此以上行為是kubernetes的默認行為,而非由LimitRange超作用.同時,即便設置了LimitRange,當僅設置了限制的時候,kubernetes也會自動將請求設置為與限制一樣的值,而不是默認值.當然,當僅僅設置了請求而沒設置限制,kubernetes在沒有LimitRange的情況下為會有自動行為,當有LimitRange會自動設置為默認值.

創建一個會被賦予BurstableQoS類型的pod

當符合以下條件時,一個pod會被賦予Burstable類型的QoS

  • Pod不符合Guaranteed類型的QoS要求

  • pod至少設置了內存或者cpu請任一

以下是配置文件

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-2
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-2-ctr
    image: nginx
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "100Mi"

創建pod

kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-2.yaml --namespace=qos-example

查看它的信息

kubectl get pod qos-demo-2 --namespace=qos-example --output=yaml
spec:
  containers:
  - image: nginx
    imagePullPolicy: Always
    name: qos-demo-2-ctr
    resources:
      limits:
        memory: 200Mi
      requests:
        memory: 100Mi
...
  qosClass: Burstable

輸出信息顯示kubernetes給它了一個Burstable類型的QoS

創建一個會被賦予BestEffortQoS類型的pod

一個pod即沒有內存限制或請求也沒有cpu限制或請求,則會被賦予BestEffort

以上可以翻譯為pod的資源里沒有任何關於cpu和內存的配置.

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-3
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-3-ctr
    image: nginx

創建它

kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-3.yaml --namespace=qos-example

查看信息

kubectl get pod qos-demo-3 --namespace=qos-example --output=yaml
spec:
  containers:
    ...
    resources: {}
  ...
  qosClass: BestEffort

創建一個包含兩個容器的pod

以下配置的pod包含兩個容器,其中一個聲明了內存限制為200M.另一個則沒有聲明任何請求或者限制

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-4
  namespace: qos-example
spec:
  containers:

  - name: qos-demo-4-ctr-1
    image: nginx
    resources:
      requests:
        memory: "200Mi"

  - name: qos-demo-4-ctr-2
    image: redis

創建后查看輸出信息

spec:
  containers:
    ...
    name: qos-demo-4-ctr-1
    resources:
      requests:
        memory: 200Mi
    ...
    name: qos-demo-4-ctr-2
    resources: {}
    ...
  qosClass: Burstable


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM