Kubernetes(k8s)中文文件 名詞解釋:Resource Quotas_Kubernetes中文社群
阿新 • • 發佈:2018-12-27
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相反 |