K8S资源限制之resources

1 资源限制介绍

K8S设计资源限制的原因主要是为了确保集群的稳定运行、防止资源争用和过载,同时提高应用程序的可靠性和性能。资源限制通过Cgroups等机制控制Pod使用节点资源(CPU、内存、存储)。

假设1个节点上有多个pod,其中一个pod使用了所有的资源,那么肯定会影响到到其他pod的运行。

2 resources介绍

resources作用:

  • resources 用于定义容器的计算资源请求和限制。这些资源包括 CPU 和内存。即保证pod有足够的资源使用,但又不会超出限制。

  • 如果没有配置资源限制,pod就会使用宿主机的全部资源。配置了显示的话,pod资源请求超过限制会被K8S杀死或重新调度

关于请求和限制的详细解释

请求(Requests):

  • 请求是容器启动时需要的最低资源量,K8S 会根据请求来调度容器到合适的节点。如果节点上没有足够的资源,容器就无法调度到该节点。那么pod就会处于pending状态。
  • 请求用于确保容器始终有足够的资源可以使用。

限制(Limits):

  • 限制是容器能够使用的最大资源量。如果容器超过限制,K8S 会采取措施限制容器使用的资源(如 CPU 限制时会降低容器的 CPU 使用,内存限制时如果容器超过内存限制则可能会被 OOM Killer(Out Of Memory Killer)杀死)。可以限制防止容器无限制地使用资源,避免影响其他容器和节点上的负载。
  • 资源换算单位
    • cpu:1core = 1000m
    • memary:0.5Mi = 500MB内存

3 resources配置案例

01 request不满足无法完成调度

1.创建1个pod,宿主机是2核,4GB内存。肯定是不满足资源期望的

cat > 04-资源限制之-resources.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:name: stress-resources
spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/wzy01-aliyun/apps:v3name: stressstdin: true# 配置容器的资源限制resources:# 定义资源期望,没有足够资源的话不会调度成功requests:cpu: 16memory: 16G# 配置资源的使用上限limits:cpu: 20memory: 20G
EOF

2.运行后查看事件:kubectl describe pods stress-resources

提示污点存在和内存、CPU不足

Warning FailedScheduling 52s (x3 over 3m16s) default-scheduler 0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn’t tolerate, 2 Insufficient cpu, 2 Insufficient memory.

02 使用超过限制会杀掉进程

stress 是一个用于对 Linux 系统进行压力测试的工具。它可以对 CPU、内存、磁盘 I/O 和网络带宽等各种系统资源进行测试,使用stress模拟性能开销。

1.运行以下配置

cat > cat 01-compute-resources.yaml <<EOF
apiVersion: v1
kind: pod
metadata:name: stress-resources
spec:containers:- image: harbor.zhiyong18.com/zhiyong18-troubleshooting/stress:v0.1name: stressstdin: true# 配置容器的资源限制resources:# 定义资源期望,没有足够资源的话不会调度成功requests:cpu: 200mmemory: 300Mi# 配置资源的使用上限limits:cpu: 0.5memory: 500Mi
EOF

2.查看未压测时的性能指标

[root@worker233~]# docker ps -l
CONTAINER ID   IMAGE                                                   COMMAND     CREATED          STATUS          PORTS     NAMES
07fa36e3d76c   harbor.zhiyong18.com/zhiyong18-troubleshooting/stress   "/bin/sh"   13 seconds ago   Up 12 seconds             k8s_stress_stress-resources_default_6225323f-c599-4f2d-9648-f161dcceafd0_0[root@worker233~]# docker stats 07fa36e3d76c
CONTAINER ID   NAME                                                                         CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS
07fa36e3d76c   k8s_stress_stress-resources_default_6225323f-c599-4f2d-9648-f161dcceafd0_0   0.00%     232KiB / 500MiB     0.05%     0B / 0B   0B / 0B     1[root@worker233~]# docker exec -it 07fa36e3d76c sh
/usr/local/stress # free -htotal        used        free      shared  buff/cache   available
Mem:           3.8G      571.7M        2.4G        2.6M      806.5M        3.0G
Swap:             0           0           0
/usr/local/stress # 

