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