Kubernetes資源分配(limit/request)

概述

kubernetes 是一個集羣管理平臺, kubernetes須要統計總體平臺的資源使用狀況, 合理的將資源分配給容器使用, 並保證容器生命週期內有足夠的資源來保證其運行. 同時, 若是資源發放是獨佔的, 對於空閒的容器來講佔用這沒有使用的資源是很是浪費的, 好比CPU。k8s須要考慮如何在優先度和公平性的前提下提供資源的利用率。php

爲了實現資源被有效調度和分配時同時提升資源的利用率, k8s採用request和limit兩種限制類型對資源進行分配。nginx

limit/request 限制類型介紹

request

  • 容器使用的最小資源需求, 做爲容器調度時資源分配的判斷依賴。
  • 只有當前節點上可分配的資源量 >= request 時才容許將容器調度到該節點。
  • request參數不限制容器的最大可以使用資源

limit

  • 容器能使用資源的最大值
  • 設置爲0表示對使用的資源不作限制, 可無限的使用

request 和 limit 關係

request能保證pod有足夠的資源來運行, 而limit則是防止某個pod無限制的使用資源, 致使其餘pod崩潰. 二者的關係必須知足:api

0 <= request <= limit

若是limit=0表示不對資源進行限制, 這時能夠小於request。app

目前CPU支持設置request和limit,memory只支持設置request, limit必須強制等於request, 這樣確保容器不會由於內存的使用量超過request可是沒有超過limit的狀況下被意外kill掉。spa

limit/request使用示例

---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
 name: nginx
 namespace: php
 labels:
   app: nginx
spec:
 revisionHistoryLimit: 10
 strategy:
   type: RollingUpdate
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx:latest
       ports:
       - containerPort: 80
         protocol: TCP
       resources:
         requests:
           cpu: 0.5
           memory: 1024Mi
         limits:
           cpu: 1
           memory: 2048Mi

---           
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: nginx
  minReplicas: 2
  maxReplicas: 4
  targetCPUUtilizationPercentage: 80

參考

相關文章
相關標籤/搜索