首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何使用 Kubernetes 资源配额

如何使用 Kubernetes 资源配额

作者头像
用户5166556
发布于 2023-03-18 03:42:27
发布于 2023-03-18 03:42:27
74800
代码可运行
举报
运行总次数:0
代码可运行

资源配额通过控制应用程序可以消耗多少CPU或内存来防止资源争用和抢占。

背景

当有人提到需要管理Kubernetes计算资源(尤其是CPU和内存)时,就会想到控制这个词。之所以提出控制资源使用,大都是在Kubernetes 平台部署了一段时间、开发人员正在广泛使用该集群、经常因为资源争用出现问题。

当部署Kubernetes应用时而未考虑集群的未来增长,那么就会出现资源问题。还可能与团队的部署和管理Kubernetes集群的经验水平有关。

没有进行资源控制,一个流氓应用程序或开发人员就可能会破坏业务。当几个开发人员共享具有固定数量节点的群集时,会无意间发生这种情况。这些资源限制可能会引起开发人员之间对可用资源的分歧,互相指责、抢占。对于集群管理员和开发人员而言,这些问题都是非常糟糕的情况。

有几种方法可以限制应用程序如何在Kubernetes环境中利用计算资源。在大多数情况下,资源配额和限制范围就足够了。请注意,在Kubernetes 中,存储管理通过使用Persistent Volume插件方法,其中定义了用于解决和控制不同存储需求的属性。

Kubernetes资源配额是一种控制使用计算资源的方式。本文将向您展示如何使用此功能来管理开发人员的行为并控制应用程序资源的消耗。

什么是资源配额?

简而言之,资源配额提供了限制每个命名空间资源消耗的约束。它们只能应用于命名空间级别,这意味着它们可以应用于计算资源并限制命名空间内的对象数量。

Kubernetes资源配额由ResourceQuota对象定义。当应用于命名空间时,它可能会限制计算资源(例如CPU和内存)以及以下对象的创建:

  • Pods
  • Services
  • Secrets
  • Persistent Volume Claims (PVCs)
  • ConfigMaps

Kubernetes支持两种类型的CPU和内存配额来管理计算资源。如LimitRange文档所述,主要时通过限制和请求两种方式来控制的。

简而言之,请求容器定义了保证的CPU或内存资源,而限制是容器可以使用的内存或CPU阈值,具体取决于其它容器资源使用情况。

该图说明了Kubernetes资源配额中请求和限制之间的差异。

下文演示了如何使用资源配额来创建约束,这些约束根据已定义的阈值将应用程序限制为只能使用特定资源。它还显示了通过实现资源配额可以有效限制Kubernetes Pod资源占用。

先决条件

开始之前,请确保已在本地计算机中部署了Kubernetes。如下是我的配置:

  • Minikube v1.14.2
  • linux 7
  • 可联网

设置资源配额

本示例创建了CPU配额,但是内存配额或两者的组合过程相似。

在实际的生产场景中,为了避免抢占,CPU资源通常是需要优先管理的资源。每当服务器(计算)上运行多个应用程序时,都是如此。

首先创建一个新的名称空间,您将设置CPU配额:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl create namespace quota-test
namespace/quota-test created

创建一个名为的文件cpu-quota.yaml,并将以下配额(演示创建)放入其中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: ResourceQuota
metadata:
  name: test-cpu-quota
spec:
  hard:
    requests.cpu: "100m"
    limits.cpu: "200m"

通过以下方式将配额应用于您的Kubernetes集群:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl apply -f cpu-qouta.yaml
resourcequota/test-cpu-quota created

验证是否使用以下kubectl describe命令创建的配额:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl describe resourcequota/test-cpu-quota --namespace quota-test
Name:         test-cpu-quota
Namespace:    quota-test
Resource      Used  Hard
--------      ----  ----
limits.cpu    0     200m
requests.cpu  0     100m

注意该Used resources Used列,当部署Pod时,此值将更改。

现在您已经定义了配额,请对其进行测试。对于此示例,在同一名称空间中部署三个不同的Pod,以查看是否可以根据定义的限制来控制资源的使用。这三个Pod是:

PodA:该Pod,第一个实例化,将使用50%的可用CPU

PodB:此Pod将使用可用CPU的另外50%;它将是第二个实例化的pod

PodC:定义的配额应防止部署第三个Pod。现在您已经了解了场景,请开始部署Pod

部署 Pod

PodA

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl create -n quota-test -f- <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: poda
spec:
  containers:
  - name: quota-test
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo Pod is Running ; sleep 5000']
    resources:
      requests:
        cpu: "50m"
      limits:
        cpu: "100m"
  restartPolicy: Never
EOF

通过再次查看配额并记录Used CPU值限制和请求来验证CPU使用情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl describe resourcequota/test-cpu-quota --namespace quota-test
Name:         test-cpu-quota
Namespace:    quota-test
Resource      Used  Hard
--------      ----  ----
limits.cpu    100m  200m
requests.cpu  50m   100m

