女主宣言

众所周知,Kubernetes是允许指定CPU和RAM的请求和限制的,这一特性对于单独的pod的资源消耗管理非常有用。在本系列文章中,我们将向大家展示集群资源的高效管理的三种策略。

PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!

众所周知,Kubernetes是允许指定CPU和RAM的请求和限制的,这一特性对于单独的pod的资源消耗管理非常有用。

但是,如果你是Kubernetes集群管理员,你可能还希望控制集群中资源的全局性消耗,并/或配置所有容器的默认资源需求。

值得高兴的是,Kubernetes支持名称空间级别的集群资源管理。正如你可能已经知道的,Kubernetes的名称空间提供了名称和资源配额的范围,这允许在多个用户、项目和团队之间有效地划分集群资源。在Kubernetes中,你可以定义缺省资源请求和限制、资源约束(最小和最大资源请求和限制),以及在给定名称空间中运行的所有容器的资源配额。这些特性使得集群中的应用程序能够高效地利用资源,并在不同的团队之间有效地分配资源。例如,使用名称空间的资源约束允许你控制生产和开发工作负载如何使用资源,从而允许它们消耗有限的集群资源的公平份额。这可以通过为生产和开发工作负载创建单独的名称空间来实现,并为它们分配不同的资源约束。

在系列文章中,我们将向你展示集群资源的高效管理的三种策略:

  1. 设置默认的资源请求和容器的限制

  2. 定义最小和最大的资源约束

  3. 为名称空间中的所有容器设置资源配额

这些策略将帮助你解决各种各样的用例,利用Kubernetes名称空间和资源管理的全部功能。

为名称空间设置最小和最大资源约束

在这个例子中,我们将为命名空间创建资源约束。这些约束本质上是容器可以在资源请求和限制中使用的最小和最大资源量。让我们看看它是如何工作的!

与前面的例子一样,首先创建名称空间:

kubectl create namespace resource-constraints-demo
namespace "resource-constraints-demo" created

接下来,我们将为这个名称空间创建一个限制范围:

apiVersion: v1kind: LimitRangemetadata:name: resource-constraints-lrspec:limits:- max:memory: 1Gicpu: 0.8min:memory: 500Micpu: 0.3type: Container

保存 LimitRange 为 limit-range-2.yaml 并创建它:

kubectl create -f limit-range-2.yaml --namespace resource-constraints-demolimitrange "resource-constraints-lr" created

在创建了限制范围之后,让我们看看我们的最小和最大资源约束是否应用于名称空间:

kubectl get limitrange resource-constraints-lr --namespace resource-constraints-demo --output=yaml 

响应如下:

spec:limits:- default:cpu: 800mmemory: 1GidefaultRequest:cpu: 800mmemory: 1Gimax:cpu: 800mmemory: 1Gimin:cpu: 300mmemory: 500Mi    type: Container

正如你所看到的,你的名称空间的默认资源请求和限制被自动设置为在 LimitRange 内指定的最大资源约束。现在,当我们在 resource-constraints-demo 名称空间中创建容器时,下面的规则将自动应用:

  • 如果容器没有指定它的资源请求和限制,则应用默认的资源请求和限制。

  • 名称空间中的所有容器都需要有大于或等于3亿的资源请求,用于CPU和500 Mi内存。

  • 名称空间中的所有容器都需要资源限制小于或等于8亿,用于CPU和1 Gi内存。

让我们创建一个pod来说明如何将名称空间资源约束应用到容器中:

apiVersion: v1kind: Podmetadata:name: resource-constraints-podspec:containers:- name: resource-constraints-ctrimage: httpd:2.4resources:limits:memory: "900Mi"cpu: 0.7requests:memory: "600Mi"cpu: 0.4

该规范请求600 Mi RAM和0.4 CPU,并为这个pod中的httpd容器设置900 Mi RAM和0.7 CPU的限制。这些资源需求满足了名称空间的最小和最大约束。

我们保存为 default-resources-demo-pod-3.yaml 并在我们的名称空间中创建pod:

kubectl create -f resource-constraints-pod.yaml --namespace resource-constraints-demopod "resource-constraints-pod" created

接下来,检查分配给pod中的容器的资源:

kubectl get pod resource-constraints-pod --namespace resource-constraints-demo --output=yaml

你应该得到以下输出:

containers:  - image: httpd:2.4imagePullPolicy: IfNotPresentname: resource-constraints-ctrresources:      limits:        cpu: 700mmemory: 900Mirequests:        cpu: 400mmemory: 600Mi

之所以成功创建pod,是因为容器的请求和限制在名称空间的最小和最大约束范围内。

现在,让我们看看如果我们指定的请求和限制超出了为名称空间定义的最小值和最大值,会发生什么。让我们用新的请求和限制来创建一个新的pod:

apiVersion: v1kind: Podmetadata:name: resource-constraints-pod-2spec:containers:- name: resource-constraints-ctr-2image: httpd:2.4resources:limits:memory: "1200Mi"cpu: 1.2requests:memory: "200Mi"cpu: 0.2

我们保存为 resource-constraints-pod-2.yaml 并在我们的名称空间中创建pod:

kubectl create -f resource-constraints-pod-2.yaml --namespace resource-constraints-demopod "resource-constraints-pod-2" created

由于资源请求低于最小 LimitRange 的值,并且资源限制超出了这个名称空间的最大值,所以pod不会像预期的那样被创建:

