k8s容器资源限制

  • 一.k8s容器资源限制
  • 二.内存限制
  • 三.cpu限制
  • 四.namespace限制
    • 1.为namespace设置资源限制
    • 2.为namespace设置资源配额
    • 3. Namespace 配置Pod配额

一.k8s容器资源限制

Kubernetes采用request和limit两种限制类型来对资源进行分配。
request(资源需求):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。
limit(资源限额):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。

资源类型:
CPU 的单位是核心数,内存的单位是字节。
一个容器申请0.5个CPU,就相当于申请1个CPU的一半,你也可以加个后缀m 表示千分之一的概念。比如说100m的CPU,100豪的CPU和0.1个CPU都是一样的。
内存单位:
K、M、G、T、P、E #通常是以1000为换算标准的。
Ki、Mi、Gi、Ti、Pi、Ei #通常是以1024为换算标准的。

二.内存限制

  • 如果容器超过其内存限制,则会被终止。如果可重新启动,则与所有其他类型的运行时故障一样,kubelet 将重新启动它。

  • 如果一个容器超过其内存请求,那么当节点内存不足时,它的 Pod 可能被逐出。

最低需求50M,最大100M,部署200M内存占用pod


[root@server1 limit]# cat mem.yml
apiVersion: v1
kind: Pod
metadata:name: memory-demo
spec:containers:- name: memory-demoimage: stressargs:- --vm- "1"- --vm-bytes- 200Mresources:requests:memory: 50Milimits:memory: 100Mi

pod状态为OOMKilled,日志显示拒绝并kill

[root@server1 limit]# kubectl  apply  -f mem.yml
pod/memory-demo created
[root@server1 limit]# kubectl  get pod
NAME          READY   STATUS      RESTARTS   AGE
memory-demo   0/1     OOMKilled   1          4s
[root@server1 limit]# kubectl  logs memory-demo
stress: FAIL: [1] (416) <-- worker 6 got signal 9
stress: WARN: [1] (418) now reaping child worker processes
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: dbug: [1] using backoff sleep of 3000us
stress: dbug: [1] --> hogvm worker 1 [6] forked
stress: FAIL: [1] (422) kill error: No such process
stress: FAIL: [1] (452) failed run completed in 0s

三.cpu限制

  • 调度失败是因为申请的CPU资源超出集群节点所能提供的资源
  • 但CPU 使用率过高,不会被杀死

cpu限制为4-10,部署使用2个cpu

[root@server1 limit]# cat cpu.yml
apiVersion: v1
kind: Pod
metadata:name: cpu-demo
spec:containers:- name: cpu-demoimage: stressresources:limits:cpu: "10"requests:cpu: "4"args:- -c- "2

pod处于pending状态,部署失败

Events:Type     Reason            Age   From               Message----     ------            ----  ----               -------Warning  FailedScheduling  16s   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.Warning  FailedScheduling  15s   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.
[root@server1 limit]# kubectl  apply  -f cpu.yml
pod/cpu-demo created
[root@server1 limit]# kubectl  get pod
NAME       READY   STATUS    RESTARTS   AGE
cpu-demo   0/1     Pending   0          10s
[root@server1 limit]# kubectl  describe  pod cpu-demo
Name:         cpu-demo
Namespace:    default
Priority:     0
Node:         <none>
Labels:       <none>
Annotations:  <none>
Status:       Pending
IP:
IPs:          <none>
Containers:cpu-demo:Image:      stressPort:       <none>Host Port:  <none>Args:-c2Limits:cpu:  10Requests:cpu:        4Environment:  <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bjc5h (ro)
Conditions:Type           StatusPodScheduled   False
Volumes:kube-api-access-bjc5h:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type     Reason            Age   From               Message----     ------            ----  ----               -------Warning  FailedScheduling  16s   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.Warning  FailedScheduling  15s   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.

四.namespace限制

1.为namespace设置资源限制

  • LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响。
