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