首页 > 其他分享 >资源限制LimitRange

资源限制LimitRange

时间:2024-01-16 23:45:37浏览次数:34  
标签:02 限制 master231 LimitRange memory root cpu 资源

目录

一.资源限制LimitRange概述

1.什么是资源限制

默认情况下, Kubernetes集群上的容器运行使用的计算资源没有限制。 

使用Kubernetes资源配额, 管理员(也称为集群操作者)可以在一个指定的命名空间内限制集群资源的使用与创建。 在命名空间中,一个 Pod 最多能够使用命名空间的资源配额所定义的 CPU 和内存用量。 

作为集群操作者或命名空间级的管理员,你可能也会担心如何确保一个Pod不会垄断命名空间内所有可用的资源。

LimitRange是限制命名空间内可为每个适用的对象类别 (例如 Pod 或 PersistentVolumeClaim) 指定的资源分配量(限制和请求)的策略对象。

一个 LimitRange(限制范围) 对象提供的限制能够做到:
	- 在一个命名空间中实施对每个 Pod 或 Container 最小和最大的资源使用量的限制。
	- 在一个命名空间中实施对每个 PersistentVolumeClaim 能申请的最小和最大的存储空间大小的限制。
	- 在一个命名空间中实施对一种资源的申请值和限制值的比值的控制。
	- 设置一个命名空间中对计算资源的默认申请/限制值,并且自动的在运行时注入到多个 Container 中。


当某命名空间中有一个 LimitRange 对象时,将在该命名空间中实施LimitRange限制。LimitRange 的名称必须是合法的 DNS 子域名。


参考链接:
	https://kubernetes.io/zh-cn/docs/concepts/policy/limit-range/

2.资源限制LimitRange和请求的约束

- 管理员在一个命名空间内创建一个 LimitRange 对象。

- 用户在此命名空间内创建(或尝试创建) Pod 和 PersistentVolumeClaim 等对象。

- 首先,LimitRanger 准入控制器对所有没有设置计算资源需求的所有 Pod(及其容器)设置默认请求值与限制值。

- 其次,LimitRange 跟踪其使用量以保证没有超出命名空间中存在的任意 LimitRange 所定义的最小、最大资源使用量以及使用量比值。

- 若尝试创建或更新的对象(Pod 和 PersistentVolumeClaim)违反了 LimitRange 的约束, 向 API 服务器的请求会失败,并返回 HTTP 状态码 403 Forbidden 以及描述哪一项约束被违反的消息。

- 若你在命名空间中添加 LimitRange 启用了对 cpu 和 memory 等计算相关资源的限制, 你必须指定这些值的请求使用量与限制使用量。否则,系统将会拒绝创建 Pod。

- LimitRange 的验证仅在 Pod 准入阶段进行,不对正在运行的 Pod 进行验证。 如果你添加或修改 LimitRange,命名空间中已存在的 Pod 将继续不变。

- 如果命名空间中存在两个或更多 LimitRange 对象,应用哪个默认值是不确定的。

二.资源限制LimitRange实战案例

1.计算资源最大,最小限制

1.1 设置容器的最大值和最小值限制资源

[root@master231 02-LimitRange]# cat 01-cpu-memory-min-max.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-memory-min-max
  namespace: kube-public
spec:
  limits:
    # 容器能设置limit的最大值
  - max:
      cpu: 2
      memory: 4Gi
    # 容器能设置limit的最小值
    min:
      cpu: 200m
      memory: 100Mi
    # 限制的类型是容器
    type: Container
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 01-cpu-memory-min-max.yaml 
limitrange/cpu-memory-min-max created
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl -n kube-public get limits
NAME                 CREATED AT
cpu-memory-min-max   2024-01-09T14:45:28Z
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl -n kube-public describe limits cpu-memory-min-max 
Name:       cpu-memory-min-max
Namespace:  kube-public
Type        Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---    ---  ---------------  -------------  -----------------------
Container   memory    100Mi  4Gi  4Gi              4Gi            -
Container   cpu       200m   2    2                2              -
[root@master231 02-LimitRange]# 


温馨提示:
	注意,上面有一个"Default Request"和"Default Limit"选项,表示当用户没有设置资源限制相关字段时,就是用该默认值哟。

1.2 小于requests样例测试

[root@master231 02-LimitRange]# cat 02-pods.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pods-nginx
  namespace: kube-public
spec:
  containers:
  - name: web
    image: nginx:1.20.1-alpine
    resources:
      requests:
        cpu: 0.1
        memory: 1Gi
      limits:
        cpu: 1
        memory: 2Gi
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 02-pods.yaml 
Error from server (Forbidden): error when creating "02-pods.yaml": pods "pods-nginx" is forbidden: minimum cpu usage per Container is 200m, but request is 100m
[root@master231 02-LimitRange]# 

