首页 > 其他分享 >18、Pod资源限制

18、Pod资源限制

时间:2023-03-20 09:58:28浏览次数:36  
标签:限制 18 cpu CPU 内存 test Pod pod 资源

1、基础知识

1.1、需求

Kubernetes是分布式的容器管理平台,所有资源都有Node节点提供,而Node节点上运行着很多Pod业务有
很多,在一个项目中,有的业务占用的资源比重大,有的小,想要高效的利用Node资源,必须进行资源限制,
那么Pod的资源限制应该如何处理?
Kubernetes技术已经对Pod做了相应的资源配额设置,这些资源主要体现在:CPU和内存、存储,因为存储
在k8s中有专门的资源对象来进行管控,所以我们在说到pod资源限制的时候,一半指的是 CPU和内存。

1.2、资源限制

为了方便与k8s的其他单独的资源对象区分开来,根据我们对于CPU和内存来说的应用场景特点,我们一般将其称为 计算资源。

1.2.1、CPU

CPU
 特点:是一种可压缩资源,cpu资源是支持抢占的。
   单位:CPU的资源单位是CPU(Core)的数量,是一个绝对值。
   大小:因为CPU配额对于绝大多数的容器来说,实在是太多了,所以在Kubernetes中通常以千分之一的CPU为最小单位,用m表示。
   经验:一般来说一个容器占用的CPU是100~300m,即0.1-0.3个CPU
   注意:
   mi 代表是1024进制的

1.2.2、内存

内存
   特点:是不可压缩资源,当pod资源扩展的时候,如果node上资源不够,那么就会发生资源抢占,或者OOM问题
   单位:内存的资源以字节数为单位,是一个绝对值
   大小:内存配额对于绝大多数容器来说很重要,在Kubernetes中通常以Mi为单位来分配。
   经验:因为目前内存很便宜,所以可以自由的来分配。

1.3、配额限制

1.3.1、Requests和limits介绍

Kubernetes中,对于每种资源的配额限定都需要两个参数:Resquests和Limits
申请配额(Requests):
 业务运行时最小的资源申请使用量,该参数的值必须满足,若不满足,业务运行不起来。
最大配额(Limits):
 业务运行时最大的资源允许使用量,该参数的值不能被突破,若突破,该业务的资源对象会被重启或删除
等意外操作

1.3.2、Requests和limits框架图

2、资源限制

2.1、设置默认的资源限制

2.1.1、yaml清单

cat >limit-mem-cpu-per-container.yml<<'EOF'
apiVersion: v1
kind: LimitRange
metadata:
  name: limit-mem-cpu-per-container
spec:
  limits:
  - max:
      cpu: "800m"
      memory: "1Gi"
    min:
      cpu: "100m"
      memory: "99Mi"
    default:
      cpu: "700m"
      memory: "900Mi"
    defaultRequest:
      cpu: "110m"
      memory: "111Mi"
    type: Container
EOF

2.1.2、应用并且查询limitranges

]# kubectl apply -f limit-mem-cpu-per-container.yml 
limitrange/limit-mem-cpu-per-container created

]# kubectl get limitranges NAME CREATED AT limit-mem-cpu-per-container 2023-03-19T14:25:43Z
]# kubectl describe limitranges limit-mem-cpu-per-container Name: limit-mem-cpu-per-container Namespace: default Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio ---- -------- --- --- --------------- ------------- ----------------------- Container memory 99Mi 1Gi 111Mi 900Mi - Container cpu 100m 800m 110m 700m -

2.1.3、验证默认配置是否生效

cat > pod-test-limit.yml<<'EOF'
apiVersion: v1
kind: Pod
metadata:
  name: nginx-test
spec:
  containers:
  - name: nginx
    image: 192.168.10.33:80/k8s/my_nginx:v1
    env:
    - name: HELLO
      value: "Hello kubernetes nginx"
EOF

master1 ]# kubectl apply -f pod-test-limit.yml 
pod/nginx-test created

master1 ]# kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
nginx-test   1/1     Running   0          4s

master1 ]# kubectl describe pod nginx-test 
...
    Limits:
      cpu:     700m
      memory:  900Mi
    Requests:
      cpu:     110m
      memory:  111Mi
