K8S资源管理之LimitRange

        资源配置范围管理:LimitRange
        在默认情况下,Kubernetes不会对Pod加CPU和内存的限制,这意味着Kubernetes系统中的任何Pod都可以使用其节点的所有可用的CPU和内存。

        如果一个机器的Pod特别多,我们又不愿意为每个Pod都配置上Requests和Limits,我们可以对集群内Requests和Limits的配置做一个全局限制,常见的配置场景如下:

        1.集群中的诶个节点都有2GB内存,集群管理员不希望任何Pod申请超过2GB的内存,可以在系统管理功能中设置禁止Pod申请超过2GB内存。

        2.集群由同一个组织中的两个团队共享,分别为生产环境和开发环境。生产环境最多可以使用8GB诶存,而开发环境最多可以使用512MB内存。集群管理员希望通过为这两个环境创建不同的namespace,并为每个namespace都设置不同的限制来满足这个要求。

        3.用户创建Pod时使用的资源可能会刚好比整个机器的上限稍小,而恰好剩余的资源大小又不足以分配其他的Pod,这样就显得有点浪费,集群管理员希望将每个Pod都设置为必须至少使用集群平均值(CPU和内存)的20%,这样集群就能够提供更好的资源一致性调度,从而减少资源浪费。

        下面我们举例说明:

        1.创建一个名为limit-example的Namespace

[root@k8s-master ~]# kubectl create namespace limit-example
namespace/limit-example created
[root@k8s-master ~]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   23d
kube-node-lease   Active   23d
kube-public       Active   23d
kube-system       Active   23d
limit-example     Active   7s

        2.为命名空间设置LimitRange

#1.创建limits.yaml文件
[root@k8s-master limit-example]# cat limits.yaml 
apiVersion: v1
kind: LimitRange
metadata:name: mylimits
spec:limits:- max:cpu: "4"memory: 2Gimin: cpu: 200mmemory: 6MimaxLimitRequestRatio:cpu: 3memory: 2type: Pod- default:cpu: 300mmemory: 200MidefaultRequest:cpu: 200mmemory: 100Mimax:cpu: "2"memory: 1Gimin: cpu: 100mmemory: 3MimaxLimitRequestRatio:cpu: 5memory: 4type: Container
#2.创建该LimitRange:
[root@k8s-master limit-example]# kubectl create -f limits.yaml --namespace=limit-example
#3.查看limit-example中的LimitRange:
[root@k8s-master limit-example]# kubectl describe limits --namespace=limit-example
Name: mylimits
Namespace: limit- example
Type  		Resource   Min    Max    Default Request    Default Limit     Max Limit/Request Ratio
Pod    		cpu        200m   4       -                  -				  3
Pod    		memory     6Mi    2Gi     -                  -				  2
Container   cpu 	   100m   2       200m				 300m			  5
Container   memory     3Mi    1Gi     lOOMi				 200Mi			  4

(1).不论是CPU还是内存,在LimitRange中,Pod和Container都可以设置Min、Max和Max Limit/Requests Ratio参数。Container还可以设置Default Request和Default Limit参数,而Pod不能设置Default Request和Default Limit 参数。
(2).对Pod和Container的参数解释如下:
    Container的Min(100m和3Mi)是Pod中所有容器的Requests值下限;
    Container的Max(上面的2和lGi)是Pod中所有容器的Limits值上限; 
    Container的Default Request(上面的200m和100Mi)是Pod中所有未指定Requests值的容器的默认Requests值; 
    Container的Default Limit(上面的300m和200Mi)是Pod中所有未指定Limits值的容器的默认Limits值。
    对于同一资源类型,这4个参数必须满足以下关系:Min≤Default Request≤Default Limit≤Max。

    Pod的Min(上面的200m和6Mi)是Pod中所有容器的Requests值的总和下限;
    Pod的Max(上面的4和2Gi)是Pod中所有容器的Limits值的总和上限。 
    容器未指定Requests值或者Limits值时,将使用Container的Default Request值或者Default Limit值。

    Container的Max Limit/Requests Ratio(上面的5和4)限制了Pod中所有容器的Limits值与Requests值的比例上限;
    而Pod的Max Limit/Requests Ratio(上面的3和2)限制了Pod中所有容器的Limits值总和与Requests值总和的比例上限。

 (3).如果设置了Container的Max,那么对于该类资源而言,整个集群中的所有容器都必须设置Limits,否则无法成功创建。Pod内的容器未配置Limits时,将使用Default Limit额值(上面的300m CPU和200MiB内存),如果也未配置Default,则无法成功创建。

(4).如果设置了Container的Min,那么对于该类资源而言,整个集群中的所有容器都必须设置Requests。如果创建Pod的容器时未配置该类资源的Requests,那么在创建过程中会报验证错误。Pod里容器的Requests在未配置时,可以使用默认值defaultRequest(本例中的200m CPU 和100MiB内存);如果未配置而且没有使用默认值defaultRequest,那么默认等千该容器的Limits;如果容器的Limits也未定义,就会报错。

