溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么調(diào)整Kubernetes的CPU和內(nèi)存

發(fā)布時(shí)間:2021-07-20 00:17:46 來(lái)源:億速云 閱讀:449 作者:chen 欄目:云計(jì)算

本篇內(nèi)容介紹了“怎么調(diào)整Kubernetes的CPU和內(nèi)存”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

在Kubernetes中分配和管理CPU和內(nèi)存資源可能很棘手,但也很容易。本文,我將向你展示什么是Kubernetes資源和限制以及如何管理它們。  
本文的目標(biāo)是簡(jiǎn)單–如何幫助你快速調(diào)整項(xiàng)目中的Kubernetes資源信息,主要通過(guò)三種方式:  
1、為容器和 Pod 分配CPU和內(nèi)存資源  
2、Resources Quota: 限制namespace的資源消耗  
3、Limit Ranges:配置默認(rèn)的CPU請(qǐng)求和限制  

為容器和 Pod 分配CPU和內(nèi)存資源

下圖,解釋了Kubernetes資源的度量單位,資源狀態(tài)工作流以及如何使用資源限制。  

怎么調(diào)整Kubernetes的CPU和內(nèi)存

CPU和內(nèi)存單位

怎么調(diào)整Kubernetes的CPU和內(nèi)存

Kubernetes 中的一個(gè) cpu 等于:  
1、1 AWS vCPU  
2、1 GCP Core  
3、1 Azure vCore  
4、1 Hyperthread 在帶有超線程的裸機(jī) Intel 處理器上  
以下,Deployment使用了內(nèi)存資源和CPU資源的請(qǐng)求和限制  
將CPU和內(nèi)存 請(qǐng)求 (request)和內(nèi)存 限制 (limit)分配給一個(gè)容器。  
我們保障容器擁有它請(qǐng)求數(shù)量的內(nèi)存,但不允許使用超過(guò)限制數(shù)量的CPU和內(nèi)存 。  
    
    apiVersion: apps/v1 
     
     kind: Deployment 
     
     metadata: 
     
     name: aks-application  
     
     spec: 
     
     replicas: 1 
     
     selector: 
     
     matchLabels: 
     
     app: aks-application 
     
     template: 
     
     metadata: 
     
     labels: 
     
     app: aks-application 
     
     spec: 
     
     containers: 
     
     - name: aks-application 
     
     image: hubname/aks-application-image:1.0.0  
     
     resources: 
     
     requests: 
     
     cpu: 100m  
     
     memory: 128Mi 
     
     limits: 
     
     cpu: 250m  
     
     memory: 256Mi
 
更詳細(xì)的信息和代碼段:  
  • 將內(nèi)存資源分配給容器和Pod
  • 將CPU資源分配給容器和Pod
  • Kubernetes最佳實(shí)踐資源要求和限制
  • 應(yīng)用程序開(kāi)發(fā)人員在Azure Kubernetes Service(AKS)中管理資源的最佳實(shí)踐    

Resources Quota: 限制namespace的資源消耗

資源配額,通過(guò) ResourceQuota 對(duì)象來(lái)定義,對(duì)每個(gè)namespace的資源消耗總量提供限制。它可以限制namespace中某種類型的對(duì)象的總數(shù)目上限,也可以限制命令空間中的 Pod 可以使用的計(jì)算資源的總上限。  

怎么調(diào)整Kubernetes的CPU和內(nèi)存

資源配額的工作方式如下:  
1、不同的團(tuán)隊(duì)可以在不同的namespace下工作,目前這是非約束性的,在未來(lái)的版本中可能會(huì)通過(guò) ACL (Access Control List 訪問(wèn)控制列表) 來(lái)實(shí)現(xiàn)強(qiáng)制性約束。  
2、集群管理員可以為每個(gè)namespace創(chuàng)建一個(gè)或多個(gè) ResourceQuota 對(duì)象。  
3、當(dāng)用戶在namespace下創(chuàng)建資源(如 Pod、Service 等)時(shí),Kubernetes 的配額系統(tǒng)會(huì) 跟蹤集群的資源使用情況,以確保使用的資源用量不超過(guò) ResourceQuota 中定義的硬性資源限額。  
4、如果資源創(chuàng)建或者更新請(qǐng)求違反了配額約束,那么該請(qǐng)求會(huì)報(bào)錯(cuò)(HTTP 403 FORBIDDEN), 并在消息中給出有可能違反的約束。  
5、如果namespace下的計(jì)算資源 (如 cpu 和 memory)的配額被啟用,則用戶必須為 這些資源設(shè)定請(qǐng)求值(request)和約束值(limit),否則配額系統(tǒng)將拒絕 Pod 的創(chuàng)建。提示: 可使用 LimitRanger 準(zhǔn)入控制器來(lái)為沒(méi)有設(shè)置計(jì)算資源需求的 Pod 設(shè)置默認(rèn)值。  

 
以下,是對(duì)持久卷聲明和namespace資源的配額定義。  
    
    apiVersion: v1 
     
     kind: ResourceQuota 
     
     metadata: 
     
     name: backend-storage-quota 
     
     spec: 
     
     hard: 
     
     persistentvolumeclaims: "2" 
     
     requests.storage: "1Gi"    
     
     -- 
     
     apiVersion: v1 
     
     kind: ResourceQuota 
     
     metadata: 
     
     name: backend-namespace-quota 
     
     spec: 
     
     hard: 
     
     request.cpu: 400m 
     
     request.memory: 9600Mi 
     
     limits.cpu: 1200m 
     
     limits.memory: 11600Mi
 
