Kubernetes 是一个多租户平台,更是一个镜像集群管理工具。一个 Kubernetes 集群中的资源一般是由多个团队共享的,这时候经常要考虑的是如何对这个整体资源进行分配。在 kubernetes 中提供了 Namespace 来讲应用隔离,那么是不是也能将资源的大小跟 Namespace 挂钩进行一起隔离呢?这当然是可以的,Kubernetes 提供了 Resources Quotas 工具,让集群管理员可以创建 ResourcesQuota 对象管理这个集群整体资源的配额,它可以限制某个 Namespace 下计算资源的使用量,也可以设置某个 Namespace 下某种类型对象的上限等。

上面说白了就是,通过设置不同的 Namespace 与对应的 RBAC 权限将各个团队隔离,然后通过 ResourcesQuota 对象来限制该 Namespace 能够拥有的资源的多少

ResourceQuota 对象一般在 Kubernetes 中是默认开启的,如果未开启且不能创建该对象,那么可以进入 Master 的 Kubernetes 配置目录修改 Apiserver 配置文件 kube-apiserver.yaml,在添加参数 --admission-control=ResourceQuota 来开启。

  1. spec:
  2. containers:
  3. - command:
  4. - kube-apiserver
  5. - --advertise-address=192.168.2.11
  6. - --allow-privileged=true
  7. - --authorization-mode=Node,RBAC
  8. - --admission-control=ResourceQuota #开启ResourceQuota
  9. - ......
  1. 创建 resources-test1.y创建 resources-test1.yaml 用于设置计算资源的配额:aml 用于设置计算资源的配额:
  2.  
  3. apiVersion: v1
  4. kind: ResourceQuota
  5. metadata:
  6. name: compute-resources
  7. spec:
  8. hard:
  9. pods: "4"
  10. requests.cpu: "1"
  11. requests.memory: 1Gi
  12. limits.cpu: "2"
  13. limits.memory: 2Gi
  14.  
  15. 创建该配额对象:
  16.  
  17. -n:指定限制配额的 namespace
  18. $ kubectl apply -f resources-test1.yaml -n limit-namespace
  19. HTML5
  20. HSBC GROUP INTERNET ACCESS POLICY
  21. Website:
  22. Webfilter Categories:
  23. Locally Defined Categories:
  24. Troubleshooting Information
  25.  
  26. HSBC Global Internet Access
  27.  
  28. HTML5
  29. HSBC GROUP INTERNET ACCESS POLICY
  30. Website:
  31. Webfilter Categories:
  32. Locally Defined Categories:
  33. Troubleshooting Information
  34.  
  35. HSBC Global Internet Access
  36.  
  37. BASH
  38. 查看创建后的 ResourcesQuota 配额的详细信息:
  39.  
  40. $ kubectl describe quota compute-resources -n limit-namespace
  41.  
  42. Name: compute-resources
  43. Namespace: limit-namespace
  44. Resource Used Hard
  45. -------- ---- ----
  46. limits.cpu 2 2
  47. limits.memory 1Gi 2Gi
  48. pods 2 4
  49. requests.cpu 2 1
  50. requests.memory 512Mi 1Gi
  1. 2)、设置某 Namespace 对象数量的配额
  2.  
  3. 创建 resources-test2.yaml 用于设置对象数量的配额:
  4.  
  5. 2)、设置某 Namespace 对象数量的配额
  6.  
  7. 创建 resources-test2.yaml 用于设置对象数量的配额:
  8.  
  9. 创建该配额对象:
  10.  
  11. $ kubectl apply -f resources-test2.yaml -n limit-namespace
  12. HTML5
  13. HSBC GROUP INTERNET ACCESS POLICY
  14. Website:
  15. Webfilter Categories:
  16. Locally Defined Categories:
  17. Troubleshooting Information
  18.  
  19. HSBC Global Internet Access
  20.  
  21. HTML5
  22. HSBC GROUP INTERNET ACCESS POLICY
  23. Website:
  24. Webfilter Categories:
  25. Locally Defined Categories:
  26. Troubleshooting Information
  27.  
  28. HSBC Global Internet Access
  29.  
  30. BASH
  31. 查看创建后的 ResourcesQuota 配额的详细信息:
  32.  
  33. $ kubectl describe quota object-counts -n limit-namespace
  34.  
  35. Name: object-counts
  36. Namespace: limit-namespace
  37. Resource Used Hard
  38. -------- ---- ----
  39. configmaps 0 10
  40. persistentvolumeclaims 0 4
  41. replicationcontrollers 0 20
  42. secrets 1 10
  43. services 0 10
  44. services.loadbalancers 0 2

