輕松快速地調整Kubernetes的CPU和內存
在Kubernetes中分配和管理CPU和內存資源可能很棘手,但也很容易。本文,我將向你展示什么是Kubernetes資源和限制以及如何管理它們。

本文的目標是簡單–如何幫助你快速調整項目中的Kubernetes資源信息,主要通過三種方式:
1. 為容器和 Pod 分配CPU和內存資源
2. Resources Quota: 限制namespace的資源消耗
3. Limit Ranges:配置默認的CPU請求和限制
為容器和 Pod 分配CPU和內存資源
下圖,解釋了Kubernetes資源的度量單位,資源狀態(tài)工作流以及如何使用資源限制。

CPU和內存單位

Kubernetes 中的一個 cpu 等于:
1 AWS vCPU
1 GCP Core
1 Azure vCore
1 Hyperthread 在帶有超線程的裸機 Intel 處理器上
以下,Deployment使用了內存資源和CPU資源的請求和限制
將CPU和內存 請求 (request)和內存 限制 (limit)分配給一個容器。
apiVersion: apps/v1kind: Deploymentmetadata:name: aks-applicationspec:replicas: 1selector:matchLabels:app: aks-applicationtemplate:metadata:labels:app: aks-applicationspec:containers:- name: aks-applicationimage: hubname/aks-application-image:1.0.0resources:requests:cpu: 100mmemory: 128Milimits:cpu: 250mmemory: 256Mi
更詳細的信息和代碼段:
將內存資源分配給容器和Pod
將CPU資源分配給容器和Pod
Kubernetes最佳實踐資源要求和限制
應用程序開發(fā)人員在Azure Kubernetes Service(AKS)中管理資源的最佳實踐
Resources Quota: 限制namespace的資源消耗
資源配額,通過 ResourceQuota 對象來定義,對每個namespace的資源消耗總量提供限制。它可以限制namespace中某種類型的對象的總數(shù)目上限,也可以限制命令空間中的 Pod 可以使用的計算資源的總上限。

資源配額的工作方式如下:
不同的團隊可以在不同的namespace下工作,目前這是非約束性的,在未來的版本中可能會通過 ACL (Access Control List 訪問控制列表) 來實現(xiàn)強制性約束。
集群管理員可以為每個namespace創(chuàng)建一個或多個 ResourceQuota 對象。
當用戶在namespace下創(chuàng)建資源(如 Pod、Service 等)時,Kubernetes 的配額系統(tǒng)會 跟蹤集群的資源使用情況,以確保使用的資源用量不超過 ResourceQuota 中定義的硬性資源限額。
如果資源創(chuàng)建或者更新請求違反了配額約束,那么該請求會報錯(HTTP 403 FORBIDDEN), 并在消息中給出有可能違反的約束。
如果namespace下的計算資源 (如 cpu 和 memory)的配額被啟用,則用戶必須為 這些資源設定請求值(request)和約束值(limit),否則配額系統(tǒng)將拒絕 Pod 的創(chuàng)建。 提示: 可使用 LimitRanger 準入控制器來為沒有設置計算資源需求的 Pod 設置默認值。
以下,是對持久卷聲明和namespace資源的配額定義。
apiVersion: v1kind: ResourceQuotametadata:name: backend-storage-quotaspec:hard:persistentvolumeclaims: "2"requests.storage: "1Gi"--apiVersion: v1kind: ResourceQuotametadata:name: backend-namespace-quotaspec:hard:request.cpu: 400mrequest.memory: 9600Milimits.cpu: 1200mlimits.memory: 11600Mi
你可以使用該kubectl apply命令來設置namespace的配額限制。
kubectl apply -f resource-quota.yaml — namespace backend如何使用配額的詳細說明,請參考
https://kubernetes.io/docs/concepts/policy/resource-quotas/
Limit Ranges:配置默認的CPU請求和限制
如果你的namespace有資源配額,那么默認內存限制是很有幫助的。

將 LimitRange 添加到namespace,不僅會限制cpu和內存,還會為存儲請求大小強制設置最小值和最大值。存儲是通過 PersistentVolumeClaim 來發(fā)起請求的。執(zhí)行限制范圍控制的準入控制器會拒絕任何高于或低于管理員所設閾值的 PVC。
apiVersion: v1kind: LimitRangemetadata:name: backend-limit-rangespec:limits:- default:memory: 110Micpu: 500mdefaultRequest:memory: 20Micpu: 100mtype: Container--apiVersion: v1kind: LimitRangemetadata:name: backend-storage-limitsspec:limits:- type: PersistentVolumeClaimmax:storage: 5Gimin:storage: 2Gi
更詳細的信息和代碼段。
為namespace配置默認的 CPU 請求和限制
限制名稱空間的存儲使用量
Kubernetes中的 Limit Range
工具:管理Kubernetes的CPU和內存
Popeye 會掃描集群中是否存在與配置,資源和網(wǎng)絡漏洞有關的問題,并生成有關所有問題的詳細報告。
Goldilocks 掃描Pod中的資源限制,并使用建議的資源創(chuàng)建報告。
Kube-advisor 來自Azure團隊的工具,可掃描容器中缺少的資源并限制請求。
K9s+benchmark 提供了一個命令行界面(CLI),使你可以輕松地管理,監(jiān)視甚至對 你喜歡的終端軟件中的集群進行基準測試
你還可以將這些工具與 Datadog, Grafana + Prometeus,Azure Monitor結合使用,以改善資源并限制監(jiān)視。
總結
設置資源請求:獲取有關特定應用程序/容器的CPU和內存使用情況的信息。 設置資源限制:運行負載測試以檢測高負載下容器的CPU和內存。 監(jiān)視容器的CPU和內存使用情況。 監(jiān)視持久卷使用情況。 檢查是否可以使用Limit Range應用資源限制 使用配額(不建議在生產環(huán)境中應用配額)
文章來源:K8s中文社區(qū)
譯者:王延飛
原文鏈接:http://mtw.so/5Vu4KW
關注「開源Linux」加星標,提升IT技能