PodB:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl create -n quota-test -f- <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: podb
spec:
  containers:
  - name: quota-test
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo Pod is Running ; sleep 5000']
    resources:
      requests:
        cpu: "50m"
      limits:
        cpu: "100m"
  restartPolicy: Never
EOF

再次检查CPU资源使用情况。如预期的那样,可以调度PodB,因为配额允许:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl describe resourcequota/test-cpu-quota --namespace quota-test
Name:         test-cpu-quota
Namespace:    quota-test
Resource      Used  Hard
--------      ----  ----
limits.cpu    200m  200m
requests.cpu  100m  100m

PodC:

现在,即使您知道PodAPodB最大化了您定义的CPU配额阈值,尝试实例化第三个Pod

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl create -n quota-test -f- <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: podc
spec:
  containers:
  - name: quota-test
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo Pod is Running ; sleep 5000']
    resources:
      requests:
        cpu: "5m"
      limits:
        cpu: "10m"
  restartPolicy: Never
EOF

如预期的那样,第三个Pod将不会实例化,因为已经定义的配额会阻止创建Pod

Error from server (Forbidden): error when creating "STDIN": pods "podc" is forbidden: exceeded quota: test-cpu-quota, requested: limits.cpu=10m,requests.cpu=5m, used: limits.cpu=200m,requests.cpu=100m, limited: limits.cpu=200m,requests.cpu=100m

如该示例所示,正确定义的资源配额是Kubernetes管理员可以用来管理开发人员行为的强大工具。

清理

删除您创建的名称空间(在本例中为quota-test):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl delete -n quota-test

规划配额

有很多方法可以控制用户如何部署应用程序,从而避免在Kubernetes集群中资源抢占。合理地实施配额、限制资源使用范围和其它本机服务,这有助于集群的稳定。

在计算资源上实现资源配额是您需要仔细考虑的重要设计决策,尤其是在部署Kubernetes以运行关键业务应用程序时。