注意:一个 Namespace 中可以拥有多个 ResourceQuota 对象。

计算资源配额: 限制一个 Namespace 中所有 Pod 的计算资源(CPU、Memory)的总和。
存储资源配额: 限制一个 Namespace 中所有存储资源的总量。
对象数量配额: 限制一个 Namespace 中指定类型对象的数量。

(1)、ResourcesQuota 支持的计算资源:

  • cpu: 所有非终止状态的Pod中,其CPU需求总量不能超过该值。
  • limits.cpu: 所有非终止状态的Pod中,其CPU限额总量不能超过该值。
  • limits.memory: 所有非终止状态的Pod中,其内存限额总量不能超过该值。
  • memory: 所有非终止状态的Pod中,其内存需求总量不能超过该值。
  • requests.cpu: 所有非终止状态的Pod中,其CPU需求总量不能超过该值。
  • requests.memory: 所有非终止状态的Pod中,其内存需求总量不能超过该值。

(2)、ResourcesQuota 支持限制的存储资源:

  • requests.storage:所有 PVC 请求的存储大小总量不能超过此值。
  • Persistentvolumeclaims: PVC 对象存在的最大数目。
  • .storageclass.storage.k8s.io/requests.storage: 和 StorageClass 关联的 PVC 的请求存储的量大小不能超过此设置的值。
  • .storageclass.storage.k8s.io/persistentvolumeclaims: 和 StorageClass 关联的 PVC 的总量。

(3)、ResourcesQuota 支持限制的对象资源:

  • Configmaps: 允许存在的 ConfigMap 的数量。
  • Pods: 允许存在的非终止状态的 Pod 数量,如果 Pod 的 status.phase 为 Failed 或 Succeeded , 那么其处于终止状态。
  • Replicationcontrollers: 允许存在的 Replication Controllers 的数量。
  • Resourcequotas: 允许存在的 Resource Quotas 的数量。
  • Services: 允许存在的 Service 的数量。
  • services.loadbalancers: 允许存在的 LoadBalancer 类型的 Service 的数量。
  • services.nodeports: 允许存在的 NodePort 类型的 Service 的数量。
  • Secrets: 允许存在的 Secret 的数量。