Error from server (Forbidden): error when creating "resource-constraints-pod-2.yaml": pods "resource-constraints-pod-2" is forbidden: [minimum memory usage per Container is 500Mi, but request is 200Mi., minimum cpu usage per Container is 300m, but request is 200m., maximum cpu usage per Container is 800m, but limit is 1200m., maximum memory usage per Container is 1Gi, but limit is 1200Mi.]

清理

在这个例子完成之后,让我们清理一下。

删除名称空间:

kubectl delete namespace resource-constraints-demo
namespace "resource-constraints-demo" deleted

总结

在本篇文章中,我们将向大家展示了为名称空间设置最小和最大资源约束。后续系列文章将会继续展示:为名称空间中的所有容器设置资源配额。

HULK一线技术杂谈

由360云平台团队打造的技术分享公众号,内容涉及云计算、数据库、大数据、监控、泛前端、自动化测试等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

利用Kubernetes名称空间来管理内存和CPU资源(二)相关推荐

  1. 利用Kubernetes名称空间来管理内存和CPU资源(三)

    女主宣言 众所周知,Kubernetes是允许指定CPU和RAM的请求和限制的,这一特性对于单独的pod的资源消耗管理非常有用.在本系列文章中,我们将向大家展示集群资源的高效管理的三种策略. PS:丰 ...

  2. 利用Kubernetes名称空间来管理内存和CPU资源(一)

    女主宣言 众所周知,Kubernetes是允许指定CPU和RAM的请求和限制的,这一特性对于单独的pod的资源消耗管理非常有用.在本系列文章中,我们将向大家展示集群资源的高效管理的三种策略. PS:丰 ...

  3. Kubernetes基本入门-名称空间资源(三)

    名称空间级资源 名称空间在kubernetes中主要的作用是做资源隔离,因此名称空间级别的资源只在当前名称空间下有效. 工作负载型资源 工作负载(workload)是在Kubernetes上运行的应用 ...

  4. 托管非托管_如何利用Kubernetes的力量来优化您的托管成本

    托管非托管 by Daniele Polencic 由Daniele Polencic 如何利用Kubernetes的力量来优化您的托管成本 (How to leverage the power of ...

  5. Linux内存管理内存映射以及通过反汇编定位内存错误问题

    提到C语言,我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的! 我们需要知道--变量,其实是内存地址的一个抽像名字罢了.在静态编译的程序中,所有的变量名都会在编译时被转成内存地址.机器 ...

  6. Android最佳性能实践(一):合理管理内存

    原文出处::http://blog.csdn.net/guolin_blog/article/details/42238627 系列阅读 Android最佳性能实践(一):合理管理内存 Android ...

  7. swap交换空间(当内存不足时)

    一.交换空间概述 虚拟内存 利用硬盘的空间,充当内存的空间 相当于虚拟内存         –当物理内存不够用时,使用磁盘空间来模拟内存         –在一定程度上缓解内存不足的问题 CPU--- ...

  8. YARN的内存和CPU配置优化

    2019独角兽企业重金招聘Python工程师标准>>> Hadoop YARN同时支持内存和CPU两种资源的调度,本文介绍如何配置YARN对内存和CPU的使用. YARN作为一个资源 ...

  9. 详解 YARN的内存和CPU配置

    一:简单介绍 Hadoop YARN同时支持内存和CPU两种资源的调度,本文介绍如何配置YARN对内存和CPU的使用. YARN作为一个资源调度器,应该考虑到集群里面每一台机子的计算资源,然后根据ap ...

最新文章

  1. ios php range,PHP range() 函数 - PHP 基础教程
  2. 【微信小程序企业级开发教程】视图与渲染详解
  3. centos yum安装python2.7及常见报错处理
  4. 为什么 SAP Spartacus 不手动导入 UserAccountModule,就看不到 LoginForm?
  5. 论文浅尝 | 利用知识图谱嵌入和图卷积网络进行长尾关系抽取
  6. html5中矩形条怎么写,html5中往矩形中贴图片
  7. oracle替换指定字符串字符_实例:替换方框内字符串内容
  8. VB2010的时间表示
  9. svn server启动报错:The HTTP service failed to start
  10. 计算机查找dll文件,怎么查看进程正在调用哪些DLL文件
  11. 倍福TwinCAT 3 气缸动作程序编写
  12. 隐藏隧道通信:Socks 隧道
  13. 打印机打印中文,截取字符时出现乱码问题
  14. linux ip_conntrack_max,解?Linux NAT ip_conntrack: table full的方法
  15. [转载]受 Windows XP SP2 影响的软件列表
  16. 顽童时代-----钟丽思
  17. 无线授时服务器接LED屏,实现ipad远程无线控制led大屏幕分以下几个步骤!
  18. 在快乐男声歌唱比赛中,有6位评委给选手打分,分数在0-10分,选手王杰表现的不过,请输入6位评委的打分,输出6位评委的分数
  19. 流浪地球动态桌面壁纸
  20. 3D中的方位和角位移(2)

热门文章

  1. 50. 第一个只出现一次的字符
  2. 一步一步搭建mysql_Linux——搭建PHP开发环境第一步:mysql
  3. 为什么手机升级系统反应慢了_手机卡顿反应慢怎么解决?久用不卡顿的手机盘点...
  4. Nodejs学习笔记(一)——基础之全局对象、包和npm
  5. java变量默为public_《Java8学习笔记》读书笔记(六)
  6. iOS vuforia 学习钻研(一)
  7. 没有找到MSVCP71.dll,迅雷5无法进行离线下载,P2P Seacher无法连入emule网络
  8. C++ static、const对象声明与定义 问题来源?
  9. 2008哲思自由软件峰会
  10. 怎样才能有德国煤矿那样严密的安全网?