在定义配额时,在计划中包括开发人员应用资源消耗很重要。由于他们对自己的应用资源占用情况最清楚,他们是您估计所需资源的最佳选择。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生技术爱好者社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python自动化办公——3个Excel表格中每个门店物品不同,想要汇总在一起(方法三)
前几天在Python白银交流群【上海新年人】问了一个Python自动化办公处理的问题,一起来看看吧。
Python进阶者
2023/11/02
2150
Python自动化办公——3个Excel表格中每个门店物品不同,想要汇总在一起(方法三)
Python自动化办公——3个Excel表格中每个门店物品不同,想要汇总在一起(方法二)
前几天在Python白银交流群【上海新年人】问了一个Python自动化办公处理的问题,一起来看看吧。
Python进阶者
2023/10/31
2560
Python自动化办公——3个Excel表格中每个门店物品不同,想要汇总在一起(方法二)
pandas 玩转 Excel 操作总结
pandas是一款基于NumPy的数据分析工具。它提供了大量的能使我们快捷处理数据的方法。
北山啦
2022/11/27
2.9K0
pandas 玩转 Excel 操作总结
python办公自动化-按需求批量提取EXCEL数据,python只需要几秒钟!
今天讲解的是如何利用Python来按需求批量提取EXCEL表格数据,然后进行保存。在用excel进行工作时,这样的操作在日常办公中是经常会用到,而用Python实现将会大大提高工作效率!
Python与Excel之交
2021/08/05
3.7K0
如何利用 pandas 批量合并 Excel?
今天分享一个利用Pandas进行数据分析的小技巧,也是之前有粉丝在后台进行提问的,即如何将多个pandas.dataframe保存到同一个Excel中。
刘早起
2022/09/21
9860
手把手教你用Python批量实现文件夹下所有Excel文件的第二张表合并
大家好,我是Python进阶者。今天继续给大家分享Python自动化办公的知识,之前也给大家分享过一些,感兴趣的话可以看看。
Python进阶者
2022/03/07
1.5K0
手把手教你用Python批量实现文件夹下所有Excel文件的第二张表合并
多张excel表做连接,就比如1表有A,B,C列,2表有A,B,D列,我想把A,B,C,D合到一张表
前几天在Python铂金群有个叫【水方人子】的粉丝问了一个关于excel处理的问题,这里拿出来给大家分享下,一起学习。
前端皮皮
2022/08/17
4160
多张excel表做连接,就比如1表有A,B,C列,2表有A,B,D列,我想把A,B,C,D合到一张表
100天精通Python丨办公效率篇 —— 07、Python自动化操作 Excel(读写、增删改查、分组统计)
小伙伴你好,在开始操作 Excel 之前,你需要安装 Python 和一些相关库。可以使用 pip 安装以下库,或者使用专业的 python 客户端:pycharm,快速安装 python 和相关库。
不吃西红柿
2023/04/12
1.8K0
【愚公系列】2023年07月 Python自动化办公之pandas操作excel
Pandas是一个用于数据操作和数据分析的Python库。它提供了高效的数据结构,使得处理数据变得更加简单和快捷。Pandas的核心数据结构包括两种类型:Series和DataFrame。Series是一维的数据结构,类似于数组,可以容纳任何类型的数据。DataFrame是二维的数据结构,可以认为是一个表格,其中每列可以是不同类型的数据。Pandas还提供了许多数据操作和数据分析的方法,例如数据清洗、数据筛选、数据变换、数据分组等等。Pandas的优点包括:易于操作、高效处理大数据、内置可视化工具、灵活的数据结构、支持多种数据格式等等。
愚公搬代码
2025/05/28
1760
【愚公系列】2023年07月 Python自动化办公之pandas操作excel
pandas速成笔记(2)-excel增删改查基本操作
第3行输出的就是表格数据,注意最左没有列名的这列,从0到5,如果做过数据库开发的同学,应该都知道:数据表内部通常会有一个唯一键,也称为主键索引。pandas读取的excel,如果没有指定索引,默认会按数字顺序,生成1个默认的索引,即上面的0-5。
菩提树下的杨过
2022/04/27
1.7K0
pandas速成笔记(2)-excel增删改查基本操作
python读写excel的一些技巧
python处理excel的库很多,例如xlrd/xlwt/openpyxl/xlsxwriter等。每个库都有一定的局限性,pandas处理excel是基于这些库的,所以集大成者。 个人还是比较喜欢用pandas, 开箱即用。
赵云龙龙
2021/01/28
1.8K0
Python可视化数据分析08、Pandas_Excel文件读写
Python可视化数据分析08、Pandas_Excel文件读写 📋前言📋 💝博客:【红目香薰的博客_CSDN博客-计算机理论,2022年蓝桥杯,MySQL领域博主】💝 ✍本文由在下【红目香薰】原创,首发于CSDN✍ 🤗2022年最大愿望:【服务百万技术人次】🤗 💝Python初始环境地址:【Python可视化数据分析01、python环境搭建】💝  ---- 环境需求 环境:win10 开发工具:PyCharm Community Edition 2021.2 数据库:MySQ
红目香薰
2022/11/30
7120
Python可视化数据分析08、Pandas_Excel文件读写
pandas速成笔记(3)-join/groupby/sort/行列转换
有数据库开发经验的同学,一定对sql中的join ... on 联表查询不陌生,pandas也有类似操作
菩提树下的杨过
2022/04/27
7940
pandas速成笔记(3)-join/groupby/sort/行列转换
python使用pandas的常用操作
Pandas 的名字来源于“Panel Data”和“Python Data Analysis Library”的缩写。它最初由 Wes McKinney 开发,旨在提供高效、灵活的数据操作和分析工具。Pandas 在数据科学、统计分析、金融、经济学等领域得到了广泛应用。
梦无矶小仔
2024/06/06
7840
python使用pandas的常用操作
Python自动化之Excel数据表合并
之前已经分享了Excel自动化的两篇文章。今天为大家带来第三篇。如有需要,请看下方链接(源码在下方视频中)
用户2966292
2023/03/18
3840
Python自动化之Excel数据表合并
Python 处理Excel总结
一个测试有两个sheet页的Excel测试文件 https://github.com/dongkelun/python/blob/master/data/test.xlsx
小明互联网技术分享社区
2022/10/31
3900
Python 处理Excel总结
Python基础-Pandas
提供了高效地操作大型数据集所需的工具,支持数据上做各种变化。 为Python提供高性能、易使用的数据结构和数据分析工具。 用于数据挖掘和数据分析,同时也提供数据清洗功能。 使用时先导入 import pandas as pd (往后的调用只需要输入pd即可,当然也可以把as pd 改成任何使用者喜欢的词汇,比如 as AB 之类的) 里面有两大数据结构在很多情况下都会用到: Series 和 DataFrame。
凑齐六个字吧
2024/07/25
2920
Python基础-Pandas
解决Pandas的to_excel()写入不同Sheet,而不会被重写
在使用Pandas的to_excel()方法写入数据时,当我们想将多个数据写入一个Excel表的不同DataFrame中,虽然能够指定sheet_name参数,但是会重写整个Excel之后才会存储。
py3study
2020/12/22
3.4K0
解决Pandas的to_excel()写入不同Sheet,而不会被重写
在Python中实现Excel的VLOOKUP、HLOOKUP、XLOOKUP函数功能
Excel的LOOKUP公式可能是最常用的公式之一,因此这里将在Python中实现Excel中查找系列公式的功能。事实上,我们可以使用相同的技术在Python中实现VLOOKUP、HLOOKUP、XLOOKUP或INDEX/MATCH等函数的功能。
fanjy
2022/11/16
8.3K0
在Python中实现Excel的VLOOKUP、HLOOKUP、XLOOKUP函数功能
数据处理小技巧:根据指定内容提取行
两个excel表格有共同的一列A,第一个表格数据少,第二个表格数据多,我现在想根据表1的A列将表2中包含A列的内容提取出来; 简单说就是提取表格中指定的行
用户7010445
2020/03/03
1.3K0
推荐阅读
相关推荐
Python自动化办公——3个Excel表格中每个门店物品不同,想要汇总在一起(方法三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档