Kubernetes-基于资源配额(ResourceQuota)进行资源管理
1、资源配额概述
当存在多个用户或团队共享数目国定的集群时,就需要考虑如果有人使用的资源可能会超出应有的份额带来的问题,资源配额(ResourceQuota)就是用来帮助集群管理员解决上述问题的工具。在Kubernetes集群中通过 ResourceQuota
对象定义每个命名空间(namespace)的资源配额,从而实现资源消耗总量的限制。 资源配额有两个作用:1)可以按类型限制命名空间(namespace)下所创建对象的数量;2)限制所消耗计算资源的总量。
资源配额的工作方式如下:
- 不同的团队在不同的命名空间下工作。 目前这是是非必须的,后续计划通过ACL (Access Control List 访问控制列表) 使其变为强制性的。
- 集群管理员为每个命名空间创建一个或多个资源配额对象。
- 用户在命名空间下创建资源 (pods、 services等),同时配额系统会跟踪使用情况,来确保其不超过 资源配额中定义的硬性资源限额。
- 如果资源的创建或更新违反了配额约束,则请求会失败,并返回 HTTP状态码 403 FORBIDDEN ,以及说明违反配额 约束的信息。
- 如果命名空间下的计算资源 (如
cpu
和memory
)的配额被启用,则用户必须为这些资源设定请求值(request) 和约束值(limit),否则配额系统将拒绝Pod的创建。
提示: 可使用 LimitRange 准入控制器来为没有设置计算资源需求的Pod设置默认值。 作为示例,请参考 演练 来避免这个问题。
下面是使用命名空间和配额构建策略的示例:
- 在具有 32 GiB 内存 和 16 核CPU资源的集群中, 允许A团队使用 20 GiB 内存 和 10 核的CPU资源, 允许B团队使用 10GiB 内存和 4 核的CPU资源, 并且预留 2GiB 内存和 2 核的CPU资源供将来分配。
- 限制 “testing” 命名空间使用 1 核CPU资源和 1GiB 内存。 允许 “production”命名空间使用任意数量。
在集群容量小于各命名空间配额总和的情况下,可能存在资源竞争。 Kubernetes采用先到先服务的方式处理这类问题。无论是资源竞争还是配额的变更都不会影响已经创建的资源。资源配额的支持在很多Kubernetes版本中是默认开启的。 当 apiserver 的 --admission-control=
参数中包含 ResourceQuota
时,资源配额会被启用。当namespace中存在一个 ResourceQuota
对象时,该namespace即开始实施资源配额管理。 一个namespace中最多只应存在一个 ResourceQuota
对象
2、资源配额所能管理的资源类型
在Kuberners中,资源配额能够对计算资源(CPU和内存)、存储资源、以及对资源对象的数量进行管理。
2.1 计算资源配额
用户可以对给定命名空间下的 计算资源 总量进行限制。配额机制所支持的资源类型:
资源名称 | 描述 |
---|---|
cpu
|
所有非终止状态的Pod中,其CPU需求总量不能超过该值。 |
limits.cpu
|
所有非终止状态的Pod中,其CPU限额总量不能超过该值。 |
limits.memory
|
所有非终止状态的Pod中,其内存限额总量不能超过该值。 |
memory
|
所有非终止状态的Pod中,其内存需求总量不能超过该值。 |
requests.cpu
|
所有非终止状态的Pod中,其CPU需求总量不能超过该值。 |
requests.memory
|
所有非终止状态的Pod中,其内存需求总量不能超过该值。 |
2.2 存储资源配额
用户可以对给定命名空间下的存储资源总量进行限制。此外,还可以根据相关的存储类(Storage Class)来限制存储资源的消耗。
资源名称 | 描述 |
---|---|
requests.storage
|
所有的PVC中,存储资源的需求不能超过该值。 |
persistentvolumeclaims
|
namespace中所允许的 PVC 总量。 |
<storage-class-name>.storageclass.storage.k8s.io/requests.storage
|
所有该storage-class-name相关的PVC中, 存储资源的需求不能超过该值。 |
<storage-class-name>.storageclass.storage.k8s.io/persistentvolumeclaims
|
namespace中所允许的该storage-class-name相关的PVC的总量。 |
例如,如果一个操作人员针对 “黄金” 存储类型与 “铜” 存储类型设置配额,操作员可以 定义配额如下:
gold.storageclass.storage.k8s.io/requests.storage: 500Gi
bronze.storageclass.storage.k8s.io/requests.storage: 100Gi
2.3 对象数量配额
给定类型的对象数量可以被限制。 支持以下类型:
资源名称 | 描述 |
---|---|
configmaps
|
namespace下允许存在的configmap的数量。 |
persistentvolumeclaims
|
namespace下允许存在的PVC的数量。 |
pods
|
namespace下允许存在的非终止状态的pod数量。 如果pod 的 status.phase 为 Failed 或 Succeeded , 那么其处于终止状态。
|
replicationcontrollers
|
namespace下允许存在的replication controllers的数量。 |
resourcequotas
|
namespace下允许存在的 resource quotas 的数量。 |
services
|
namespace下允许存在的service的数量。 |
services.loadbalancers
|
namespace下允许存在的load balancer类型的service的数量。 |
services.nodeports
|
namespace下允许存在的node port类型的service的数量。 |
secrets
|
namespace下允许存在的secret的数量。 |
例如 pods
配额统计并保证单个namespace下创建 pods
的最大数量。用户可能希望在namespace中为pod设置配额,来避免有用户创建很多小的pod,从而耗尽集群提供的pod IP地址。
3、配额作用域
每个配额都有一组相关的作用域(scope),配额只会对作用域内的资源生效。当一个作用域被添加到配额中后,它会对作用域相关的资源数量作限制。 如配额中指定了允许(作用域)集合之外的资源,会导致验证错误。
范围 | 描述 |
---|---|
Terminating
|
匹配 spec.activeDeadlineSeconds >= 0 的pod。
|
NotTerminating
|
匹配 spec.activeDeadlineSeconds is nil 的pod。
|
BestEffort
|
匹配”尽力而为(best effort)“服务类型的pod。 |
NotBestEffort
|
匹配非”尽力而为(best effort)“服务类型的pod。 |
BestEffort
作用域限制配额跟踪以下资源: pods
Terminating
、 NotTerminating
和 NotBestEffort
限制配额跟踪以下资源:
cpu
limits.cpu
limits.memory
memory
pods
requests.cpu
requests.memory
4、设置和查看资源配额示例
由于在资源配额是基于命名空间进行设置的,因此,在此示例中先创建一个名称为myspace的命名空间:
$ kubectl create namespace myspace
4.1 计算资源管理
下面是定义管理计算资源配额的YAML文件,在此文件中,资源配额管理的名称为computer-resources,pod的数量为4,cpu的需求数量为1核,cpu的限制数量为2核;内存的需求大小为1Gi,内存的限制大小为2Gi。
apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources spec: hard: pods: "4" requests.cpu: "1" requests.memory: 1Gi limits.cpu: "2" limits.memory: 2Gi
通过下面的kubectl命令在myspaces命名空间下创建资源配额:
$ kubectl create -f ./compute-resources.yaml --namespace=myspace
在创建完资源配额后,通过执行下面的命令查看资源配额的详细信息:
$ kubectl describe quota compute-resources --namespace=myspaceName: compute-resources Namespace: myspace Resource Used Hard -------- ---- ---- limits.cpu 0 2 limits.memory 0 2Gi pods 0 4 requests.cpu 0 1 requests.memory 0 1Gi
4.1 资源对象数量管理
下面是定义管理资源对象数量配额的YAML文件,在此文件中,资源配额管理的名称为object-counts:
apiVersion: v1 kind: ResourceQuota metadata:name: object-counts spec:hard:configmaps: "10"persistentvolumeclaims: "4"replicationcontrollers: "20"secrets: "10"services: "10"services.loadbalancers: "2"
通过下面的kubectl命令在myspaces命名空间下创建资源配额:
$ kubectl create -f ./object-counts.yaml --namespace=myspace
在创建完资源配额后,通过执行下面的命令查看资源配额的详细信息:
$ kubectl describe quota object-counts --namespace=myspace Name: object-counts Namespace: myspace Resource Used Hard -------- ---- ---- configmaps 0 10 persistentvolumeclaims 0 4 replicationcontrollers 0 20 secrets 1 10 services 0 10 services.loadbalancers 0 2
参考资料:
1.《资源配额》地址:https://kubernetes.io/zh/docs/concepts/policy/resource-quotas/
本文转自中文社区-Kubernetes-基于资源配额(ResourceQuota)进行资源管理
Kubernetes-基于资源配额(ResourceQuota)进行资源管理相关推荐
- 《Kubernetes知识篇:基于Namespace(多租户)进行资源配额管理》
文章目录 一.资源配额管理对象 二.基于Namespace资源配额概述 三.资源配额所能管理的资源类型 3.1.计算资源配额 3.2.存储资源配额 3.3.对象数量配额 四.设置和查看资源配额 4.1 ...
- k8s容器资源限制(内存限制、CPU限制、namespace的资源限制与资源配额)
文章目录 1.资源的限制类型 2. 内存限制 3. CPU限制 4. 为namespace设置资源限制 5. 为namespace设置资源配额 1.资源的限制类型 Kubernetes采用reques ...
- 7限制cpu使用_Kubernetes 资源配额使用指南 | Linux 中国
资源配额控制应用的 CPU 或内存使用情况,防止资源被过量使用或被抢占. • 来源:linux.cn • 作者:Mike Calizo • 译者:zwb • (本文字数:4695,阅读时长大约:5 分 ...
- docker容器资源配额控制
Docker通过cgroup来控制容器使用的资源配额,包括CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. cgroup简介 cgroup是Control Groups的缩写,是Li ...
- pod的requests、limits解读、LimitRange资源配额、Qos服务质量等级、资源配额管理 Resource Quotas
前言 环境:k8s-v1.22.17 docker-20.10.9 centos-7.9 目录 前言 什么是可计算资源 CPU.Memory计量单位 pod资源请求.限额方式 pod定义request ...
- Kubernetes基于Metrics Server的HPA
Kubernetes基于Metrics Server的HPA [TOC] 1. 环境说明和相关介绍 我的kubernetes环境: kubeadm安装的kubernetes1.11 Horizonta ...
- Pod详解-资源配额
容器中的程序要运行,肯定是要占用一定资源的,比如cpu和内存等,如果不对某个容器的资源做限制,那么它就可能吃掉大量资源,导致其它容器无法运行.针对这种情况,kubernetes提供了对内存和cpu的资 ...
- asp毕业设计——基于asp+sqlserver的人力资源管理系统设计与实现(毕业论文+程序源码)——人力资源管理系统
基于asp+sqlserver的人力资源管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+sqlserver的人力资源管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...
- Linux云计算架构-docker容器命名和资源配额控制(2)
文章目录 Linux云计算架构-docker容器命名和资源配额控制(2) 1. docker容器命名和重命名 2. 创建docker容器时指定主机名 3. 设置docker容器开机自动启动 4. cg ...
最新文章
- Asynctask源码分析
- 对象比较:Comparable 和 Comparator
- Boost:正则表达式的实例
- android string拼接字符串_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...
- Gradient Descent(机器学习之梯度下降法)
- Python 紧急修复远程代码执行漏洞
- 自然辩证法与计算机科学的关系,科学技术与自然辩证法的关系 毕业论文
- C/C++[codeup 1929,]今天星期几
- 永洪BI还能这样玩?3招让用户权限管理不再繁琐
- 下载iPhone APP软件历史版本教程
- 网络设备设置/取消console口登陆单独密码
- java推送微信消息换行_微信公众号开发:回复文本消息换行的三种方式
- Fiddler抓部分app时网络连接失败
- DW1000开发笔记(一)DW1000芯片概览
- 北京计划以环球影城为核心,开发文化旅游精品线路
- 知乎点赞过万留学生自述:我们为什么需要代写???
- envi读取格式ang 还是mtl,mtl文件格式
- 讲个鬼故事:小灰的体检报告出来了。。。
- 使用NSIS制作安装包(1)
- 一个老中医刚刚公布的额(太强大了 除了教你怎么保健连怎么知生儿生女都有。。。。。。。。。。。。。。。。。。。。。。)
热门文章
- 计算机应用基础原文,计算机应用基础(本) - 平时作业
- Istio 101:Service Mesh的未来将与Knative和Apahce Whisk等技术和谐共存——采访RedHat的Istio产品经理
- el-table 表格内容多一根线的解决办法
- 春风桃李花开夜,秋雨梧桐叶落时——python面向对象三大特征(封装、继承、多态)
- 使用c#捕获usb扫描枪扫描二维码、条形码结果
- 阿里云网盘内侧注册方法
- 基于多模型融合的用户画像分析统计方法研究
- 华为digix算法大赛2020机器学习赛道-ctr预估初赛/决赛rank1
- java xmx xms xmn_JVM调优 -Xms -Xmx -Xmn -Xss
- 推荐系统10——评分预测问题