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

参考

相关文章
相关标签/搜索