你可以使用該kubectl apply命令來(lái)設(shè)置namespace的配額限制。  
    
    kubectl apply -f resource-quota.yaml — namespace backend
 
如何使用配額的詳細(xì)說(shuō)明,請(qǐng)參考
 
  • https://kubernetes.io/docs/concepts/policy/resource-quotas/

Limit Ranges:配置默認(rèn)的CPU請(qǐng)求和限制

如果你的namespace有資源配額,那么默認(rèn)內(nèi)存限制是很有幫助的。  

怎么調(diào)整Kubernetes的CPU和內(nèi)存

將 LimitRange 添加到namespace,不僅會(huì)限制cpu和內(nèi)存,還會(huì)為存儲(chǔ)請(qǐng)求大小強(qiáng)制設(shè)置最小值和最大值。存儲(chǔ)是通過(guò) PersistentVolumeClaim 來(lái)發(fā)起請(qǐng)求的。執(zhí)行限制范圍控制的準(zhǔn)入控制器會(huì)拒絕任何高于或低于管理員所設(shè)閾值的 PVC。  
    
    apiVersion: v1 
     
     kind: LimitRange 
     
     metadata: 
     
     name: backend-limit-range 
     
     spec: 
     
     limits: 
     
     - default: 
     
     memory: 110Mi 
     
     cpu: 500m 
     
     defaultRequest: 
     
     memory: 20Mi 
     
     cpu: 100m 
     
     type: Container 
     
     -- 
     
     apiVersion: v1 
     
     kind: LimitRange 
     
     metadata: 
     
     name: backend-storage-limits 
     
     spec: 
     
     limits: 
     
     - type: PersistentVolumeClaim 
     
     max: 
     
     storage: 5Gi 
     
     min: 
     
     storage: 2Gi
 
更詳細(xì)的信息和代碼段。  
  • 為namespace配置默認(rèn)的 CPU 請(qǐng)求和限制
  • 限制名稱空間的存儲(chǔ)使用量
  • Kubernetes中的 Limit Range    

工具:管理Kubernetes的CPU和內(nèi)存

  • Popeye 會(huì)掃描集群中是否存在與配置,資源和網(wǎng)絡(luò)漏洞有關(guān)的問(wèn)題,并生成有關(guān)所有問(wèn)題的詳細(xì)報(bào)告。
  • Goldilocks 掃描Pod中的資源限制,并使用建議的資源創(chuàng)建報(bào)告。
  • Kube-advisor 來(lái)自Azure團(tuán)隊(duì)的工具,可掃描容器中缺少的資源并限制請(qǐng)求。
  • K9s+benchmark 提供了一個(gè)命令行界面(CLI),使你可以輕松地管理,監(jiān)視甚至對(duì) 你喜歡的終端軟件中的集群進(jìn)行基準(zhǔn)測(cè)試
你還可以將這些工具與 Datadog, Grafana + Prometeus,Azure Monitor結(jié)合使用,以改善資源并限制監(jiān)視。  

總結(jié)

  1. 設(shè)置資源請(qǐng)求:獲取有關(guān)特定應(yīng)用程序/容器的CPU和內(nèi)存使用情況的信息。
  2. 設(shè)置資源限制:運(yùn)行負(fù)載測(cè)試以檢測(cè)高負(fù)載下容器的CPU和內(nèi)存。
  3. 監(jiān)視容器的CPU和內(nèi)存使用情況。
  4. 監(jiān)視持久卷使用情況。
  5. 檢查是否可以使用Limit Range應(yīng)用資源限制
  6. 使用配額(不建議在生產(chǎn)環(huán)境中應(yīng)用配額)

“怎么調(diào)整Kubernetes的CPU和內(nèi)存”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI