7限制cpu使用_Kubernetes 资源配额使用指南 | Linux 中国
資源配額控制應用的 CPU 或內存使用情況,防止資源被過量使用或被搶占。
? 來源:linux.cn ? 作者:Mike Calizo ? 譯者:zwb ?
(本文字數:4695,閱讀時長大約:5 分鐘)
當 Kubernetes 集群運行過一段時間或者在被開發者大量使用后, Kubernetes 資源(例如 CPU 和內存)的控制的問題就會顯現出來。而在大多情況下只有集群出問題后,我們才會意識到資源控制的重要性。
Kubernetes 部署過程如果沒有能充分考慮到將來的擴展性,資源類問題將會非常常見,此類問題與集群的管理和部署團隊的經驗有關。
如果不加以合理控制,一個暴力的應用或者開發者可能影響到共享該集群的所有業務,大家因此會相互埋怨、指責并保護性地搶占資源。這對于集群管理和開發人員都是非常難以處理的場景。
在 Kubernetes 環境中控制應用的計算資源使用有多種方式。大部分情況下,我們可以使用“資源控制”和“限制范圍”。注意存儲管理不在我們討論范圍之內,存儲管理可以通過 持久卷(Persistent Volume) 件,以實現針對不同的存儲控制需求。
資源配額是一種控制 Kubernetes 計算資源的方法。本文告訴你如何使用該功能來管理開發人員行為并控制應用的資源使用。
什么是資源配額
簡而言之, 資源配額 提供了限制每個命名空間資源消耗的約束條件,它們只能在命名空間級別上應用,這意味著它們可以應用于計算資源,并限制命名空間內的對象數量。
Kubernetes資源配額通過 ResourceQuota 對象來為每個命名空間設置資源配額,對以下對象類型的 CPU 和內存進行限制:
吊艙(Pod)
服務(Service)
機密信息(Secret)
持久卷斷言(Persistent Volume Claim)(PVC)
配置映射(ConfigMap)
Kubernetes 通過 request 和 limit 兩個參數對 CPU 和內存進行限制(參考 LimitRange 文檔)。前者表示容器最小被保證資源,后者表示容器最大可用資源。實際上最大可用資源還受限于其它容器的實際使用情況。
下一張圖片解釋了配額中 request 和 limit 的區別:
Requests and limits in Kubernetes resource quotas
下面我們就通過一個例子來說明如何設置資源配額來創建約束,將應用程序限制在某些資源上,它還展示了實現資源配額以獲得對 Kubernetes 的控制的有用性。
準備環境
首先你需要一個 Kubernetes 環境。以下是我使用 Kubernetes 環境:
Minikube v1.14.2Fedora 33 操作系統互聯網接入如果你想在 Linux 機器上通過 Minikube 搭建 Kubernetes 測試環境,可以參考 Bryant Son 的《 Minikube 入門 》 一文。Window 或者 macOS 用戶可以參考 這篇文章 。
設置資源配額
這里我們僅展示 CPU 配額設置步驟,配置內存配額或兩者的組合與之類似。
在生產環境中,CPU 是最需要被控制的資源,尤其是在多應用的場景下特別需要注意防止某些應用消耗太多 CPU 而影響到其它應用。
首先我們創建一個命名空間,在其中設置 CPU 配額:
$ kubectl create namespace quota-testnamespace/quota-test created準備 cpu-quota.yaml 文件,內容如下:
apiVersion: v1kind: ResourceQuotametadata:??name: test-cpu-quotaspec:??hard:????requests.cpu: "100m"??????limits.cpu: "200m"應用 CPU 配額到 Kubernetes 集群:
$ kubectl apply -f cpu-qouta.yamlresourcequota/test-cpu-quota created使用 kubectl describe 檢查配額配置情況:
$ kubectl describe resourcequota/test-cpu-quota --namespace quota-testName:???????? test-cpu-quotaNamespace:????quota-testResource??????Used??Hard--------??????----??----limits.cpu????0???? 200mrequests.cpu??0???? 100m在 Used resources 列中顯示了當前情況,該列值會隨著 吊艙(Pod)的部署而變化。
下面是我們來驗證限額管理的場景。我們將在同一命名空間下部署三個不同的吊艙,為它們配置以不同的資源限制如下:
PodA:第一個被實例化,使用 50% 可用 CPU 資源PodB:第二個被實例化,使用其余 50% 可用 CPU 資源PodC:沒有可用 CPU 資源,因此不會被部署部署吊艙
PodA:
$ kubectl create -n quota-test -f - << EOFapiVersion: v1kind: Podmetadata:??name: podaspec:??containers:??- name: quota-test????image: busybox????imagePullPolicy: IfNotPresent????command: ['sh', '-c', 'echo Pod is Running ; sleep 5000']????resources:??????requests:????????cpu: "50m"??????limits:????????cpu: "100m"??restartPolicy: NeverEOF部署 PodA 后,再次查看配額描述信息中的 Used CPU 信息:
$ kubectl describe resourcequota/test-cpu-quota --namespace quota-testName:???????? test-cpu-quotaNamespace:????quota-testResource??????Used??Hard--------??????----??----limits.cpu????100m??200mrequests.cpu??50m?? 100mPodB:
$ kubectl create -n quota-test -f - << EOFapiVersion: v1kind: Podmetadata:??name: podbspec:??containers:??- name: quota-test????image: busybox????imagePullPolicy: IfNotPresent????command: ['sh', '-c', 'echo Pod is Running ; sleep 5000']????resources:??????requests:????????cpu: "50m"??????limits:????????cpu: "100m"??restartPolicy: NeverEOF再次查看 CPU 資源使用,此時 PodB 啟動后 CPU 限制已經達到上限:
$ kubectl describe resourcequota/test-cpu-quota --namespace quota-testName:???????? test-cpu-quotaNamespace:????quota-testResource??????Used??Hard--------??????----??----limits.cpu????200m??200mrequests.cpu??100m??100mPodC:
試著創建 PodC,此時 CPU 配額已經被 PodA 和 PodB 用盡:
$ kubectl create -n quota-test -f - << EOFapiVersion: v1kind: Podmetadata:??name: podcspec:??containers:??- name: quota-test????image: busybox????imagePullPolicy: IfNotPresent????command: ['sh', '-c', 'echo Pod is Running ; sleep 5000']????resources:??????requests:????????cpu: "5m"??????limits:????????cpu: "10m"??restartPolicy: NeverEOF正我們期望,第三個 Pod 無法被啟動,配額限制了吊艙的創建:
Error from server (Forbidden): error when creating "STDIN": pods "podc" is forbidden: exceeded quota: test-cpu-quota, requested: limits.cpu=10m,requests.cpu=5m, used: limits.cpu=200m,requests.cpu=100m, limited: limits.cpu=200m,requests.cpu=100m如我們的例子所示,定義合理的資源配額限制開發者行為對 Kubernetes 管理十分重要。
清理
刪除剛才創建的命名空間 quota-test:
$ kubectl delete -n quota-test規劃資源配額
Kubernetes 中提供多種方式來控制資源的搶占和使用,合理的規劃和配置配額、限制范圍和其它原生參數對保持集群的穩定性十分必要。
你應該十分謹慎地控制計算資源的資源配額,特別是關鍵業務的生產應用環境。
在規劃資源配額時,開發人員的參與很重要,需要他們預估并給出最合理的資源使用值。
總結
以上是生活随笔為你收集整理的7限制cpu使用_Kubernetes 资源配额使用指南 | Linux 中国的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #中delay函数_ECBM系列教程3:
- 下一篇: babel css3新特性_2018年面