(5).对于任意一个Pod而言,该Pod中所有容器的Requests总和都必须大于或等于6MiB,而且所有容器的Limits总和都必须小于或等于lGiB;同样,所有容器的CPURequests总和都必须大于或等于200m,而且所有容器的CPU Limits总和都必须小于或等于2 。

(6).Pod里任何容器的Limits与Requests的比例都不能超过Container的Max Limit/Requests Ratio;Pod里所有容器的Limits总和与Requests总和的比例都不能超过Pod的Max Limit/Requests Ratio。

        3.创建Pod时触发LimitRange限制

        我们来举例说明LimitRange生效时对容器的资源限制效果

        命名空间中的LimitRange只会在Pod创建或者更新时执行检查 。 如果手动修改LimitRange为一个新的值,那么这个新的值不会去检查或限制之前已经在该命名空间中创建好的Pod
        如果在创建Pod时配置的资源值(CPU或者内存)超出了LimitRange的限制,那么该创建过程会报错,在错误信息中会说明详细的错误原因。

        我们现在先创建一个pod

[root@k8s-master limit-example]#kubectl run nginx --image=nginx --replicas=l --namespace=limit-example
deployment "nginx " created

        查看已创建的pod信息

[root@k8s-master limit-example]#kubectl get pods -- namespace=limit-example
[root@k8s-master limit-example]#kubectl get pods nginx- 2040093540-sBvzu --namespace=l imi t-example -o yaml |grep resources -C 8resourceVersion : " 57 "selfLink: /api/vl/namespaces/limit-example/pods/nginx-2040093540-ivimuuid: 67b20 741 - f53b-lle5-b066 - 64510658e388
spec:containers:- image: nginximagePull Policy: Alwaysname: nginxresources:limiys:cpu: 300mmemory: 200Mirequests:cpu: 200mmemory: lOOMiterminationMessagePath: /dev/termination-logvolumeMouns:

         由于该Pod未配置资源Requests和Limits, 所以使用了namespace limit-example中的默认CPU和内存定义的Requests和Limits值

        我们在创建一个超出资源限制的Pod

[root@k8s-master limit-example]#cat invalid-pod.yaml:
apiVersion: v1
kind: Pod
metadata:name: invalid-pod
spec:containers:- name: kubernetes-serve-hostnameimage: gcr.io/google_containers/serve_hostnameresources:limits:cpu: "3 "memory: 100Mi

        创建该Pod, 可以看到系统报错,并且提供的错误原因为超过资源限制:
kubectl create -f invalid-pod.yaml --namespace=limit-example

Error from server:error when creating "invalid-pod.yaml": Pod " invalid-pod" is forbidden: [Maximum cpu usage per Pod is 2 , but limit is 3,Maximum cpu usage per Container is 2 , but limit is 3.]

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年蓝牙耳机哪个品牌最好?五大热门机型PK,新手必看!

​随着生活节奏的加快,蓝牙耳机已经成为了我们日常生活中不可或缺的伙伴。它不仅让我们的听音乐、观看视频和通话变得更加便捷,还带来了无线的自由体验。面对市场上众多的选择,我为你精挑细选了几款表现优异的蓝牙耳机,希望能帮助…

mybiats-puls-插入测试以及雪花算法

