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