...

2.2、压测实践

2.2.1、压测的yaml

cat >stress-test.yml<<'EOF'
apiVersion: v1
kind: Pod
metadata:
  name: stress-test
spec:
  containers:
  - name: stress
    image: 192.168.10.33:80/k8s/stress:v0.1
    imagePullPolicy: IfNotPresent
    command: ["/usr/bin/stress-ng","-m 3","-c 2","--metrics-brief"]
    resources:
      requests:
        memory: "128Mi"
        cpu: "200m"
      limits:
        memory: "256Mi"
        cpu: "500m"
EOF

# 镜像自己到docker hub下载

2.2.2、查询资源有没有超

# 查看调度到哪个节点上
master1 ]# kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
stress-test   1/1     Running   0          9m39s   10.244.3.89   node1   <none>           <none>

# 到node1节点查询容器ID
node1 ]# crictl ps 
CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD
872a1fdda3243       1ae56ccafe553       8 minutes ago       Running             stress              0                   bd05fcd9358d3       stress-test

# 使用容器ID查询内存的使用情况
node1 ]# crictl stats 872a1fdda3243
CONTAINER           CPU %               MEM                 DISK                INODES
872a1fdda3243       51.08               230.5MB             0B                  8

2.2.3、查看容器的配置情况

master1 ]# kubectl describe pod stress-test
...
    Limits:
      cpu:     500m
      memory:  256Mi
    Requests:
      cpu:        200m
      memory:     128Mi
...

2.3、内存OOM实践

2.3.1、内存OOM yml

cat >pod-oom.yml<<'EOF'
apiVersion: v1
kind: Pod
metadata:
  name: oom-test
spec:
  containers:
  - name: oom-test-ctr
    image: 192.168.10.33:80/k8s/simmemleak:v0.1
    imagePullPolicy: IfNotPresent
    resources:
      limits:
        memory: "99Mi"
        cpu: "100m"
      requests:
        memory: "99Mi"
        cpu: "100m"
EOF

2.3.2、观察OOM效果

master1 ]# kubectl apply -f pod-oom.yml && kubectl get pods -w -o wide
pod/oom-test created
NAME       READY   STATUS              RESTARTS   AGE   IP       NODE    NOMINATED NODE   READINESS GATES
oom-test   0/1     ContainerCreating   0          1s    <none>   node1   <none>           <none>
oom-test   1/1     Running             0          2s    10.244.3.91   node1   <none>           <none>
oom-test   0/1     OOMKilled           0          3s    10.244.3.91   node1   <none>           <none>
oom-test   1/1     Running             1 (2s ago)   4s    10.244.3.91   node1   <none>           <none>
oom-test   0/1     OOMKilled           1 (3s ago)   5s    10.244.3.91   node1   <none>           <none>
oom-test   0/1     CrashLoopBackOff    1 (2s ago)   6s    10.244.3.91   node1   <none>           <none>

3、服务质量等级

3.1、QoS(服务质量等级)

3.1.1、高优先级-Guaranteed

Pod内的每个容器同时设置了CPU和内存的requests和limits 而且值必须相等

3.1.2、中优先级-Burstable

pod至少有一个容器设置了cpu或内存的requests和limits,不满足 Guarantee 等级的要求。

3.1.3、低优先级-BestEffort

没有任何一个容器设置了requests或limits的属性。(最低优先级)

3.2、服务质量等级-示例

3.2.1、高优先级示例

cat >pod-qos-guaranteed.yml<<'EOF'
apiVersion: v1
kind: Pod
metadata:
  name: qos-demo
spec:
  containers:
  - name: qos-demo-ctr
    image: 192.168.10.33:80/k8s/my_nginx:v1
    resources:
      limits:
        memory: "200Mi"
        cpu: "700m"
      requests:
        memory: "200Mi"
        cpu: "700m"
EOF

----------

master1 ]# kubectl apply -f pod-qos-guaranteed.yml 
pod/qos-demo created

master1 ]# kubectl describe pod qos-demo 
...
QoS Class:                   Guaranteed
...