apiVersion: v1
kind: LimitRange
metadata:name: limitrange-memory
spec:limits:- default:cpu: 0.5memory: 512MidefaultRequest:cpu: 0.1memory: 256Mimax:cpu: 1memory: 1Gimin:cpu: 0.1memory: 100Mitype: Container

查看资源限制

[root@server1 limit]# kubectl  apply  -f name.yml
limitrange/limitrange-memory created
[root@server1 limit]# kubectl  describe  limitranges
Name:       limitrange-memory
Namespace:  default
Type        Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---    ---  ---------------  -------------  -----------------------
Container   memory    100Mi  1Gi  256Mi            512Mi          -
Container   cpu       100m   1    100m             500m           -

2.为namespace设置资源配额

创建的ResourceQuota对象将在default名字空间中添加以下限制:
每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。

  • 所有容器的内存请求总额不得超过1 GiB。
  • 所有容器的内存限额总额不得超过2 GiB。
  • 所有容器的CPU请求总额不得超过1 CPU。
  • 所有容器的CPU限额总额不得超过2 CPU。
apiVersion: v1
kind: ResourceQuota
metadata:name: mem-cpu-demo
spec:hard:requests.cpu: "1"requests.memory: 1Gilimits.cpu: "2"limits.memory: 2Gi

先创建内存占用500M 的pod,创建成功,查看配额使用情况

[root@server1 limit]# kubectl  apply  -f mem.yml
pod/memory-demo created
[root@server1 limit]# kubectl  get pod
NAME          READY   STATUS    RESTARTS   AGE
memory-demo   1/1     Running   0          4s
myapp         1/1     Running   0          5h21m
[root@server1 limit]# kubectl  describe  resourcequotas
Name:            mem-cpu-demo
Namespace:       default
Resource         Used    Hard--------         ----    ----limits.cpu       500m    2
limits.memory    1000Mi  2Gi
requests.cpu     100m    1
requests.memory  500Mi   1Gi

再次部署内存占用600M pod,异常,显示超过限制

[root@server1 limit]# vim name.yml
[root@server1 limit]# vim mem.yml
[root@server1 limit]# kubectl  apply  -f mem.yml
Error from server (Forbidden): error when creating "mem.yml": pods "memory-demo-2" is forbidden: exceeded quota: mem-cpu-demo, requested: requests.memory=600Mi, used: requests.memory=500Mi, limited: requests.memory=1Gi

3. Namespace 配置Pod配额

设置Pod配额以限制可以在namespace中运行的Pod数量,限制pod数量为2

apiVersion: v1
kind: ResourceQuota
metadata:name: pod-demo
spec:hard:pods: "2"

查看限制

[root@server1 limit]# kubectl  describe  resourcequotas
Name:            mem-cpu-demo
Namespace:       default
Resource         Used  Hard
--------         ----  ----
limits.cpu       0     2
limits.memory    0     2Gi
requests.cpu     0     1
requests.memory  0     1GiName:       pod-demo
Namespace:  default
Resource    Used  Hard
--------    ----  ----
pods        1     2

