通過Limit Range,我們可以限制資源消耗和創建,因為默認情況下,容器在Kubernetes集群上以無限制的計算資源運行。一個Pod可以消耗Limit Range所定義的CPU和內存。
Limit Range提供了以下限制:
最低和最高資源
每個PersistentVolumeClaim的最小和最大存儲請求。
命名空間中資源的請求和限制之間的比率。
設置計算資源的默認請求/限制。
在本文中,我們將創建一個限制范圍,並查看如何為容器和Pods使用的CPU資源設置最小值和最大值。我們將看到在CPU上使用Limit和Request的不同場景。
先決條件:具有至少1個工作節點的Kubernetes集群。
我們會怎樣做?
在默認名稱空間中創建一個LimitRange。
在默認名稱空間中創建具有CPU限制和范圍的Pod。
在默認名稱空間中創建一個LimitRange
創建一個文件以定義默認名稱空間中的限制范圍。
vim set-limit-range.yml
獲取默認名稱空間中現有限制范圍的列表,並使用在上一步中創建的文件創建一個范圍。
kubectl get limitrange
kubectl create -f set-limit-range.yml
kubectl get limitrange
kubectl describe limitrange set-limit-range
在上面的屏幕截圖中,可以看出我們創建了一個限制范圍,將CPU定義為“ Min = 200m”和“ Max = 800m”。
這意味着默認名稱空間中的Pod不能具有“小於Min = 200m”和“大於Max = 800m”的CPU。
在默認名稱空間中創建具有CPU限制和范圍的Pod
有限制的POD
創建一個Pod定義,請求CPU大於200m且小於800m
vim pod-with-cpu-within-range.yml
列出現有的容器,並使用在上述步驟中創建的文件創建一個新的容器。
kubectl get pods
kubectl create -f pod-with-cpu-within-range.yml
kubectl get pods
kubectl describe pod pod-with-cpu-within-range
在上面的屏幕截圖中,可以看到pod已經被創建,定義了CPU請求和限制。
具有更多CPU的Pod:
這次,我們創建一個CPU限制為1.5(即大於800m)的Pod。
vim pod-with-cpu-more-than-limit.yml
獲取現有容器的列表,然后嘗試創建一個新的容器,其CPU限制“ 1.5”大於我們在限制范圍內定義的“ 800m”。
kubectl get pods
kubectl create -f pod-with-cpu-more-than-limit.yml
在上面的屏幕截圖中,可以看到尚未創建容器。
具有較少CPU的Pod:
現在,讓我們嘗試創建一個Pod,該Pod請求的“ CPU = 100m”小於我們在限制范圍內定義的“ 200m”。
vim pod-with-cpu-less-than-limit.yml
現在獲取現有容器的列表,並嘗試使用上述定義文件創建容器。
kubectl get pods
kubectl create -f pod-with-cpu-less-than-limit.yml
這次,由於我們要求的CPU = 100m小於定義的限制范圍的200m,因此pod的創建也會失敗。
沒有CPU的Pod:
在這種情況下,我們不要為CPU定義任何請求或限制。
vim pod-with-no-cpu.yml
現在,讓我們嘗試創建一個pod並查看其描述。
kubectl get pods
kubectl create -f pod-with-no-cpu.yml
kubectl describe pods pod-with-no-cpu
在上面的屏幕截圖中,可以看出,如果我們沒有為CPU指定任何請求或限制,則POD分配的CPU等於在限制范圍內指定的限制,即在此示例中,容器獲得了CPU限制和請求等於800m,即在極限范圍內指定的極限
在本文中,我們看到了在默認名稱空間中創建限制范圍的步驟。然后,我們針對Pod中的CPU限制和請求嘗試了不同的方案。