1.3 大于limits样例测试

[root@master231 02-LimitRange]# cat 03-pods.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pods-nginx-02
  namespace: kube-public
spec:
  containers:
  - name: web
    image: nginx:1.20.1-alpine
    resources:
      requests:
        cpu: 0.5
        memory: 1Gi
      limits:
        cpu: 1
        memory: 5Gi
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 03-pods.yaml
Error from server (Forbidden): error when creating "03-pods.yaml": pods "pods-nginx" is forbidden: maximum memory usage per Container is 4Gi, but limit is 5Gi
[root@master231 02-LimitRange]# 

1.4 不设置resources字段

[root@master231 02-LimitRange]# cat 04-pods.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pods-nginx-04
  namespace: kube-public
spec:
  containers:
  - name: web
    image: nginx:1.20.1-alpine
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 04-pods.yaml 
pod/pods-nginx-04 created
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl -n kube-public get pods pods-nginx-04 -o yaml  | grep resources -A 6
    resources:
      limits:
        cpu: "2"
        memory: 4Gi
      requests:
        cpu: "2"
        memory: 4Gi
[root@master231 02-LimitRange]#  

1.5 设置合法的resources字段

[root@master231 02-LimitRange]# cat 05-pods.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pods-nginx-05
  namespace: kube-public
spec:
  containers:
  - name: web
    image: nginx:1.20.1-alpine
    resources:
      requests:
        cpu: 0.5
        memory: 1Gi
      limits:
        cpu: 2
        memory: 3Gi
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 05-pods.yaml 
pod/pods-nginx-05 created
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl -n kube-public get pods pods-nginx-04 -o yaml  | grep resources -A 6
    resources:
      limits:
        cpu: "2"
        memory: 4Gi
      requests:
        cpu: "2"
        memory: 4Gi
[root@master231 02-LimitRange]# 


温馨提示:
	不难发现,我们创建时,指定的"requests.cpu"是"0.5",而"requests.memory"是"1Gi",但实际上运行时却是我们设置的默认的最小值哟~

2.计算资源默认值限制

2.1 设置容器的默认限制资源

[root@master231 02-LimitRange]# cat 06-cpu-memory-default.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-memory-min-max-default
  namespace: kube-public
spec:
  limits:
  - max:
      cpu: 2
      memory: 4Gi
    min:
      cpu: 200m
      memory: 100Mi
    type: Container
    # 设置默认值的Request
    defaultRequest:
      cpu: 200m
      memory: 500Mi
    # 设置默认值的Limit
    default:
      cpu: 1
      memory: 2Gi
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 06-cpu-memory-default.yaml
limitrange/cpu-memory-min-max-default created
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl  -n kube-public describe limitrange cpu-memory-min-max-default
Name:       cpu-memory-min-max-default
Namespace:  kube-public
Type        Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---    ---  ---------------  -------------  -----------------------
Container   cpu       200m   2    200m             1              -
Container   memory    100Mi  4Gi  500Mi            2Gi            -
[root@master231 02-LimitRange]# 

2.2 不设置resources字段验证

[root@master231 02-LimitRange]# cat 07-pods.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pods-nginx-07
  namespace: kube-public
spec:
  containers:
  - name: web
    image: nginx:1.20.1-alpine
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 07-pods.yaml
pod/pods-nginx-07 created
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl -n kube-public get pods pods-nginx-07 -o yaml | grep resources -A 6
    resources:
      limits:
        cpu: "1"
        memory: 2Gi
      requests:
        cpu: 200m
        memory: 500Mi
[root@master231 02-LimitRange]# 

3.存储资源最大,最小限制

2.1 设置指定范围的存储资源限制

[root@master231 02-LimitRange]# cat 08-storage-min-max.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: storage-min-max
  namespace: kube-public
spec:
  limits:
  - type: PersistentVolumeClaim
    max:
      storage: 10Gi
    min:
      storage: 1Gi
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 08-storage-min-max.yaml
limitrange/storage-min-max created
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl -n kube-public describe limitrange storage-min-max 
Name:                  storage-min-max
Namespace:             kube-public
Type                   Resource  Min  Max   Default Request  Default Limit  Max Limit/Request Ratio
----                   --------  ---  ---   ---------------  -------------  -----------------------
PersistentVolumeClaim  storage   1Gi  10Gi  -                -              -
[root@master231 02-LimitRange]# 

2.2 小于min样例测试

[root@master231 02-LimitRange]# cat 09-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-demo-09
  namespace: kube-public
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 0.5Gi
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 09-pvc.yaml 
Error from server (Forbidden): error when creating "09-pvc.yaml": persistentvolumeclaims "pvc-demo-09" is forbidden: minimum storage usage per PersistentVolumeClaim is 1Gi, but request is 512Mi
[root@master231 02-LimitRange]# 

