kubernetes集群之資源配額(Resource Quotas)


一.簡單介紹

資源配額(Resource Quotas)是用來限制用戶資源用量的一種機制。 它的工作原理為:
資源配額應用在Namespace上,並且每個Namespace最多只能有一個ResourceQuota對象
開啟計算資源配額后,創建容器時必須配置計算資源請求或限制(也可以LimitRange設置默認值)
用戶超額后禁止創建新的資源

二.資源配額的啟用

首先,在API Server啟動時配置ResourceQuota adminssion control,然后在namespace中創建ResourceQuota對象即可。

三.資源配額的類型

  • 計算資源,包括cpu和memory
    • cpu,limits.cpu,requests.cpu
    • memory,limits.memory,requests.memory
  • 存儲資源,包括存儲資源的總量以及制定的storage class的總量
    • requests.storage:存儲資源總量,如500Gi
    • persistentvolumeclaims:pvc的個數
    • .storageclass.storage.k8s.io/requests.storage
    • .storageclass.storage.k8s.io/persistentvolumeclaims
  • 對象數,即可創建的對象的個數
    • pods, replicationcontrollers, configmaps, secrets
    • resourcequotas, persistentvolumeclaims
    • services, services.loadbalancers, services.nodeports

四.LimitRange

默認情況下,kubernetes中所有容器都沒有任何cpu和內存限制。limitRange用來給Namespace增加一個資源限制,包括最小、最大和默認資源。比如:

apiVersion: v1
kind: LimitRange
metadata:
  name: mylimits
spec:
  limits:
  - max:
      cpu: "2"
      memory: 1Gi
    min:
      cpu: 200m
      memory: 6Mi
    type: Pod
  - default:
      cpu: 300m
      memory: 200Mi
    defaultRequest:
      cpu: 200m
      memory: 100Mi
    max:
      cpu: "2"
      memory: 1Gi
    min:
      cpu: 100m
      memory: 3Mi
    type: Container

五.kubernetes Resource QoS Classes 介紹

對於每一種Resource都可以將容器分為三種Qos Classes: Guaranteed,Burstable,Best-Effort,它們的QoS級別依次遞減。

5.1 Guaranteed

如果pod中所有Container的所有Resource的limit和request相等都不為0,則這個Pod的Qos Class就是Guaranteed。
注意:如果一個容器只指明了limit,而未指明request,則表明request的值等於limit的值。
例子如下:

containers:
    name: foo
        resources:
            limits:
                cpu: 10m
                memory: 1Gi
    name: bar
        resources:
            limits:
                cpu: 100m
                memory: 100Mi
containers:
    name: foo
        resources:
            limits:
                cpu: 10m
                memory: 1Gi
            requests:
                cpu: 10m
                memory: 1Gi

    name: bar
        resources:
            limits:
                cpu: 100m
                memory: 100Mi
            requests:
                cpu: 100m
                memory: 100Mi

5.2 Best-Effort

如果Pod中所有容器的所有Resource的request和limit都沒有賦值,則這個Pod的QoS Class就是Best-Effort.

containers:
    name: foo
        resources:
    name: bar
        resources:

5.3 Burstable
除了符合Guaranteed和Best-Effort的場景,其他場景的Pod QoS Class都屬於Burstable。
注意:當limit值未指定時,其有效值其實是對應Node Resource的Capacity。

# 容器bar沒有對Resource進行指定。
containers:
    name: foo
        resources:
            limits:
                cpu: 10m
                memory: 1Gi
            requests:
                cpu: 10m
                memory: 1Gi

    name: bar
# 容器foo和bar對不同的Resource進行了指定。
containers:
    name: foo
        resources:
            limits:
                memory: 1Gi

    name: bar
        resources:
            limits:
                cpu: 100m
容器foo未指定limit,容器bar未指定request和limit。
containers:
    name: foo
        resources:
            requests:
                cpu: 10m
                memory: 1Gi

    name: bar


免責聲明!

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



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