Kubernetes中的資源限制!
譯文【51CTO.com快譯】
如果節點有足夠的可用資源,容器就有可能使用更多資源。我們可以指定容器需要每種資源的數量。要指定的常見資源是CPU和內存。我們為Pod中的容器指定資源請求時,調度程序將決定將Pod放置在哪個節點上。我們為容器指定資源限制時,kubelet會處理限制,以便不允許運行中的容器使用的資源超過我們設置的限制。
比如說,如果我們為容器設置100 MiB的內存請求,該容器可能嘗試使用更多的內存。但是如果我們為該容器設置了4GiB的內存限制,運行時環境會阻止容器使用超過配置限制的內存。
CPU和內存稱為計算資源。
Pod的每個容器可以指定以下一項或多項:
- CPU方面的限制
- 內存方面的限制
- 大頁面-<大小>方面的限制
- 對CPU的請求
- 對內存的請求
- 對大頁面-<大小>的請求
想進一步了解Kubernetes中的資源,點擊此處訪問Kubernetes的官方文檔。
在本文中,我們將看到資源限制以及CPU和內存請求的示例。我們還將使用Metric Server。 Metrics Server聚合了集群中的資源使用情況數據,默認情況下未部署在集群中。我們將使用該Metric Server查看Pod的資源使用情況。
先決條件
- 至少有1個worker節點的Kubernetes集群
如果您想了解創建Kubernetes集群,請點擊此處。該指南將幫助您在AWS Ubuntu 18.04 EC2實例上創建有1個Master和2個節點的Kubernetes集群。
我們將做什么?
- 資源限制
資源限制
在創建資源需求指定的Pod之前,不妨先安裝Metric Server。
使用以下命令克隆Metric Server Github存儲庫,并安裝。
- git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
- cd kubernetes-metrics-server /
使用對象文件創建Metric Server。
- kubectl create -f
圖1. 安裝Metric Server
等待一段時間以啟動Metric Server。一段時間后,您可以執行以下命令來監測集群節點。
- kubectl top node
圖2. 驗證節點度量
現在,創建一個有下列內容的pod定義文件,含有內存請求和限制。
- 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內存演示
您可以找到“resources”屬性,我們已將內存限制指定為50Mi、將內存請求指定為20Mi。
檢查集群上的現有pod。
- kubectl get pods #Get pods from the default namespace
使用上述步驟中創建的pod定義來創建pod。
- kubectl create -f my-pod-with-memory.yml #Create a pod
- kubectl get pods
圖4. 創建一個有內存請求和限制的pod。
現在,如果您獲得了Pod的詳細信息,可以看到該Pod請求20Mi內存,內存限制為50Mi。
- kubectl get pods
- kubectl describe pod my-pod-memory-demo #Describe the pod
圖5. 描述pod,并檢查內存。
可以使用以下命令檢查Pod的使用情況。
- kubectl top pods #Check resource consumption by the pod
圖6. 檢查內存使用情況。
現在,創建附有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作為我們的需求,這超出了限制。
現在,不妨使用以下命令創建附有CPU請求和限制的pod。
- kubectl apply -f my-pod-with-cpu.yml #Create a pod
- kubectl get pods
圖8. 創建附有CPU請求和限制的pod。
獲得我們創建的pod的詳細信息。
- 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(相當于1個CPU),它不會增加耗用的資源。
結束語
我們在本文中看到了使用Metric Server在集群中進行監測的幾個步驟,還看到了pod如何可以請求CPU和內存,并在不超出指定限制的情況下使用資源。
原文標題:Resource Limits in Kuberenetes
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】