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. C#和F#默认接口方法更新
  2. 70.ER模型转化成关系模型是在数据库设计的第几个阶段?
  3. linux性能分析资源推荐(重要)
  4. C#中MySQL语句带参数的模糊匹配问题
  5. 用Dreamweaver实现ASP动态网站建设【8】
  6. 新工科背景下大数据专业导论课程的改革与探索
  7. odis工程师一键导入导出匹配数据信息功能_机械重复做了这么久,才发现竟然可以批量用户导入导出...
  8. 这个超逼真的虚拟小姐姐,可能是腾讯游戏未来的样子
  9. XcodeGhost漏洞
  10. 一篇文章学会er图绘制
  11. my97日期范围限制
  12. 联想产品标准保修承诺
  13. 凡事都要追求公平?还真不一定!
  14. 网易2017年春招笔试题记录
  15. 针对腾讯云服务器 外网不能访问的问题
  16. bp神经网络原理 实现过程,BP神经网络的实现包括
  17. python time localtime()
  18. 初三英语关于计算机的作文,2019年中考英语作文范文三篇
  19. 《数据库原理》实验报告DB4——视图与索引
  20. 基于java的家庭理财系统_基于jsp的家庭理财系统-JavaEE实现家庭理财系统 - java项目源码...

热门文章

  1. 女网姑娘……结婚好哇!
  2. 阿里四面经验总结,月薪36K定级P6(含面试题答案)
  3. 01219 oracle,oracle for win移机ORA-01219问题解决方法详解
  4. 工作那些事(十四)项目经理和项目成员
  5. 【标准全文】GB_17675-2021_汽车转向系_基本要求
  6. WLAN无线局域网IEEE802.11协议一
  7. 几种搜索引擎算法研究
  8. IPV6公网ip的获取,搞定
  9. win10系统如何找回删除文件?教你五种恢复方法
  10. Browser-sync安装与使用