Kubernetes中的資源限制!
譯文【51CTO.com快譯】
如果節(jié)點(diǎn)有足夠的可用資源,容器就有可能使用更多資源。我們可以指定容器需要每種資源的數(shù)量。要指定的常見資源是CPU和內(nèi)存。我們?yōu)镻od中的容器指定資源請求時,調(diào)度程序?qū)Q定將Pod放置在哪個節(jié)點(diǎn)上。我們?yōu)槿萜髦付ㄙY源限制時,kubelet會處理限制,以便不允許運(yùn)行中的容器使用的資源超過我們設(shè)置的限制。
比如說,如果我們?yōu)槿萜髟O(shè)置100 MiB的內(nèi)存請求,該容器可能嘗試使用更多的內(nèi)存。但是如果我們?yōu)樵撊萜髟O(shè)置了4GiB的內(nèi)存限制,運(yùn)行時環(huán)境會阻止容器使用超過配置限制的內(nèi)存。
CPU和內(nèi)存稱為計算資源。
Pod的每個容器可以指定以下一項(xiàng)或多項(xiàng):
- CPU方面的限制
 - 內(nèi)存方面的限制
 - 大頁面-<大小>方面的限制
 - 對CPU的請求
 - 對內(nèi)存的請求
 - 對大頁面-<大小>的請求
 
想進(jìn)一步了解Kubernetes中的資源,點(diǎn)擊此處訪問Kubernetes的官方文檔。
在本文中,我們將看到資源限制以及CPU和內(nèi)存請求的示例。我們還將使用Metric Server。 Metrics Server聚合了集群中的資源使用情況數(shù)據(jù),默認(rèn)情況下未部署在集群中。我們將使用該Metric Server查看Pod的資源使用情況。
先決條件
- 至少有1個worker節(jié)點(diǎn)的Kubernetes集群
 
如果您想了解創(chuàng)建Kubernetes集群,請點(diǎn)擊此處。該指南將幫助您在AWS Ubuntu 18.04 EC2實(shí)例上創(chuàng)建有1個Master和2個節(jié)點(diǎn)的Kubernetes集群。
我們將做什么?
- 資源限制
 
資源限制
在創(chuàng)建資源需求指定的Pod之前,不妨先安裝Metric Server。
使用以下命令克隆Metric Server Github存儲庫,并安裝。
- git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
 - cd kubernetes-metrics-server /
 
使用對象文件創(chuàng)建Metric Server。
- kubectl create -f
 
圖1. 安裝Metric Server
等待一段時間以啟動Metric Server。一段時間后,您可以執(zhí)行以下命令來監(jiān)測集群節(jié)點(diǎn)。
- kubectl top node
 
圖2. 驗(yàn)證節(jié)點(diǎn)度量
現(xiàn)在,創(chuàng)建一個有下列內(nèi)容的pod定義文件,含有內(nèi)存請求和限制。
- vim my-pod-with-memory.yml
 - apiVersion: v1
 - kind: Pod
 - metadata:
 - name: my-pod-memory-demo
 - spec:
 - containers:
 - - name: my-container-memory-demo
 - image: polinux/stress
 - resources:
 - limits:
 - memory: "50Mi"
 - requests:
 - memory: "20Mi"
 - command: ["stress"]
 - args: ["--vm", "1", "--vm-bytes", "30M", "--vm-hang", "1"]
 
圖3. 我的pod內(nèi)存演示
您可以找到“resources”屬性,我們已將內(nèi)存限制指定為50Mi、將內(nèi)存請求指定為20Mi。
檢查集群上的現(xiàn)有pod。
- kubectl get pods #Get pods from the default namespace
 
使用上述步驟中創(chuàng)建的pod定義來創(chuàng)建pod。
- kubectl create -f my-pod-with-memory.yml #Create a pod
 - kubectl get pods
 
圖4. 創(chuàng)建一個有內(nèi)存請求和限制的pod。
現(xiàn)在,如果您獲得了Pod的詳細(xì)信息,可以看到該P(yáng)od請求20Mi內(nèi)存,內(nèi)存限制為50Mi。
- kubectl get pods
 - kubectl describe pod my-pod-memory-demo #Describe the pod
 
圖5. 描述pod,并檢查內(nèi)存。
可以使用以下命令檢查Pod的使用情況。
- kubectl top pods #Check resource consumption by the pod
 
圖6. 檢查內(nèi)存使用情況。
現(xiàn)在,創(chuàng)建附有CPU請求和限制的pod定義。
- vim my-pod-with-cpu.yml
 - apiVersion: v1
 - kind: Pod
 - metadata:
 - name: my-pod-cpu-demo
 - spec:
 - containers:
 - - name: my-container-cpu-demo image: vish/stress
 - resources:
 - limits: cpu: "1"
 - requests:
 - cpu: "0.5"
 - args:
 - - -cpus
 - - "2"
 
圖7. 我的pod CPU演示。
在上述文件中,您可以看到該定義的“resource”屬性為CPU請求是0.5、限制是1。另外要注意,我們傳遞2個CPU作為我們的需求,這超出了限制。
現(xiàn)在,不妨使用以下命令創(chuàng)建附有CPU請求和限制的pod。
- kubectl apply -f my-pod-with-cpu.yml #Create a pod
 - kubectl get pods
 
圖8. 創(chuàng)建附有CPU請求和限制的pod。
獲得我們創(chuàng)建的pod的詳細(xì)信息。
- kubectl get pods
 - kubectl describe pod my-pod-cpu-demo
 
圖9. 描述pod,檢查CPU。
您可以看到,Pod請求.5即500m CPU,限制為1個CPU。
想檢查CPU使用情況,使用以下命令。
- kubectl top pod #Check resource consumption by the pod
 
圖10. 檢查CPU使用情況。
在上述屏幕截圖中,您可以看到在pod定義中傳遞2個CPU作為變量后,它無法使用超過限制(即1個CPU)的資源。這里pod“my-pod-cpu-demo”可能耗用999m CPU(相當(dāng)于1個CPU),它不會增加耗用的資源。
結(jié)束語
我們在本文中看到了使用Metric Server在集群中進(jìn)行監(jiān)測的幾個步驟,還看到了pod如何可以請求CPU和內(nèi)存,并在不超出指定限制的情況下使用資源。
原文標(biāo)題:Resource Limits in Kuberenetes
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

























 
 
 











 
 
 
 