kubernetes 是一個集羣管理平臺, kubernetes須要統計總體平臺的資源使用狀況, 合理的將資源分配給容器使用, 並保證容器生命週期內有足夠的資源來保證其運行. 同時, 若是資源發放是獨佔的, 對於空閒的容器來講佔用這沒有使用的資源是很是浪費的, 好比CPU。k8s須要考慮如何在優先度和公平性的前提下提供資源的利用率。php
爲了實現資源被有效調度和分配時同時提升資源的利用率, k8s採用request和limit兩種限制類型對資源進行分配。nginx
request能保證pod有足夠的資源來運行, 而limit則是防止某個pod無限制的使用資源, 致使其餘pod崩潰. 二者的關係必須知足:api
0 <= request <= limit
若是limit=0表示不對資源進行限制, 這時能夠小於request。app
目前CPU支持設置request和limit,memory只支持設置request, limit必須強制等於request, 這樣確保容器不會由於內存的使用量超過request可是沒有超過limit的狀況下被意外kill掉。spa
--- 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