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) 的相关文章

  • 32位进程在64位操作系统上可以访问多少内存?

    在 Windows 上 正常情况下 32 位进程只能访问 2GB RAM 或通过 boot ini 文件中的特殊开关访问 3GB 在 64 位操作系统上运行 32 位进程时 有多少可用内存 是否有任何特殊的开关或设置可以改变这种情况 默认
  • AS3 内存泄漏示例

    有人可以发布一个 as3 代码的示例 特别是包括事件侦听器 这将是一个可能泄漏内存的简单示例 也希望您能发布所显示问题的解决方案吗 问题是 AS3 事件监听器中内存泄漏的一个简单示例是什么 如何解决它 public class MySpri
  • 编译器特定的内存初始化

    有没有办法保证整个程序中某些对象的静态对象初始化顺序 我有内存分配器 我希望将其作为程序中的第一件事进行分配 因为它们将在整个程序的其他地方使用 并且我想使用这些分配器来分配所有后续内存 我知道这可能是特定于编译器的 因为我不相信 C 标准
  • 到底什么是“位填充”或“填充位”?

    我只是在互联网上找不到任何关于 位填充 真正含义的详细解释 并且在 Stack Overflow 上也没有找到与位填充相关的线程的任何答案 我还搜索了 ISO 9899 1990 其中提到了 位填充 但没有根据我的需要进行解释 我在网上找到
  • java内存不足然后退出

    我有一个必须分析大文件的软件 限制输入或提供无限内存都不是一个选择 所以我必须忍受飞行的 OOME 因为 OOME 只杀死线程 所以我的软件运行在一些糟糕的状态 从外面看一切都很好 因为进程正在运行 但在内部却是脑死亡 我想拔掉它的插头 但
  • tcmalloc/jemalloc 和内存池之间有什么区别(以及选择的理由)?

    tcmalloc jemalloc是改进的内存分配器 还引入了内存池以更好地分配内存 那么它们之间有什么区别以及在我的应用中如何选择它们呢 这取决于您的程序的要求 如果您的程序有更多的动态内存分配 那么您 需要从可用的分配器中选择一个内存分
  • 为什么将多线程应用程序限制在一个核心上会使其运行速度更快?

    我有一个本机多线程Win32用 C 编写的应用程序 大约有 3 个相对繁忙的线程和 4 到 6 个不执行太多操作的线程 当它在正常模式下运行时 在 8 核计算机上 总 CPU 使用率总计约为 15 并且应用程序在大约 30 秒内完成 当我通
  • Java 内存错误:无法创建新的本机线程

    运行 java 服务器时 我在 UNIX 服务器上收到此错误 Exception in thread Thread 0 java lang OutOfMemoryError unable to create new native threa
  • Linux 内核中是否使用了扩展指令集(SSE、MMX)?

    好吧 它们带来 至少应该带来 性能的巨大提升 不是吗 所以 我还没有看到任何 Linux 内核源代码 但很想问 它们是否以某种方式被使用 在这种情况下 对于没有此类指令的系统 必须有一些特殊的 代码上限 SSE 和 MMX 指令集在音频 视
  • 避免内存泄漏

    所以我正在学习 C 中的 OOP 我认为编写自己的字符串类是一个很好的实践 当然是为了学习目的 我提出了一个我不知道如何解决的问题 这是一些和平的代码 class String char str public String char con
  • new 运算符(以及 malloc)无法分配约 450 MB 的内存 [重复]

    这个问题在这里已经有答案了 我正在开发一个程序 该程序在内存中存储大约 2 2 亿个短值的数组 该数据块的分配方式如下 short arrayName new short SIZE OF ARRAY 然后将文件的内容读入内存 在团队中的另一
  • SQLite 性能基准 - 为什么 :memory: 这么慢...只有磁盘速度的 1.5 倍?

    为什么 sqlite 中的 memory 这么慢 我一直在尝试查看使用内存中的 sqlite 与基于磁盘的 sqlite 是否可以获得任何性能改进 基本上我想用启动时间和内存来换取非常快速的查询not在应用程序过程中击中磁盘 然而 以下基准
  • 在“delete this;”语句期间发生了什么?

    请考虑以下代码 class foo public foo foo void done delete this private int x 以下两个选项中发生了什么 并且有效吗 选项1 void main foo a new foo a gt
  • 找出Linux上一个进程使用了​​多少内存页

    我需要找出进程分配了多少内存页 每个页面是 4096 进程内存使用情况我在查找正确值时遇到一些问题 当我查看 gome system monitor 时 内存映射下有几个值可供选择 Thanks 这样做的目的是将内存使用量除以页数并验证页大
  • JSON 解析器从大型 JSON 文件中逐条读取

    我有一个巨大的 JSON 文件 1GB 它基本上是以下格式的对象数组 x y p q x1 y1 p1 q1 我想解析这个文件 这样所有的数据都不会加载到内存中 基本上我想获取例如 数组中的前 1000 个对象进行内存处理 然后将接下来的
  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • Pandas、大数据、HDF 表以及调用函数时的内存使用情况

    简短的问题 当 Pandas 在 HDFStore 上工作时 例如 mean 或 apply 它是否将内存中的完整数据作为 DataFrame 加载 还是将逐条记录作为 Serie 进行处理 详细描述 我必须处理大型数据文件 并且我可以指定
  • 调整巨大数组的大小

    我正在我的应用程序中处理巨大的数组 需要调整它们的大小 假设您有一个 2Gb 的阵列 并且想要将其大小调整为 3Gb 有没有办法在暂时不需要 5Gb 的情况下调整它的大小 例如 给定一个 1Gb 堆 使用 Xmx1G flag public
  • php 中的 cpu_get_usage ?

    我创建了一个基准类 允许用户插入例如 timer gt checkpoint 1 检查一些代码的时间 内存消耗等 如果她 他想测试它 她 他必须在代码末尾插入 result timer gt result 这会向公共函数 result 提供
  • PhantomJS 网页内存消耗?

    是否有一种编程方式 因为我想在运行时自动执行 方式来查看网页在通过 PhantomJs 运行时使用了多少内存 我也在使用 casperjs 如果这有帮助的话 我已经搜索了很多但没有找到任何方法 PhantomJs 使用 QtWebKit 因

随机推荐

  • 聊聊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