3.进入pod进行压测。当pod内存资源使用超过限制时,stress进程被杀死。

/usr/local/stress # stress --cpu 8 --io 4 --vm 200 --vm-bytes 256M --timeout 1000s
stress: info: [16] dispatching hogs: 8 cpu, 4 io, 200 vm, 0 hdd
stress: FAIL: [16] (415) <-- worker 228 got signal 9
stress: WARN: [16] (417) now reaping child worker processes
stress: FAIL: [16] (451) failed run completed in 14s
/usr/local/stress # 

: WARN: [16] (417) now reaping child worker processes
stress: FAIL: [16] (451) failed run completed in 14s
/usr/local/stress #


![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/758a29b469c64a4094a7cae32334e261.png#pic_center)

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

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

相关文章

Django5 2024全栈开发指南(三):数据库模型与ORM操作

目录 一、模型的定义二、数据迁移三、数据表关系四、数据表操作4.1 Shell工具4.2 数据新增4.3 数据修改4.4 数据删除4.5 数据查询4.6 多表查询4.7 执行SQL语句4.8 数据库事务 Django 对各种数据库提供了很好的支持&#xff0c;包括 PostgreSQL、MySQL、SQLite 和 Oracle&#x…

【MySQL】阶段性总结

一、客户端和数据库操作 1.登录 mysql -uroot -p 2.查看数据库版本 show version(); 3.查看现有数据库 show databases: 4.创建数据库 create [if not exists] database 数据库名 character set 字符编码集 collate 排序规则; 5.选择数据库 use 数据库名&#xff1b; 6.查看当…

Java通过calcite实时读取kafka中的数据

引入maven依赖 <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-kafka</artifactId> <version>1.28.0</version> </dependency> 测试代码 import java.sql.Connection; import java.sql.DriverMan…

RDIFramework.NET CS敏捷开发框架 V6.1发布(.NET6+、Framework双引擎、全网唯一)

RDIFramework.NET C/S敏捷开发框架V6.1版本迎来重大更新与调整&#xff0c;全面重新设计业务逻辑代码&#xff0c;代码量减少一半以上&#xff0c;开发更加高效。全系统引入全新字体图标&#xff0c;整个界面焕然一新。底层引入最易上手的ORM框架SqlSugar&#xff0c;让开发更加…

SQL(四) 游标实验、存储过程、函数实验

1.将视图实验中score表中的数据通过以下命令复制到新建的表score_copy中&#xff0c;然后通过带有游标的存储过程对成绩按下面的规则进行更新&#xff1a;80~100&#xff0c;更改为5&#xff1b;60~80&#xff0c;更改为3&#xff1b;低于60分更新为0。 Create table score_co…

TypeORM在Node.js中的高级应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 引言 TypeORM 基本概念 1. 实体&am…

11.15组会汇报

概述 不经意传输协议,也叫茫然传输协议,是一种保护隐私的两方通信协议,消息发送者持有两条待发送的消息,接收者选择一条进行接收,事后发送者对接收者获取哪一条消息毫不知情,接收者对于未选择的消息也无法获取任何信息。即1-out-of-2 OT。在OT协议中,发送方拥有全部的数据权限,…

通过华为鲲鹏认证发行上市的集成平台产品推荐

华为鲲鹏认证是技术实力与品质的权威象征&#xff0c;代表着产品达到了高标准的要求。从技术层面看&#xff0c;认证确保产品与华为鲲鹏架构深度融合&#xff0c;能充分释放鲲鹏芯片的高性能、低功耗优势&#xff0c;为集成平台的高效运行提供强大动力。在安全方面&#xff0c;…

基于ARM+FPGA的电力通信管理机IEC61850规约通信机的实现

本章通过对比传统的通信管理机方案对需要支持多RS485端口的不足之处&#xff0c; 以及在进行海量数据处理时的性能瓶颈&#xff0c;本文使用Intel全新的Cyclone V SoC FPGA芯片&#xff0c;充分发挥FPGA的高速并行运算特性以及现场可配置优势&#xff0c;并且结合 ARM处理器的…

ASP.NET Core Webapi 返回数据的三种方式

ASP.NET Core为Web API控制器方法返回类型提供了如下几个选择&#xff1a; Specific type IActionResult ActionResult<T> 1. 返回指定类型&#xff08;Specific type&#xff09; 最简单的API会返回原生的或者复杂的数据类型&#xff08;比如&#xff0c;string 或者…

ROS机器视觉入门:从基础到人脸识别与目标检测

前言 从本文开始&#xff0c;我们将开始学习ROS机器视觉处理&#xff0c;刚开始先学习一部分外围的知识&#xff0c;为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本&#xff0c;系统采用Ubuntu20.04&#xff0c;ROS采用noetic。 颜…

Bufferevent and evbuffer

每个bufferevent都有一个输入缓冲区和一个输出缓冲区&#xff0c;它们的类型都是“struct evbuffer”。有数据要写入到bufferevent时&#xff0c;添加数据到输出缓冲区&#xff1b;bufferevent中有数据供读取的时候&#xff0c;从输入缓冲区抽取&#xff08;drain&#xff09;数…

DQN代码详解

代码链接见文末 1. 任务描述 任务目标: 在 MountainCar-v0 环境中,智能体的目标是尽可能快地将一辆小车从山谷的一端(起始位置)驾驶到山谷的另一端(目标位置),通过学习如何利用环境中的动力学来实现目标。智能体只能施加力量(加速)来推动小车,且受到物理规律的限制…

pip/conda install bugs汇总

DNSResolutionError 一直不行&#xff0c;惯防火墙还是不行&#xff0c;可能导致漏洞了&#xff1b; 解决方案&#xff1a; reboot下次try可以刷新DNS缓存: resolvectl flush-cachespip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host‘mirrors.a…

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

Django启用国际化支持(2)—实现界面内切换语言:activate()

文章目录 ⭐注意⭐1. 配置项目全局设置&#xff1a;启用国际化2. 编写视图函数3. 配置路由4. 界面演示5、扩展自动识别并切换到当前语言设置语言并保存到Session设置语言并保存到 Cookie ⭐注意⭐ 以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能&am…

软件工程-需求分析与设计-更新中-1.0版

前言: 感觉书本上和线上课程, 讲的太抽象, 不好理解, 但软件开发不就是为了开发应用程序吗?! 干嘛搞这么抽象,对吧, 下面是个人对于软件开发的看法, 结合我的一些看法, 主打简单易懂, 当然,我一IT界小菜鸟, 对软件开发的认识也很浅显, 这个思维导图也仅仅是现阶段我的看…

Springboot之登录模块探索(含Token,验证码,网络安全等知识)

简介 登录模块很简单&#xff0c;前端发送账号密码的表单&#xff0c;后端接收验证后即可~ 淦&#xff01;可是我想多了&#xff0c;于是有了以下几个问题&#xff08;里面还包含网络安全问题&#xff09;&#xff1a; 1.登录时的验证码 2.自动登录的实现 3.怎么维护前后端…

Vue3 虚拟列表组件库 virtual-list-vue3 的使用

Vue3 虚拟列表组件库 virtual-list-vue3 的基本使用 分享个人写的一个基于 Vue3 的虚拟列表组件库&#xff0c;欢迎各位来进行使用与给予一些更好的建议&#x1f60a; 概述&#xff1a;该组件组件库用于提供虚拟化列表能力的组件&#xff0c;用于解决展示大量数据渲染时首屏渲…

http常⻅请求头和响应头详细讲解(笔记)

http常⻅请求头状态码 简介&#xff1a;讲解http常⻅见的请求⽅方法和使⽤用 http1.0定义了了三种&#xff1a;GET: 向服务器器获取资源&#xff0c;⽐比如常⻅见的查询请求POST: 向服务器器提交数据⽽而发送的请求Head: 和get类似&#xff0c;返回的响应中没有具体的内容&am…