Kubernetes学习笔记-计算资源管理(3)限制命名空间中的可用资源总量20230219

上一节学的书限制单独的pod的资源,使用到了LimitRange。我们如果需要限制命名空间中的可用资源总量,就满足不了,需要创建一个ResourceQuota对象来实现。

1.ResourceQuota资源

ResoureceQuota的控制插件可以检查新增的pod是哦福会引起总资源超出ResourceQuota,类似LimitRange和LimitRange插件的作用。只是针对新创建的pod,并不影响已经存在的pod。

资源配额限制了一个命名空间中的pod和pvc存储最多可以使用的资源总量。同时也可以限制用户允许在该命名空间中创建pod、pvc,以及其他api对象的数量,处理最多的资源是cpu和内存。

为cpu和内存创建ResourceQuota

yaml文件:quota-cpu-memory.yaml

apiVersion:v1

kind:ResourceQuota

metaData:

name:cpu-and0mem

spec:

hard:

requests.cpu:400m

requests.memory:200Mi

limits.cpu:600m

limits.memory:500Mi

如上,为cpu和内存分别定义了requests和limits总量,而不是简单的为每种资源中定义一个总量。和LimitRange对比,结构不同,所有资源的requests和limits都定义在一个字段下。

与limitRange一样,ResourceQuota对象应用于他所创建的那个命名空间,但不同的是,ResourceQuota可以限制所有pod资源requests和limits总量,而不是每个单独的pod和容器。

查看额度和额度使用情况

kubectl describe quota

与ResourceQuota同时创建LimitRange

注意:创建ResourceQuota是还需要随之创建一个LimitRange对象。如果没有,则无法创建成功,因为他没有置顶任何资源requests和limits。

2.为持久化存储指定配额

ResourceQuota独享可以限制某个命名空间中最多可以声明的持久化存储总量。

yaml文件:quota-storage.yaml

apiVersion:v1

kind:ResourceQuota

metadata:

name:storage

spec:

hard:

requests.storage:500Gi

ssd.storageclass.storage.k8s.io/requests.storage:300Gi

standard.storageclass.storage.k8s.io/requests.storage:1Ti

3.限制可创建对象的个数

ResourceQuota可以限制按个命名空间中的pod、ReplicationController、Service以及其他对象的个数。鸡群管理员可以根据比如付费计划限制用户能够创建的对象个数,同时也可以用来限制公网IP或者Service可使用的节点端口个数。

yaml文件:quota-object-count.yaml

apiVersion:v1

kind:ResourceQuota

metadata:

name:objects

spec:

hard:

pods:10

replicationcontrollers:5

secrets:10

configmaps:10

persistentvolumeclaims:4

services:5

services.loadbalances:1

services.nodeports:2

ssd.storageclass.storage.k8s.io/persistentvolumeclains:2

对象个数配额目前可以限制一下对象配置:

  • pod

  • ReplicationController

  • Secret

  • ConfigMap

  • Persistent Volume Claim

  • Service(通用),以及两种特定类型的Service,比如LoadBalancer Service(service.loadbalances)和NodePort Service(services.nodeports)

目前ReplicaSet、Job、Deployment、Ingress等限制还需要看最新的文档

4.为特定的pod状态或者Qos等级指定配额

创建的Quota应用于所有pod,不管pod的当前状态和Qos等级如何。

但是Quota可以被一组quota scopes限制。目前配额作用范围有4种:

BestEffort、NotBestEffort、Termination和NotTerminating

BestEffort和NotBestEffort范围决定了配额是否应用于BestEffort Qos等级或者两种等级(Burstable和Guaranteed)的pod

Terminating和NotTerminating这两个范围说明:

为每个pod制定被标记为Failed,真正停止之前还可以运行多长时间,这是通过pod spec中配置的activeDeadlineSeconds来实现的。该属性定义了一个pod从开始尝试停止的时间到其被标记为Failed然后真正停止之前,允许其在节点上继续运行的秒数。Terminating配额作用范围应用与这些配置了activeDeadlineSeconds的pod。而NotTerminating应用于哪些没有指定该配置的pod。

说明:

创建ResourceQuota时,可以为其指定作用范围,目标pod必须与配额所配置的所有范围向匹配。另外配额范围也决定了配额可以限制的内容:BestEffort范围只允许限制pod个数,而其他3种范围除了pod个数,还可以限制cpu/内存的requests和limits。

猜你喜欢

转载自blog.csdn.net/wwxsoft/article/details/129108956