一、简介

 在k8s集群中为了能够使系统正常稳定运行,通常会限制Pod的资源使用情况,在k8s集群中如果有一个程序出现异常,并占用大量的系统资源。如果未对该Pod进行资源限制的话,可能会影响其他的Pod。

   k8s常见的资源管理方式:计算资源管理(Compute Resources)、资源的配置范围管理(LimitRange)和资源的配额管理(Resource Quotas)

 

计算资源管理(Compute Resources): 为Pod中的容器指定使用的计算资源(CPU和内存)。

 

资源的配置范围管理(LimitRange):可以对集群内Request和Limits的配置做一个全局的统一的限制,相当于批量设置了某一个范围内(整个集群、某个命名空间等)的Pod的资源使用限制。

 

资源的配额管理(Resource Quotas):可以为每一个命名空间(namespace)提供一个总体的资源使用限制,通过它可以限制命名空间中某个类型的对象的总数目上限,也可以设置命名空间中Pod可以使用到的计算资源的总上限。资源的配额管理有效解决了多用户或多个团队公用一个k8s集群时资源有效分配的问题。

 

本篇主要总结 计算资源管理(Compute Resources)的使用

 

二、计算资源管理(Compute Resources) 使用

计算资源的配置项分为两种:一种资源请求(Resource Requests,简称Requests),表示容器希望被分配到的、可完全保证的资源两;另一种时资源限制(Resource Limits,简称Limits),Limits时容器最多能使用的资源量的上限。

 

计算资源的资源类型分为:CPU和内存(Memory)。

Requests&Limits资源管理在yaml文件中的定义:

spec.containers[].resources.request.cpu

spec.containers[].resources.limits.cpu

spec.containers[].resources.request.memory

spec.containers[].resources.limits.memory

 

CPU的基本单位时核数(Cores),CPU的Requests和Limits是通过CPU核数来度量的。支持最多三位小数,spec.container[].resources.request.cpu的值可以不带单位(如0.5表示半个cpu),也可以用m (millicpu), 0.5CPU等价于500m。

内存的基本单位时字节数(Bytes),也可以加上国际单位,十进制的E、P、T、G、M,K、m,或二进制的Ei、Pi、Ti、Gi、Mi、Ki。

1KB = 1000 Bytes = 8000 bits

1KiB = 1024 Bytes = 8192 bits

 

Requests和Limits只能设置到容器上,对于CPU和内存而言,Pod的Requests或Limits是指该Pod中所有容器的Requests或Limits的总和。

 

示例

apiVersion: v1
kind: Pod
metadata:
 name: webapp
 labels:
   app: webapp
spec:
 containers:
 - name: webapp
   image: tomcat
   resources:
    limits:
     cpu: 2
     memory: 2Gi
    requests:
     cpu: 100m
     memory: 200Mi
   ports:
   - containerPort: 8080