一,测试 /* * 插入测试 * */ Test public void test01() {User user new User();/** 自动帮我们生成id* */user.setName("kuku");user.setAge(3);user.setEmail("2983394967qq.com");final int insert mapper.insert(user);System.out.print…

Redis从入门到精通(十六)多级缓存(一)Caffeine、JVM进程缓存

文章目录 第6章 多级缓存6.1 什么是多级缓存?6.2 搭建测试项目6.2.1 项目介绍6.2.2 新增商品表6.2.3 编写商品相关代码6.2.4 启动服务并测试6.2.5 导入商品查询页面,配置反向代理 6.3 JVM进程缓存6.3.1 Caffeine6.3.2 实现JVM进程缓存6.3.2.1 需求分析6.…

基于springboot仿雀语的文档管理系统

项目介绍 本项目借鉴了雀语的一些UI设计,实现了文档在线管理的功能,知识库可以对不同分类的文档建立不同的库,知识库里面左边可以维护菜单菜单目录,右边实现在线预览。该项目可以防止用户下载和复制文档,只支持在线预…

TSINGSEE青犀AI智能分析网关V4吸烟/抽烟检测算法介绍及应用

抽烟检测AI算法是一种基于计算机视觉和深度学习技术的先进工具,旨在准确识别并监测个体是否抽烟。该算法通过训练大量图像数据,使模型能够识别出抽烟行为的关键特征,如烟雾、手部动作和口部形态等。 在原理上,抽烟检测AI算法主要…

Dockerfile中 CMD和ENTRYPOINT的区别

在 Dockerfile 中,CMD 和 ENTRYPOINT 都用于指定容器启动时要执行的命令。它们之间的主要区别是: - CMD 用于定义容器启动时要执行的命令和参数,它设置的值可以被 Dockerfile 中的后续指令覆盖,包括在运行容器时传递的参数。如果…

Angular 13新特性概览与升级指南

Angular 13是Angular框架的最新版本,它引入了一些新的特性和改进。下面是Angular 13的一些新特性概览和升级指南: Ivy Renderer改进:Angular 13进一步改进了Ivy渲染器,提供更好的性能和更小的包大小。这意味着你可以在应用程序中获…

如何测试PostgreSQL数据库的性能

在这篇博客里,我将展示如何测量 PostgreSQL 数据库服务器的性能,并指导你如何运行一个基准测试。 基准测试旨在评估和比较不同配置、拓扑结构、系统和组件的性能。为此,我将使用 pgbench 工具。 你可能会问,为什么要使用一个单独…

Java 语言程序设计(基础篇)原书第10版 梁勇著 PDF 文字版电子书

简介 Java 语言程序设计(基础篇)原书第 10 版 是 Java 语言的经典教材,中文版分为基础篇和进阶篇,主要介绍程序设计基础、面向对象程序设计、GUI 程序设计、数据结构和算法、高级 Java 程序设计等内容。本书通过示例讲解问题求解…

蓝桥杯嵌入式(G431)备赛——最后一晚查漏补缺

蓝桥杯嵌入式(G431)备赛笔记——初始化cubeMX 蓝桥杯嵌入式(G431)备赛笔记——LED 蓝桥杯嵌入式(G431)备赛笔记——按键模块设计 蓝桥杯嵌入式(G431)备赛笔记——LCD按键 蓝桥杯…

杂货铺 | Linux虚拟机Ubuntu操作系统下设置共享文件夹(以及找不到hgfs文件夹怎么办)

文章目录 📚步骤一:配置共享文件夹📚步骤二:配置挂载环境📚步骤三:解决权限问题📚步骤四:解决重启失效问题 📚步骤一:配置共享文件夹 建立本地共享文件夹&…

07.QT信号和槽-2

一、自定义信号和槽 在Qt中,允许⾃定义信号的发送⽅以及接收⽅,即可以⾃定义信号函数和槽函数。但是对于⾃定义的信号函数和槽函数有⼀定的书写规范。 1.基本语法 1.1 自定义信号 (1)⾃定义信号函数必须写到"signals"…

2024 DTC大会精彩演讲:DBdoctor,基于eBPF重新定义数据库可观测 (附PPT下载和演讲视频)

由中国DBA联盟(ACDU)和墨天轮社区联合主办的第十三届数据技术嘉年华(DTC)于北京盛大召开。4月13日上午海信聚好看云平台负责人张纪宽受邀在『数据库生态软件』分论坛发表主题演讲《DBdoctor:利用eBPF技术实现数据库智能…

微信小程序公共组件封装使用

1.在components目录下创建公共组件,以navbar为例 2.完成组件功能 3.调用,如果很多地方都会用到,建议放全局,如果不是则放在需要引用的文件中 3.1全局引用,在app.json做全局引用配置 3.2局部引用,在需要引入…

springcloud第4季 springcloud-alibaba之nacos篇

一 nacos 1.1 nacos作用介绍 nacos是一个分布式的配置中心和注册发现中心。 nacos是 dynamic naming configuration service nacosconfigbus 实现动态刷新;nacosconsul 1.2 各个注册中心对比 注册中心CAP模型控制台管理社区活跃度EureakaAp支持低zkcp不支持中…

初学python记录:力扣2923. 找到冠军 I

题目&#xff1a; 一场比赛中共有 n 支队伍&#xff0c;按从 0 到 n - 1 编号。 给你一个下标从 0 开始、大小为 n * n 的二维布尔矩阵 grid 。对于满足 0 < i, j < n - 1 且 i ! j 的所有 i, j &#xff1a;如果 grid[i][j] 1&#xff0c;那么 i 队比 j 队 强 &…

Docker - PostgreSQL

博文目录 文章目录 说明命令 说明 Docker Hub PostgreSQL 数据卷数据卷印射在容器内的路径postgres/var/lib/postgresql/data |容器内的路径|说明| |–|–|–| |/var/lib/postgresql/data|数据目录| 部分环境变量是否必要说明POSTGRES_PASSWORD必需设置超级用户密码POSTGRES…

什么是队头阻塞以及如何解决

前言 通常我们提到队头阻塞&#xff0c;指的可能是TCP协议中的队头阻塞&#xff0c;但是HTTP1.1中也有一个类似TCP队头阻塞的问题&#xff0c;下面各自介绍一下。 TCP队头阻塞 队头阻塞&#xff08;head-of-line blocking&#xff09;发生在一个TCP分节丢失&#xff0c;导致…

LightDB 函数/存储过程支持在任意位置使用默认值【24.1】【oracle 兼容】

LightDB 函数/存储过程支持在任意位置使用默认值 在之前的版本中&#xff0c;在 LightDB 中创建的函数或存储过程&#xff0c;每个有默认值的参数后面的参数都需要有默认值&#xff08;同c中函数, 默认值从右向左赋值&#xff09;。 在 24.1 版本中支持oracle 中的默认值用法&…

Springboot+Vue项目-基于Java+MySQL的校园管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…