新聞中心
這篇文章給大家分享的是有關Kubernetes資源配額怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
目前成都創(chuàng)新互聯已為近1000家的企業(yè)提供了網站建設、域名、網頁空間、網站托管、服務器租用、企業(yè)網站設計、寬城網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發(fā)展。
當 Kubernetes 集群運行過一段時間或者在被開發(fā)者大量使用后,Kubernetes 資源(例如 CPU 和內存)的控制的問題就會顯現出來。而在大多情況下只有集群出問題后,我們才會意識到資源控制的重要性。
Kubernetes 部署過程如果沒有能充分考慮到將來的擴展性,資源類問題將會非常常見,此類問題與集群的管理和部署團隊的經驗有關。
如果不加以合理控制,一個暴力的應用或者開發(fā)者可能影響到共享該集群的所有業(yè)務,大家因此會相互埋怨、指責并保護性地搶占資源。這對于集群管理和開發(fā)人員都是非常難以處理的場景。
在 Kubernetes 環(huán)境中控制應用的計算資源使用有多種方式。大部分情況下,我們可以使用“資源控制”和“限制范圍”。注意存儲管理不在我們討論范圍之內,存儲管理可以通過持久卷Persistent Volume 件,以實現針對不同的存儲控制需求。
資源配額是一種控制 Kubernetes 計算資源的方法。本文告訴你如何使用該功能來管理開發(fā)人員行為并控制應用的資源使用。
什么是資源配額
簡而言之,資源配額 提供了限制每個命名空間資源消耗的約束條件,它們只能在命名空間級別上應用,這意味著它們可以應用于計算資源,并限制命名空間內的對象數量。
Kubernetes資源配額通過 ResourceQuota 對象來為每個命名空間設置資源配額,對以下對象類型的 CPU 和內存進行限制:
吊艙Pod
服務Service
機密信息Secret
持久卷斷言Persistent Volume Claim(PVC)
配置映射ConfigMap
Kubernetes 通過 request 和 limit 兩個參數對 CPU 和內存進行限制(參考 LimitRange 文檔)。前者表示容器最小被保證資源,后者表示容器最大可用資源。實際上最大可用資源還受限于其它容器的實際使用情況。
下一張圖片解釋了配額中 request 和 limit 的區(qū)別:
Requests and limits in Kubernetes resource quotas下面我們就通過一個例子來說明如何設置資源配額來創(chuàng)建約束,將應用程序限制在某些資源上,它還展示了實現資源配額以獲得對 Kubernetes 的控制的有用性。
準備環(huán)境
首先你需要一個 Kubernetes 環(huán)境。以下是我使用 Kubernetes 環(huán)境:
Minikube v1.14.2
Fedora 33 操作系統
互聯網接入
如果你想在 Linux 機器上通過 Minikube 搭建 Kubernetes 測試環(huán)境,可以參考 Bryant Son 的《Minikube 入門》 一文。Window 或者 macOS 用戶可以參考這篇文章。
設置資源配額
這里我們僅展示 CPU 配額設置步驟,配置內存配額或兩者的組合與之類似。
在生產環(huán)境中,CPU 是最需要被控制的資源,尤其是在多應用的場景下特別需要注意防止某些應用消耗太多 CPU 而影響到其它應用。
首先我們創(chuàng)建一個命名空間,在其中設置 CPU 配額:
$ kubectl create namespace quota-test namespace/quota-test created
準備 cpu-quota.yaml 文件,內容如下:
apiVersion: v1 kind: ResourceQuota metadata: name: test-cpu-quota spec: hard: requests.cpu: "100m" limits.cpu: "200m"
應用 CPU 配額到 Kubernetes 集群:
$ kubectl apply -f cpu-qouta.yaml resourcequota/test-cpu-quota created
使用 kubectl describe 檢查配額配置情況:
$ kubectl describe resourcequota/test-cpu-quota --namespace quota-test Name: test-cpu-quota Namespace: quota-test Resource Used Hard -------- ---- ---- limits.cpu 0 200m requests.cpu 0 100m
在 Used resources 列中顯示了當前情況,該列值會隨著吊艙Pod的部署而變化。
下面是我們來驗證限額管理的場景。我們將在同一命名空間下部署三個不同的吊艙,為它們配置以不同的資源限制如下:
PodA:第一個被實例化,使用 50% 可用 CPU 資源
PodB:第二個被實例化,使用其余 50% 可用 CPU 資源
PodC:沒有可用 CPU 資源,因此不會被部署
部署吊艙
PodA:
$ kubectl create -n quota-test -f - << EOF apiVersion: v1 kind: Pod metadata: name: poda spec: 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: Never EOF
部署 PodA 后,再次查看配額描述信息中的 Used CPU 信息:
$ kubectl describe resourcequota/test-cpu-quota --namespace quota-test Name: test-cpu-quota Namespace: quota-test Resource Used Hard -------- ---- ---- limits.cpu 100m 200m requests.cpu 50m 100m
PodB:
$ kubectl create -n quota-test -f - << EOF apiVersion: v1 kind: Pod metadata: name: podb spec: 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: Never EOF
再次查看 CPU 資源使用,此時 PodB 啟動后 CPU 限制已經達到上限:
$ kubectl describe resourcequota/test-cpu-quota --namespace quota-test Name: test-cpu-quota Namespace: quota-test Resource Used Hard -------- ---- ---- limits.cpu 200m 200m requests.cpu 100m 100m
PodC:
試著創(chuàng)建 PodC,此時 CPU 配額已經被 PodA 和 PodB 用盡:
$ kubectl create -n quota-test -f - << EOF apiVersion: v1 kind: Pod metadata: name: podc spec: 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: Never EOF
正我們期望,第三個 Pod 無法被啟動,配額限制了吊艙的創(chuàng)建:
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
如我們的例子所示,定義合理的資源配額限制開發(fā)者行為對 Kubernetes 管理十分重要。
清理
刪除剛才創(chuàng)建的命名空間 quota-test:
$ kubectl delete -n quota-test
規(guī)劃資源配額
Kubernetes 中提供多種方式來控制資源的搶占和使用,合理的規(guī)劃和配置配額、限制范圍和其它原生參數對保持集群的穩(wěn)定性十分必要。
你應該十分謹慎地控制計算資源的資源配額,特別是關鍵業(yè)務的生產應用環(huán)境。
在規(guī)劃資源配額時,開發(fā)人員的參與很重要,需要他們預估并給出最合理的資源使用值。
感謝各位的閱讀!關于“Kubernetes資源配額怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
網站標題:Kubernetes資源配額怎么用
網頁鏈接:http://fisionsoft.com.cn/article/jshihi.html