K8s 资源配额管理对象 ResourcesQuota的更多相关文章

  1. kubernetes调度之资源配额

    系列目录 当多个用户或者开发团队共享一个有固定节点的的kubernetes集群时,一个团队或者一个用户使用的资源超过他应当使用的资源是需要关注的问题,资源配额是管理员用来解决这个问题的一个工具. 资源 ...

  2. kubernetes调度之资源配额示例

    系列目录 前面说过,资源配额限制在指定名称空间下,对资源对象数量和特定类型的资源的限制,你可以在ResourceQuota中指定配额 创建名称空间 我们创建一个新的名称空间来演示 kubectl cr ...

  3. 使用 Admission Webhook 机制实现多集群资源配额控制

    1 要解决的问题 集群分配给多个用户使用时,需要使用配额以限制用户的资源使用,包括 CPU 核数.内存大小.GPU 卡数等,以防止资源被某些用户耗尽,造成不公平的资源分配. 大多数情况下,集群原生的 ...

  4. docker容器资源配额控制

    转自:http://blog.csdn.net/horsefoot/article/details/51731543 文/ 天云软件 容器技术团队 Docker通过cgroup来控制容器使用的资源配额 ...

  5. Prometheus 监控K8S 资源状态对象

    Prometheus 监控K8S 资源状态对象 官方文档:https://github.com/kubernetes/kube-state-metrics kube-state-metrics是一个简 ...

  6. k8s资源清单基础

    资源清单介绍 创建资源的方法  apiserver仅接收JSON格式的资源定义  yaml格式提供配置清单 apiserver可自动把yaml转换成json格式数据 资源清单五个一级字段   1.ap ...

  7. docker容器资源配额控制_转

    转自:docker容器资源配额控制 ■ 文/ 天云软件 容器技术团队 docker通过cgroup来控制容器使用的资源配额,包括CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. cg ...

  8. 3.k8s资源控制器rs Deployment Job

    k8s资源控制器 #控制器类型 ReplicaSet #rs,确保pod副本数,rs已替代rc Deployment #管理rs,升级.回滚.扩容pod DaemonSet #在每个节点运行一个Pod ...

  9. k8s资源需求及资源限制

    在k8s上,可由容器或pod请求或消费的计算资源时指cpu和内存,这也是目前仅有的受支持的两种类型.相比较来说,cpu属于可压缩资源,即资源额度可按需收缩,而内存则是不可压缩型资源,对其执行收缩操作可 ...

  10. 理解k8s资源限制系列(二):cpu time

    本文介绍几种在K8S中限制资源使用的几种方法. 资源类型 在K8S中可以对两类资源进行限制:cpu和内存. CPU的单位有: 正实数,代表分配几颗CPU,可以是小数点,比如0.5代表0.5颗CPU,意 ...

随机推荐

  1. 【LeetCode】838. Push Dominoes 解题报告(Python)

    [LeetCode]838. Push Dominoes 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http:// ...

  2. SHARPENING (HIGHPASS) SPATIAL FILTERS

    目录 Laplacian UNSHARP MASKING AND HIGHBOOST FILTERING First-Order Derivatives Roberts cross-gradient ...

  3. 网易云 微专业C++系统工程师

    网易云 微专业C++系统工程师 一.学前基础 1.曾经学过某种编程语言(C语言最佳) 2.了解基本的变量.类型.作用域.循环和控制流程:了解基本数据类型(整数.浮点.字符串.数组等) 3.知道如何编译 ...

  4. KISS原则

    Keep It Simple, Stupid 1. 模块性原则:写简单的,通过干净的接口可被连接的部件:2. 清楚原则:清楚要比小聪明好.3. 合并原则:设计能被其它程序连接的程序.4. 分离原则:从 ...

  5. Java基础(八)——IO流2_缓冲流、转换流

    一.缓冲流 1.介绍 缓冲流:不能直接作用在文件上,需要包一层,它是一种处理流.用于提高文件的读写效率.它在流的基础上对流的功能进行了增强.提高读写速度的原因:内部提供了一个缓冲区.缺省使用 8192 ...

  6. 高效位运算 __builtin_系列函数

    •int __builtin_ffs (unsigned int x) 返回x的最后一位1的是从后向前第几位,比如7368(1110011001000)返回4. •int __builtin_clz ...

  7. 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的“删除”超链接

    查看本章节 查看作业目录 需求说明: 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的"删除"超链接,使用 DOM 节点的删除操作将对应的 ...

  8. Jenkins安装、配置与说明

    Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具,主要用于持续.自动的构建/测试软件项目.监控外部任务的运行. 这么解释很抽象,举个例子,我们开发完一个功能,我们要将项目发布打包好, ...

  9. 来自MyBatis不一样收获结果的探索之旅-v3.5.9

    概述 定义 MyBatis官网 https://mybatis.org/mybatis-3/ 最新版本为3.5.9 MyBatis是一个的ORM框架,支持自定义SQL.存储过程和高级映射.MyBati ...

  10. Spark-local本地环境搭建

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6815385772254822919/ 承接上一个文档<Spark源码编译> 解压spark编译好的压缩 ...