k8s(十)— 资源限制(cpu、memory)

2023-05-16

1. k8s容器资源限制简介

在这里插入图片描述

2. k8s容器资源限制实施

2.1 内存限制示例

[root@server1 ~]# docker search  stress   搜索测试镜像stress
NAME                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
progrium/stress                                                           42                                      [OK]
[root@server1 ~]# docker pull progrium/stress  拉取镜像
[root@server1 ~]# docker tag  progrium/stress:latest reg.westos.org/library/stress:latest   改标签
[root@server1 ~]# docker push reg.westos.org/library/stress:latest  上传镜像到仓库
[root@server2 ~]# mkdir limit
[root@server2 ~]# cd limit/
[root@server2 limit]# vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: stress   ##这个镜像可以直接模拟资源的使用
    args:  
    - --vm
    - "1"     开启1个worker
    - --vm-bytes
    - 200M            ##使用200M
    resources:
      requests:
        memory: 50Mi
      limits:
        memory: 100Mi   ##限制100M
[root@server2 limit]# kubectl apply -f pod.yaml    创建
pod/memory-demo created
[root@server2 limit]# kubectl get pod  创建pod失败,限制100mi,需要200mi,如果容器超过其内存限制,则会被终止。
NAME          READY   STATUS      RESTARTS   AGE
memory-demo   0/1     OOMKilled   0          4s

2.2 cpu限制示例

apiVersion: v1
kind: Pod
metadata:
  name: cpu-demo
spec:
  containers:
  - name: cpu-demo
    image: stress
    resources:
      limits:
        cpu: "10"
      requests:
        cpu: "5"    要求cpu最低5个,但是最低不可能达到5个只有2个cpu
    args:
    - -c
    - "2"
[root@server2 limit]# kubectl apply -f cpu.yaml   创建
pod/cpu-demo created
[root@server2 limit]# kubectl get pod   查看pod,pod一直处于等待状态
NAME       READY   STATUS    RESTARTS   AGE
cpu-demo   0/1     Pending   0          113s
[root@server2 limit]# kubectl delete -f cpu.yaml    回收
pod "cpu-demo" deleted
[root@server2 limit]# vim cpu.yaml 
 apiVersion: v1
kind: Pod
metadata:
  name: cpu-demo
spec:
  containers:
  - name: cpu-demo
    image: stress
    resources:
      limits:
        cpu: "2"    设置最大2个
      requests:
        cpu: "1"   最小1个
    args:
    - -c
    - "2"
[root@server2 limit]# kubectl apply -f cpu.yaml 
pod/cpu-demo created
[root@server2 limit]# kubectl get pod  查看pod,符合要求,运行成功
NAME       READY   STATUS    RESTARTS   AGE
cpu-demo   1/1     Running   0          12s

2.3为namespace设置资源限制

apiVersion: v1
kind: LimitRange          限制namespace的内存使用
metadata:
  name: limitrange-demo
spec:
  limits:
  - default:               namespace为default
      cpu: 0.5         defaulet的最大cpu为0.5个
      memory: 512Mi   
    defaultRequest:
      cpu: 0.1       defaulet的最小cpu为0.1个
      memory: 256Mi
    max:                表示在创建pod时最多不能超过1个cpu
      cpu: 1
      memory: 1Gi    内存不超过1G
    min:
      cpu: 0.1   表示在创建pod时最多不能超过0.1个cpu
      memory: 100Mi
    type: Container   
[root@server2 limit]# kubectl apply -f ns.yaml   创建
limitrange/limitrange-demo created
[root@server2 limit]# kubectl describe limitranges    查看namespace资源限制详细信息
Name:       limitrange-demo
Namespace:  default
Type        Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---    ---  ---------------  -------------  -----------------------
Container   cpu       100m   1    100m             500m           -
Container   memory    100Mi  1Gi  256Mi            512Mi      

 [root@server2 limit]# vim pod.yaml  重新编辑pod文件   -
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: nginx           用nginx镜像
   # resources:              去掉pod资源限制
   #   requests:
   #     memory: 50Mi
   #   limits:
   #     memory: 100Mi     