3.2.2、中优先级示例

cat >pod-qos-burstable.yml<<'EOF'
apiVersion: v1
kind: Pod
metadata:
  name: qos-demo
spec:
  containers:
  - name: qos-demo-ctr
    image: 192.168.10.33:80/k8s/my_nginx:v1
    resources:
      limits:
        memory: "200Mi"
        cpu: "700m"
      requests:
        memory: "100Mi"
        cpu: "200m"
EOF

----------

master1 ]# kubectl apply -f pod-qos-burstable.yml 
pod/qos-demo created

master1 ]# kubectl describe pod qos-demo 
...
QoS Class:                   Burstable
...

3.2.3、低优先级示例

cat >pod-qos-bestEffort.yml<<'EOF'
apiVersion: v1
kind: Pod
metadata:
  name: qos-demo
spec:
  containers:
  - name: qos-demo-ctr
    image: 192.168.10.33:80/k8s/my_nginx:v1
EOF

----------

master1 ]# kubectl apply -f pod-qos-bestEffort.yml 
pod/qos-demo created

master1 ]# kubectl describe pod qos-demo 
...
QoS Class:                   BestEffort
...

 

标签:限制,18,cpu,CPU,内存,test,Pod,pod,资源
From: https://www.cnblogs.com/ygbh/p/17234335.html

相关文章

  • 【2023-03-18】同事聚会
    20:00会有新的花儿,新的绿叶会有其他温柔的日子。                                     ......
  • CF1804C 题解
    题目链接今天好不容易有空更那就再更一篇(一道很有意思的诈骗题,我会写出我的思考过程。题意:(我的翻译)一个转盘有$n$个格子分别为$0$$1$$2$$\cdots$$n-1$,初始时在......
  • CF1801G A task for substrings
    题面传送门卡常的出题人什么时候似啊?如果\(l=1,r=|t|\),那么就是蠢得不能再蠢的问题:直接扔到AC自动机上跑匹配就好了,可以做到\(O(\sum|s|+|t|)\)。现在询问的变成了......
  • # day18 打卡513.找树左下角的值 112. 路径总和 113.路径总和ii 106.从中序与后序遍
    day18打卡513.找树左下角的值112.路径总和113.路径总和ii106.从中序与后序遍历序列构造二叉树105.从前序与中序遍历序列构造二叉树513.找树左下角的值513题目链接......
  • 17、Pod探测机制
    1、基础知识1.1、简介根据我们对Docker的学习,我们知道,以镜像打包技术为基础的容器技术环境,它运行起来的效果就类似于一个"黑盒",默认情况下我们不知道里面是一种什么......
  • DaVinci_Resolve_Studio_18.1.1达芬奇图文安装教程及下载
       ​ DaVinciResolve最大的特点是,将剪辑、调色、视觉特效、动态图形和音频后期制作融于一身,它采用美观新颖的界面设计,易学易用,能让新手用户快速上手操作,还能提供专......
  • SPSS 18 中文破解版安装包下载及图文安装教程​
    SPSS是一款由IBM公司精心打造的专业统计分析软件,它能提供统计分析、数据挖掘、预测建模产品及解决方案,并提供高级统计分析、丰富的机器学习算法、文本分析、开源扩展性、与......
  • Origin 2018【科学数据分析】中文破解版安装包下载及图文安装教程​
    Origin是由OriginLab公司全新开发的一款科学绘图、数据分析软件,能够为用户提供多样的数据统计、数据处理、数据报告等功能,是全球商业行业、学术界和政府实验室超过50万科......
  • CAXA工艺图表 2018 中文破解版安装包下载及图文安装教程​
    CAXA工艺图表打造了全新的工艺编制软件平台,具有多文档、多环境的特点,使用户在编制工艺文档、或绘制工装图纸时更加流畅、自如,而且依据中国机械设计的国家标准和使用习惯,提供......
  • P1618 三连击(升级版)
    这题稍微有点难度(for新手)点击跳转>>P1618三连击(升级版)-洛谷|计算机科学教育新生态(luogu.com.cn)上题解:#include<bits/stdc++.h>usingnamespacestd;inta[10......