Kubernetes 资源配额和资源限制管理

引言

在 Kubernetes 体系中,资源默认是被多租户共享使用的,租户间不可避免地存在资源竞争问题。
为了满足不同租户多样的服务质量需求,集群管理员需要为租户设置非常精细的资源配额以及资源限制。
截止 1.14 版本,Kubernetes 已经支持分别从 Namespace、Pod 和 Container 三个级别对资源进行管理。

ResourceQuota - 配置 Namespace 资源使用上限

在 Namespace 级别,可以通过创建 ResourceQuota 对象提供一个总体资源使用量限制:一方面可以设置该命名空间中 Pod 可以使用到的计算资源(CPU、内存)、存储资源总量上限;另一方面可以限制该 Namespace 中某种类型对象(如 Pod、RC、Service、Secret、ConfigMap、PVC 等)的总量上限。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: quota
spec:
  hard:
    requests.cpu: "20"
    requests.memory: 30Gi
    requests.storage: 500Gi
    requests.ephemeral-storage: 10Gi
    limits.cpu: "40"
    limits.memory: 60Gi
    limits.ephemeral-storage: 20Gi
    pods: "10"
    services: "5"
    replicationcontrollers: "20"
    resourcequotas: "1"
    secrets: "10"
    configmaps: "10"
    persistentvolumeclaims: "10"
    services.nodeports: "50"
    services.loadbalancers: "10"

Kubernetes 资源配额和资源限制管理_第1张图片

LimitRange - 配置 Pod/Container 默认资源配额及资源使用上限

在 Kubernetes 中,可以通过创建 LimitRange 对象设置 Namespace 中 Pod 及 Container 的默认资源配额和资源限制。

apiVersion: v1
kind: LimitRange
metadata:
  name: limit
spec:
  limits:
  - type: Pod
    max:
      cpu: "10"
      memory: 100Gi
    min:
      cpu: 200m
      memory: 6Mi
    maxLimitRequestRatio:
      cpu: "2"
      memory: "4"
  - type: Container
    max:
      cpu: "2"
      memory: 1Gi
    min:
      cpu: 100m
      memory: 3Mi
    default:
      cpu: 300m
      memory: 200Mi
    defaultRequest:
      cpu: 200m
      memory: 100Mi
    maxLimitRequestRatio:
      cpu: "2"
      memory: "4"
  - type: PersistentVolumeClaim
    max:
      storage: 10Gi
    min:
      storage: 5Gi

Kubernetes 资源配额和资源限制管理_第2张图片

ResourceRequests/ResourceLimits 设置 Container 资源需求和上限

在 Container 级别可以对两种计算资源进行管理:CPU 和内存。ResourceRequests 表示容器希望被分配到的可完全保证的资源量,Requests 的值会被提供给 Kubernetes 调度器,以便优化基于资源请求的容器调度;ResourceLimits 表示容器能用的资源上限,这个上限的值会影响在节点上发生资源竞争时的解决策略。

resources:
   limits:
     cpu: 500m
	 memory: 1Gi
   requests:
     cpu: 10m
	 memory: 4Mi

你可能感兴趣的:(容器技术,Kubernetes,实用指南)