我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

女主宣言

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

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

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

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

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

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

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

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

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

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

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

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

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

apiVersion: v1
kind: LimitRange
metadata:   name: resource-constraints-lr
spec:   limits:
        - max:
         memory: 1Gi
         cpu: 0.8     
       min:       
         memory: 500Mi       
         cpu: 0.3     
       type: Container

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

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

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

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

响应如下:

spec:
  limits:
  - default:
      cpu: 800m       
      memory: 1Gi     
    defaultRequest:
     cpu: 800m
     memory: 1Gi
    max:     
     cpu: 800m     
     memory: 1Gi   
    min:     
     cpu: 300m     
     memory: 500Mi
   type: Container

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

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

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

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

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

apiVersion: v1
kind: Pod
metadata:
  name: resource-constraints-pod
spec:
 containers:
 - name: resource-constraints-ctr  
 image: httpd:2.4   
 resources:       
 limits:         
    memory: "900Mi"       
    cpu: 0.7       
 requests:       
    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-demo
pod "resource-constraints-pod" created

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

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

你应该得到以下输出:

containers:
 - image: httpd:2.4    imagePullPolicy: IfNotPresent    name: resource-constraints-ctr    resources:
     limits:
       cpu: 700m        memory: 900Mi      requests:
       cpu: 400m        memory: 600Mi

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

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

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

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

kubectl create -f resource-constraints-pod-2.yaml --namespace resource-constraints-demo
pod "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云平台团队打造的技术分享公众号,内容涉及云计算、数据库、大数据、监控、泛前端、自动化测试等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

原文链接:https://mp.weixin.qq.com/s/NXLNIL1rbItpzjAJmp9WUQ

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录