1. 程式人生 > >Kubernetes(k8s)中文文件 名詞解釋:Resource Quotas_Kubernetes中文社群

Kubernetes(k8s)中文文件 名詞解釋:Resource Quotas_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

計算資源示例

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    pods: "4"
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

物件個數示例

apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-counts
spec:
  hard:
    configmaps: "10"
    persistentvolumeclaims: "4"
    replicationcontrollers: "20"
    secrets: "10"
    services: "10"
    services.loadbalancers: "2"

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
$ kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/limits.yaml --namespace=limit-example
limitrange "mylimits" created
$ kubectl describe limits mylimits --namespace=limit-example
Name:   mylimits
Namespace:  limit-example
Type        Resource      Min      Max      Default Request      Default Limit      Max Limit/Request Ratio
----        --------      ---      ---      ---------------      -------------      -----------------------
Pod         cpu           200m     2        -                    -                  -
Pod         memory        6Mi      1Gi      -                    -                  -
Container   cpu           100m     2        200m                 300m               -
Container   memory        3Mi      1Gi      100Mi                200Mi              -

配額範圍

每個配額在建立時可以指定一系列的範圍

範圍 說明
Terminating podSpec.ActiveDeadlineSeconds>=0的Pod
NotTerminating podSpec.activeDeadlineSeconds=nil的Pod
BestEffort 所有容器的requests和limits都沒有設定的Pod(Best-Effort)
NotBestEffort 與BestEffort相反
K8S中文社群微信公眾號