Kubernetes K8S之CPU和內(nèi)存資源限制詳解
備注:CPU單位換算:100m CPU,100 milliCPU 和 0.1 CPU 都相同;精度不能超過 1m。1000m CPU = 1 CPU。
官網(wǎng)地址:
https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-cpu-resource/
https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-memory-resource/
Kubernetes對資源的限制實際上是通過cgroup來控制的,cgroup是容器的一組用來控制內(nèi)核如何運行進程的相關(guān)屬性集合。針對內(nèi)存、CPU和各種設(shè)備都有對應(yīng)的cgroup。
默認情況下,Pod運行沒有CPU和內(nèi)存的限額。這意味著系統(tǒng)中的任何Pod將能夠像執(zhí)行Pod所在節(jié)點機器一樣,可以消耗足夠多的CPU和內(nèi)存。一般會針對某些應(yīng)用的Pod資源進行資源限制,這個資源限制是通過resources的requests【要分配的資源】和limits【最大使用資源】來實現(xiàn)的。
CPU資源限制示例
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
配置文件的 args 部分提供了容器啟動時的參數(shù)。-cpus “2”
參數(shù)告訴容器嘗試使用 2 個 CPU。
內(nèi)存資源限制示例
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
配置文件的 args 部分提供了容器啟動時的參數(shù)。"--vm-bytes", "150M"
?參數(shù)告知容器嘗試分配 150 MiB 內(nèi)存。不允許args中的啟動內(nèi)存大于limits限制內(nèi)存。
官網(wǎng)地址:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
為命名空間配置內(nèi)存和 CPU 配額
怎么為命名空間設(shè)置容器可用的內(nèi)存和 CPU 總量。你可以通過 ResourceQuota 對象設(shè)置配額,使用 ResourceQuota 限制命名空間中所有容器的內(nèi)存請求總量、內(nèi)存限制總量、CPU 請求總量和CPU 限制總量。
如果你想對單個容器而不是所有容器進行限制,就請使用 LimitRange。
示例:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
應(yīng)用如下【命名空間quota-mem-cpu-example已提前創(chuàng)建完畢】:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
查看 ResourceQuota 詳情:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
輸出部分結(jié)果如下:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
ResourceQuota 在 quota-mem-cpu-example 命名空間中設(shè)置了如下要求:
-
每個容器必須有內(nèi)存請求和限制,以及 CPU 請求和限制。
-
所有容器的內(nèi)存請求總和不能超過1 GiB。
-
所有容器的內(nèi)存限制總和不能超過2 GiB。
-
所有容器的 CPU 請求總和不能超過1 cpu。
-
所有容器的 CPU 限制總和不能超過2 cpu。
為命名空間配置默認的內(nèi)存請求和限制
示例:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
default類似于之前的limit;defaultRequest類似于之前的request。
應(yīng)用如下:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
命名空間default-mem-example已提前創(chuàng)建完畢
現(xiàn)在,如果在 default-mem-example 命名空間創(chuàng)建容器,并且該容器沒有聲明自己的內(nèi)存請求和限制值,那么它將被指定一個默認的內(nèi)存請求256 MiB和一個默認的內(nèi)存限制512 Mib。
為命名空間配置默認的CPU請求和限制
示例:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
應(yīng)用如下:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
其中default-cpu-example名稱空間已被提前創(chuàng)建
現(xiàn)在如果在 default-cpu-example 命名空間創(chuàng)建一個容器,該容器沒有聲明自己的 CPU 請求和限制時,那么將會給它指定默認的 CPU 請求0.5和默認的 CPU 限制值1。
配置命名空間的最小和最大內(nèi)存約束
示例:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
應(yīng)用如下:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
其中constraints-mem-example名稱空間已被提前創(chuàng)建
查看 LimitRange 的詳情:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
輸出顯示預(yù)期的最小和最大內(nèi)存約束。但請注意,即使您沒有在 LimitRange 的配置文件中指定默認值,默認值也會被自動創(chuàng)建。
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
現(xiàn)在,只要在 constraints-mem-example 命名空間中創(chuàng)建容器,Kubernetes 就會執(zhí)行下面的步驟:
-
如果 Container 未指定自己的內(nèi)存請求和限制,將為它指定默認的內(nèi)存請求和限制。
-
驗證 Container 的內(nèi)存請求是否大于或等于500 MiB【超出范圍容器創(chuàng)建失敗】。
-
驗證 Container 的內(nèi)存限制是否小于或等于1 GiB【超出范圍容器創(chuàng)建失敗】。
配置命名空間的最小和最大CPU約束
示例:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
應(yīng)用如下:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
其中constraints-cpu-example名稱空間已被提前創(chuàng)建
查看 LimitRange 詳情:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
輸出結(jié)果顯示 CPU 的最小和最大限制符合預(yù)期。但需要注意的是,盡管你在 LimitRange 的配置文件中你沒有聲明默認值,默認值也會被自動創(chuàng)建。
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
現(xiàn)在不管什么時候在 constraints-cpu-example 命名空間中創(chuàng)建容器,Kubernetes 都會執(zhí)行下面這些步驟:
-
如果容器沒有聲明自己的 CPU 請求和限制,將為容器指定默認 CPU 請求和限制。
-
核查容器聲明的 CPU 請求確保其大于或者等于200 millicpu。
-
核查容器聲明的 CPU 限制確保其小于或者等于800 millicpu。
配置命名空間下pod總數(shù)
示例:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
應(yīng)用如下【命名空間quota-pod-example已提前創(chuàng)建完畢】:
![Kubernetes K8S之CPU和內(nèi)存資源限制詳解](http://haohuigou.com/wp-content/themes/module/themer/assets/images/lazy.png)
查看資源配額的詳細信息:
從輸出的信息我們可以看到,該命名空間下pod的配額是2個,目前創(chuàng)建的pods數(shù)為0,配額使用率為0
本文作者:LightZhang666。
原文鏈接:https://blog.csdn.net/woshizhangliang999/article/details/112205526