[root@server2 limit]# kubectl apply -f pod.yaml   创建
pod/memory-demo created
[root@server2 limit]# kubectl describe pod memory-demo   查看memory-demo pod详细信息

在这里插入图片描述

测试:
[root@server2 limit]# kubectl describe limitranges    查看namespace资源限制详细信息
Name:       limitrange-demo
Namespace:  default
Type        Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---    ---  ---------------  -------------  -----------------------
Container   cpu       100m   1    100m             500m           -
Container   memory    100Mi  1Gi  256Mi            512Mi      

[root@server2 limit]# vim pod.yaml  自定义设置pod资源限制
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: nginx   
    resources:              设置资源限制
      requests:
        memory: 50Mi         内存要求最小是100Mi,这里只有50Mi,不符合默认default里设置的pod资源限制要求
      limits:
        memory: 100Mi    
[root@server2 limit]# kubectl apply -f pod.yaml   创建失败,不符合资源限制要求
Error from server (Forbidden): error when creating "pod.yaml": pods "memory-demo" is forbidden: minimum memory usage per Container is 100Mi, but request is 50Mi
[root@server2 limit]# vim pod.yaml  
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: nginx
    resources:
      requests:
        memory: 100Mi     cpu 和memory 符合资源限制要求
        cpu: 0.1
      limits:
        memory: 200Mi
        cpu: 0.5
[root@server2 limit]# kubectl apply -f pod.yaml  创建成功
pod/memory-demo created
注:默认的namespace(default)设置了pod资源限制,自己创建的pod无论加不加资源限制都会被默认的default限制

2.4 为 Namespace 配置Pod资源配额

[root@server2 limit]# kubectl delete -f pod.yaml   回收之前的pod
pod "memory-demo" deleted
[root@server2 limit]# vim quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
[root@server2 limit]# kubectl apply -f quota.yaml  创建
resourcequota/mem-cpu-demo created
[root@server2 limit]# kubectl describe quota   查看配额详细信息
Name:            mem-cpu-demo
Namespace:       default
Resource         Used  Hard
--------         ----  ----
limits.cpu       0     2
limits.memory    0     2Gi
requests.cpu     0     1
requests.memory  0     1Gi
[root@server2 limit]# kubectl apply  -f pod.yaml   创建pod
pod/memory-demo created
[root@server2 limit]# kubectl get pod   查看pod,运行成功
NAME          READY   STATUS    RESTARTS   AGE
memory-demo   1/1     Running   0          48s
[root@server2 limit]# kubectl describe quota   查看配额详细信息
Name:            mem-cpu-demo
Namespace:       default
Resource         Used   Hard
--------         ----   ----
limits.cpu       500m   2
limits.memory    200Mi  2Gi
requests.cpu     100m   1
requests.memory  100Mi  1Gi
配额表示当前namespace(default)创建的所有容器资源总和不能超过设定的配额
[root@server2 limit]# kubectl run demo --image=nginx  运行一个容器,不加任何资源限制,就是设置的默认的default中pod资源限制
pod/demo created
[root@server2 limit]# kubectl describe quota  查看配额
Name:            mem-cpu-demo
Namespace:       default
Resource         Used   Hard
--------         ----   ----
limits.cpu       1      2
limits.memory    712Mi  2Gi      可以发现资源是不断叠加的
requests.cpu     200m   1
requests.memory  356Mi  1Gi    

一但设置配额必须启用资源限制,示例如下:

[root@server2 limit]# kubectl delete -f pod.yaml      将pod都回收
pod "memory-demo" deleted
[root@server2 limit]# kubectl delete pod demo 
pod "demo" deleted
[root@server2 limit]# kubectl delete -f ns.yaml   再回收namespace默认资源限额
limitrange "limitrange-demo" deleted
[root@server2 limit]# kubectl run demo --image=nginx   运行容器不能运行,所以一但创建配额必须要设置资源限制
Error from server (Forbidden): pods "demo" is forbidden: failed quota: mem-cpu-demo: must specify limits.cpu,limits.memory,requests.cpu,requests.memory

