kubernetes之為每個名稱空間的pod設定預設的requests以及limits

堇牧安年發表於2021-01-20

一  為啥需要為名稱空間裡面新增pod新增預設的requests和limits?

  

  通過前面的學習我們已經知道,如果節點上面的pod沒有設定requests和limits,這些容器就會受那些設定了的控制,一旦出現節點記憶體資源超賣,這些未被設定的pod則會優先被kubernetes清除,所以對於每個pod而言,都應當給設定requests和limits值是個不錯的選擇。

 

  1.1 介紹limitRange資源

    limitRange不僅支援使用者給名稱空間裡面的pod每種資源配置最大最小值,甚至還會在沒有顯性的申明下,還會給容器新增系統的預設配值,更詳細的描述如圖所示

                kubernetes之為每個名稱空間的pod設定預設的requests以及limits

 

  • 圖中很好的顯示了,當建立podA的時候,由於裡面的requests和Limits值超過了LimitRange的預設定,所以無法成功的建立
  • 而在建立pod B的時候由於沒有設定預設的requests和limits的值在,則准入外掛會根據預設值為它新增這2項
  • 如果名稱空間裡面沒有LimitRange的話,當pod申請的資源大於節點的資源的時候API伺服器還是會接收這個請求,但是卻無法進行排程
  • limitRange資源引數limit的作用物件始終是每個獨立的pod,容器或者是其他型別物件,始終不會是某個名稱空間的limits總和,實際上總和是由ResourceQuota物件來指定

 

  1.2  建立一個LimitRange物件

apiVersion: v1
kind: LimitRange
metadata:
  name: example
spec:
  limits:
  - type: Pod
    min:
      cpu: 50m
      memory: 5Mi
    max:
      cpu: 1
      memory: 1Gi
  - type: Container
    defaultRequest:
      cpu: 100m
      memory: 10Mi
    default:
      cpu: 200m
      memory: 100Mi
    min:
     cpu: 50m
     memory: 5Mi
    max:
      cpu: 1
      memory: 1Gi
    maxLimitRequestRatio:
      cpu: 4
      memory: 10
  - type: PersistentVolumeClaim
    min:
      storage: 1Gi
    max:
      storage: 10Gi
  • LimitRange中以type為分類可以限制各種各種型別的資源,第一項限制了pod中容器requests和limits之和最大值和最小值區間
  • 第二項設定了pod中每個容器在沒有配置的時候預設新增的requests和limits的值以及每個容器的記憶體以及cpu最小最大值,和最大值與最小值的比值限制等
  • 並且可以限制pvc的最大值以及最小值
  • 也可以單獨的將這些type進行拆分,之後pod在通過API的准入外掛的時候,會將所有的這些type合併起來
  • 如果在修改了LimitRange之後,之前叢集已經建立的pod規則不會收到影響(這裡有個疑問,如果pod在LimitRange資源建立之前就已經好了,後來由於某種原因需要重新排程,並且還是沿用之前pod的requests和limits,我覺得還是會受到影響)

 

相關文章