企业项目实战k8s篇(十三)k8s容器资源限制相关推荐

  1. 【Kubernetes 企业项目实战】05、基于云原生分布式存储 Ceph 实现 K8s 数据持久化(下)

    目录 一.K8s 对接 ceph rbd 实现数据持久化 1.1 k8s 安装 ceph 1.2 创建 pod 挂载 ceph rbd 二.基于 ceph rbd 生成 pv 2.1 创建 ceph- ...

  2. 【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(上)

    目录 一.k8s 助力 DevOps 在企业落地实践 1.1 传统方式部署项目为什么发布慢,效率低? 1.2 上线一个功能,有多少时间被浪费了? 1.3 如何解决发布慢,效率低的问题呢? 1.4 什么 ...

  3. 【Kubernetes 企业项目实战】03、基于 Alertmanager 发送报警到多个接收方(下)

    目录 一.promethues 采集 tomcat 监控数据 1.1 制作 tomcat 镜像 1.2 基于上面的镜像创建一个 tomcat 实例 1.3 采集数据 二.promethues 采集 r ...

  4. 【Kubernetes 企业项目实战】07、最新一代微服务网格 Istio 入门到企业实战(下)

    目录 一.istio 核心资源解读 1.1 Gateway 总结: 1.2 VirtualService 1.2.1 VirtualService 主要由以下部分组成 1.2.2 virtualser ...

  5. 【Kubernetes 企业项目实战】09、Rancher 2.6 管理 k8s-v1.23 及以上版本高可用集群

    目录 一.Rancher 介绍 1.1Rancher简介 1.2 Rancher 和 k8s 的区别 1.3 Rancher 企业使用案例 二.安装 Rancher 2.1 初始化环境 2.2 安装 ...

  6. SpringBoot2零基础到项目实战-基础篇

    springboot2零基础到项目实战-基础篇 课程内容说明 课程单元 学习目标 基础篇 能够创建SpringBoot工程 基于SpringBoot实现ssm/ssmp整合 应用篇 能够掌握Sprin ...

  7. mxgraph进阶 三 Web绘图——mxGraph项目实战 精华篇

    Web绘图--mxGraph项目实战(精华篇) 声明 本文部分内容所属论文现已发表,请慎重对待. 需求 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连 ...

  8. mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Web绘 ...

  9. vue.js项目实战运用篇之抖音视频APP-第八节: 视频播放功能

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

  10. 基于大数据技术之电视收视率企业项目实战(hadoop+Spark)

    基于大数据技术之电视收视率企业项目实战(hadoop+Spark) 网盘地址:https://pan.baidu.com/s/1bEeSB1Y9nmjzctnbJMcBkg 密码:dohg 备用地址( ...

最新文章

  1. ASP.NET网络编程中经常用到的27个函数集
  2. 王道计算机考研 数据结构 (查找-上)
  3. 教你写出可读性高的Python代码
  4. Qt-按钮无文本显示
  5. 微软开源 TensorFlow-DirectML,为 WSL2 提供 GPU 支持
  6. mysql替换字段的部分数据
  7. 中英文对照 —— 手机 App/PC 端软件(系统)、互联网
  8. 基于MyEclipse+JSP+Mysql+Tomcat开发得塞北村镇旅游网站设计
  9. 使用pkg打包node应用
  10. 喉咙肿痛症状似流感 常州一男子延误治疗险送命
  11. jsp校园新闻管理系统
  12. 一步一步实现一款实用的Android广告栏
  13. 计算机显示屏显示超出屏幕大小,如果计算机提示显示器显示超出范围,该怎么办?...
  14. nodejs addon binding osg
  15. 【深度学习】数据扩充 (Data Augmentation)
  16. elo算法c语言,王者荣耀Elo机制?你中招了吗?
  17. 十二时辰手把手教你入门Spring
  18. 上海市行政管理学校96计算机,有编制!上海市行政管理学校招聘8人公告
  19. 伪静态与纯静态的区别是什么?
  20. 《第二行代码》—— 酷欧天气的开发

热门文章

  1. RBT三大最佳实践(基于需求的测试)
  2. 软件项目管理:项目调研
  3. Zynq-Linux移植学习笔记之52-国产ZYNQ standalone PL-PS中断调试
  4. matlab 输出 syms,科学网-Matlab中的syms与conj-孔令才的博文
  5. 站长说说之seo首页优化 原创文章不被收录怎么办
  6. CTF pwn/re手在学习过程中的零碎操作积累
  7. 四年一次的世界杯来了,看看还剩下哪些赛程呢?
  8. 王佩丰excel学习笔记(二):第三——六讲
  9. 王佩丰excel2010基础教程学习笔记(第十六讲到第二十讲)
  10. 西班牙语dele等级_西班牙语DELE考试不同等级到底是什么水平?