2.5 为 Namespace 配置Pod数量配额

[root@server2 limit]# vim quota.yaml 
apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-demo
spec:
  hard: 
    pods: "2"   只能运行2个pod
[root@server2 limit]# kubectl apply -f ns.yaml   设置配额需要先加上资源限额
limitrange/limitrange-demo created
[root@server2 limit]# kubectl apply -f quota.yaml   创建配额
resourcequota/mem-cpu-demo unchanged
resourcequota/pod-demo created
[root@server2 limit]# kubectl get quota
NAME           AGE     REQUEST                                     LIMIT
mem-cpu-demo   34m     requests.cpu: 0/1, requests.memory: 0/1Gi   limits.cpu: 0/2, limits.memory: 0/2Gi
pod-demo       3m13s   pods: 0/2     配额已经添加成功
[root@server2 limit]# kubectl run demo --image=nginx  运行pod
pod/demo created
[root@server2 limit]# kubectl run demo2 --image=nginx    再开一个pod。可以运行
pod/demo2 created
[root@server2 limit]# kubectl run demo3 --image=nginx  在开第3个,不能运行
Error from server (Forbidden): pods "demo3" is forbidden: exceeded quota: pod-demo, requested: pods=1, used: pods=2, limited: pods=2
[root@server2 limit]# kubectl delete pod --all   删除所有pod
pod "demo" deleted
pod "demo2" deleted
[root@server2 limit]# kubectl delete -f quota.yaml   回收资源
resourcequota "mem-cpu-demo" deleted
resourcequota "pod-demo" deleted
[root@server2 limit]# kubectl delete -f ns.yaml     回收资源
limitrange "limitrange-demo" deleted

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s(十)— 资源限制(cpu、memory) 的相关文章

  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • .NET EXE 内存占用

    即使是一个简单的Notepad http en wikipedia org wiki Notepad 28software 29C 中的应用程序消耗兆字节的 RAM 如任务管理器中所示 最小化应用程序时 任务管理器中的内存大小会显着下降 并
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • IBOutlet、实例变量和属性:最佳实践

    今天 我对有关声明 IBOutlet 和实例变量 管理它们 使用正确的访问器以及正确释放它们的最佳实践进行了各种研究 我已经差不多了 但我有一些小问题 我希望有人能够就最佳实践提出建议 我会将它们格式化为代码并注释问题 以便更容易理解 我排
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • PHP - 调整 PNG 图像大小时出现内存错误

    我有一个脚本可以根据上传的图像创建缩略图 它对 jpg 工作正常 但给我一个错误 致命错误 允许的内存大小 67108864 字节已耗尽 尝试分配 26250000 字节 当我上传 png 图像时 脚本是 create thumbnail
  • 如何在 Java 中将帧速率限制为 60 fps?

    我正在编写一个简单的游戏 我希望将帧速率限制在 60 fps 而不会让循环占用我的 CPU 我该怎么做 您可以阅读游戏循环文章 https dewitters com dewitters gameloop 在尝试实现任何内容之前 首先了解游
  • 一个地址有多少字节? [复制]

    这个问题在这里已经有答案了 在64位机器上 我们知道一个地址是8个字节 然而 我并不完全清楚一个地址中有多少字节的信息 虚拟内存中的每个字节都有一个地址吗 或者内存中的每 64 位都有一个地址 还是取决于架构 如果这取决于架构 那么我应该如
  • 字符串与 char[]

    我有一些来自 IBM 的幻灯片 名为 从 Java 代码到 Java 堆 了解应用程序的内存使用情况 http www ibm com developerworks library j codetoheap N101DC 也就是说 当我们使
  • Java 中内存高效的稀疏数组

    关于时间高效的稀疏数组存在一些问题 但我正在寻找内存效率 我需要相当于List
  • 如何计算汇编中的内存位移?

    我一直在研究 yasm 汇编语言 并生成了一个包含以下内容的列表文件 我需要帮助理解第一列中的内存位移是如何计算的 提前致谢 1 line 1 1 memory asm 2 section data 3 00000000 04000000
  • 估计 libGD 操作所需的内存

    在尝试使用 libGD 在 PHP 中调整图像大小之前 我想检查是否有足够的内存可用于执行该操作 因为 内存不足 会完全终止 PHP 进程并且无法捕获 我的想法是 原始图像和新图像中的每个像素 RGBA 需要 4 字节内存 check av
  • C++ 类的互斥成员导致编译错误

    我不确定为什么当我向 myClass 添加互斥体成员时会发生这种情况 在本例中为 mu Error C2661 std tuple lt void thiscall MyNameSpace myClass void MyNameSpace
  • 指针的 Fortran 副本

    我有一个包含指针 p 的 var 类型 我需要将 var 复制到与 var 类型相同的另一个变量 var1 上 通过执行 var1 var 在引号中 因为我不知道这是否是正确的方法 请参见下文 在我的实现中 var 和 var1 被传递给一
  • Windows 上 PE 文件 (exe) 的最小文件大小是多少?以及最小内存分配? [复制]

    这个问题在这里已经有答案了 Windows 上 PE 文件 exe 的最小文件大小是多少 以及最小内存分配 我 使用 VS 10 附带的 MASM ml exe 和 link exe 组装了以下代码 我不能忽略 kernel32 lib 和
  • 在 python 中 pickling 数据时出现内存错误

    我正在尝试使用 python 中提供的 dump 命令将字典转储为 pickle 格式 字典的文件大小约为 150 mb 但仅转储 115 mb 的文件时会出现异常 例外情况是 Traceback most recent call last
  • 用eclipse测试java程序的内存消耗[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 聊聊VSCode中Snippet插件的使用(提高编程效率)

    本文介绍的是 VSCode Snippet 插件 xff0c 一种代码片段配置插件 xff0c 可以节省你写样板代码的时间 你可能之前学习过 VSCode Snippet 插件 xff0c 知道它的作用也学习了配置的语法 xff0c 但是你
  • 软件测试 | 普罗米修斯- 初识PromQL

    理解监控数据 之前讲过普罗米修斯自己就是一个时序数据库 xff0c 它从 exporter 拉取的数据都会按时间戳保存到对应的文件里 xff0c 这个时序数据库默认会保存 14 天的数据 而它自己也开发了一套名为 PromQL 的类 SQL
  • 【整理分享】30个让开发效率倍增的实用VSCode 插件

    本篇文章给大家总结分享30个让开发效率倍增的实用VSCode 插件 xff0c 让你的日常开发工作效率倍增 xff0c 希望对大家有所帮助 xff01 1 Image preview 通过此插件 xff0c 当鼠标悬浮在图片的链接上时 xf
  • 10个提高开发效率的Vue3常用插件(快来收藏)

    本篇文章给大家总结分享几个好用的 Vue 插件 xff0c 可以帮助开发者提高开发效率 解决移动端各种滚动场景需求 xff0c 希望对大家有所帮助 xff01 1 vue multiselect next Vue js 的通用选择 多选 标
  • 手把手带你使用Vue实现一个图片水平瀑布流插件

    如何使用Vue实现一个图片水平瀑布流插件 xff1f 这里给大家分享我在网上总结出来的一些知识 xff0c 希望对大家有所帮助 一 需求来源 今天碰到了一个需求 xff0c 需要在页面里 xff0c 用水平瀑布流的方式 xff0c 将一些图
  • vscode插件分享: 6个Vue3开发必备插件

    本篇文章给大家整理分享 6 个 Vue3 开发必备的 VSCode 插件 xff0c 可以直接用过 VSCode 的插件中心直接安装使用 xff0c 希望对大家有所帮助 xff01 1 Volar 下载数 153 万 43 相信使用 VSC
  • 11个裸VSCode必备插件,助你打造一个前端开发IDE

    VSCode 轻量 开源 xff0c 新鲜下载的 VSCode 可谓是身无长物 一穷二白 xff0c 连个项目管理的功能都没有 身轻如燕的 VSCode 对于后端开发说可能有点幼稚 xff0c 但对于前端来说刚刚好 xff0c 毕竟不需要搞
  • Ubuntu unzip 安装

    ubuntu unzip 安装以及命令参数说明 安装命令 xff1a sudo apt get install unzip 解压 zip文件命令 xff1a unzip unzip命令能够将被winzip压缩的文件解压 unzip命令的执行
  • 新建git仓库管理项目并更新代码提交git

    新建git仓库 第一步 xff1a 登录上自己的git后台 xff0c 在我的工作台的左下角 xff0c 点击仓库旁边的 43 号 xff0c 创建一个新的仓库 xff1a 第二步 xff1a 在新建仓库界面完善仓库的信息 xff0c 这里
  • CMake是什么?有什么用

    CMake CMake是一个跨平台的编译 Build 工具 可以用简单的语句来描述所有平台的编译过程 CMake能够输出各种各样的makefile或者project文件 xff0c 能测试编译器所支持的C 43 43 特性 类似UNIX下的
  • PX4系统学习

    PX4系统学习 扑翼飞行器的硬件组成飞控板电调电调的分类 舵机 扑翼飞行器的硬件组成 要了解学会二次开发首先要知道 xff0c 手头的飞行器的硬件结构 以及各个部分的结构是有何种作用的 xff0c 这样才能在根本上了解编程逻辑 xff0c
  • rostopic echo --noarr查看激光雷达数据详细信息(如frame_id)

    用rostopic echo 激光雷达话题名查看激光雷达返回的数据 xff0c 除了数字什么也显示不出来 想要查看激光雷达数据的frame id等信息 xff0c 加上 noarr参数即可 xff0c 排除话题数据中的数组信息 如图二所示
  • Django基本数据访问

    当需要操作数据时 xff0c 不再需要通过SQL语句 xff0c Django自动为这些模型提供了高级的Python API 接下来联系数据库表的操作 xff0c 运行manage py提供的shell语句 guest gt python3
  • SVO2.0 安装编译

    SVO2 OPEN https github com uzh rpg rpg svo pro open git挂梯子 https blog csdn net qq 33349365 article details 101514412 如果各
  • k8s(一)—pod管理、资源清单编写

    1 pod管理 k8s官方文档 root 64 server2 kubectl run nginx image 61 nginx 运行一个容器 xff0c 镜像为nginx pod nginx created root 64 server2
  • k8s(三)—控制器(replicaset、deployment、daemonset、job、cronjob)

    1 控制器简介 2 Replicaset控制器 root 64 server2 vim rs yaml apiVersion apps v1 kind ReplicaSet metadata name replicaset example
  • k8s(四)—service服务(暴露方式:ClusterIP、NodePort、LoadBalancer、ExternalName、ingress)

    1 service简介 2 开启kube proxy的ipvs root 64 server2 kubectl n kube system get pod grep proxy 每个节点都有haproxy kube proxy d6cp2
  • k8s(五)—容器间的网络通信

    1 同一节点不同pod之间的通信原理 root 64 server2 kubectl get pod o wide 查看pod 的ip NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NOD
  • k8s(七)—statefullset部署mysql主从集群

    1 使用statefullset部署mysql主从集群 mysql 0是master mysql 1和mysql 2是两个备份 当mysql写的时候 xff0c 找headless service中的mysql 0 mysql xff1b
  • k8s(十)— 资源限制(cpu、memory)

    1 k8s容器资源限制简介 2 k8s容器资源限制实施 2 1 内存限制示例 root 64 server1 docker search stress 搜索测试镜像stress NAME DESCRIPTION STARS OFFICIAL