2.3 大于max样例测试

[root@master231 02-LimitRange]# cat 10-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-demo-10
  namespace: kube-public
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 15Gi
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 10-pvc.yaml
Error from server (Forbidden): error when creating "10-pvc.yaml": persistentvolumeclaims "pvc-demo-10" is forbidden: maximum storage usage per PersistentVolumeClaim is 10Gi, but request is 15Gi
[root@master231 02-LimitRange]# 

2.4 设置合法的存储大小字段

[root@master231 02-LimitRange]# cat 11-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-demo-11
  namespace: kube-public
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
[root@master231 02-LimitRange]# 
[root@master231 02-LimitRange]# kubectl apply -f 11-pvc.yaml
persistentvolumeclaim/pvc-demo-11 created
[root@master231 02-LimitRange]# 

标签:02,限制,master231,LimitRange,memory,root,cpu,资源
From: https://www.cnblogs.com/yinzhengjie/p/17968870

相关文章

  • Springboot上传文件大小限制处理
    今天在开发过程中遇到一个文件上传的问题io.undertow.server.RequestTooBigException:UT000020:Connectionterminatedasrequestwaslargerthan10485760Servlet容器使用的是undertow,看异常信息应该是默认存在10MB的文件大小限制。百度了一下,找到如下配置,问题得以解决,记......
  • 分享一个国内可用的ChatGPT网站,免费无限制,支持AI绘画
    背景ChatGPT作为一种基于人工智能技术的自然语言处理工具,近期的热度直接沸腾......
  • AntDesign文件上传前端文件类型控制 不采用Upload.IGNORE来限制出现在upload_list中
    <a-form-item label="附件" :label-col="{span:4}" :wrapperCol="{span:4}" :colon="false" > <divclass="upload"> <a-upload :fileList="uploadFileList&qu......
  • 这四款遥测终端机,水文水资源信息化的必备之选!
    水文水资源信息化已逐步成为现代水利的发展趋势。在这个过程中,遥测终端机RTU作为关键的信息化设备,为水文水资源信息化提供了至关重要的技术支持。遥测终端机RTU作为数据采集和传输的关键设备,具备远程数据的实时监测与控制功能,广泛应用于水文、气象、环保等领域。遥测终端机实现数据......
  • Docker 与 Linux Cgroups:资源隔离的魔法之旅
    这篇文章主要介绍了Docker如何利用Linux的ControlGroups(cgroups)实现容器的资源隔离和管理。最后通过简单Demo演示了如何使用Go和cgroups交互。如果你对云原生技术充满好奇,想要深入了解更多相关的文章和资讯,欢迎关注微信公众号。搜索公众号【探索云原生】即可订阅......
  • CDN静态资源加速&Lighthouse性能监测
    本文主要介绍了cdn加速在项目中的实现,以及使用Lighthouse对前端性能指标进行监测打分。Lighthouse简介Lighthouse是谷歌开发并开源的web性能测试工具,用于改进网络应用的质量,可以将其作为一个Chrome扩展程序运行,或从命令行运行。只需要为其提供一个需要审查的地址,Lighthouse就会......
  • 深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析
    PythonMongoDB排序对结果进行排序使用sort()方法对结果进行升序或降序排序。sort()方法接受一个参数用于“字段名”,一个参数用于“方向”(升序是默认方向)。示例按名称按字母顺序对结果进行排序:importpymongomyclient=pymongo.MongoClient("mongodb://localhost:270......
  • 【不起作用】限制前端项目安装依赖的工具只能是:npm、yarn、pnpm中的一个
    前言安装依赖的工具有好几个,有时候我们在多个项目之间切换时,容易忘记,所以我们需要设置某个项目只能使用某一种依赖安装工具正文方案一(不推荐)本方案仅供提示作用,并不会强制限制首先项目根目录下新建一个.npmrc文件,内容为:engine-strict=true然后修改项目的package.js......
  • 亿信华辰:数据资源、数据资产和数据要素的概念辨析
    从商业决策到科学研究,从个性化服务到社会治理,数据都在发挥着越来越重要的作用。然而,对于数据资源、数据资产和数据要素这三个概念,人们往往容易混淆。为了更好地理解和利用数据,有必要对这三个概念进行深入的辨析。下面亿信华辰将逐一探讨这三个概念的定义、特征以及相互关系,以期帮助......
  • 资源管理
    进程与资源管理windows资源管理器在运维的日常工作中,监视系统的运行状况是每天例行的工作,一个服务器的健康,从主要的几个资源使用率上,就可以得出结论,比如CPU使用率、内存使用率,磁盘使用率。在Windows中我们可以很直观的使用"任务管理器"来进行进程管理,了解系统的运行状态通常......