当前位置: 首页 > news >正文

K8S篇之Pod中的资源限额

1、Pod定义requests、limits相关参数
在k8s中,全面限制一个应用及其中的pod所能占用的资源配额,具体可以使用下面三种方式:
1、定义每个pod的资源配额相关参数,如CPU/memory的request、limits;
2、自动为每个没有定义资源配额的pod添加资源配额模板(LimitRange);
3、从总量上限制一个租户(namespace)应用所能使用的资源配额(ResourceQuota)
pod的request、limits是指pod中所有容器的request、limits的总和,对于没有设置request、limits的容器,该值为0或者按照集群配置的默认值计算;
LimiteRang正是用于解决了没有设置配额参数的pod的默认资源配额问题;
REsourceQuota则约束租户的资源总量配额问题。

2、pod定义requests、limits
pod可以定义资源配额的相关参数:
spec.container[].resources.requests.cpu:容器初始要求的CPU数量
spec.container[].resources.limits.cpu:容器所能使用的最大CPU数量
spec.container[].resources.requests.memory:容器初始要求的内存数量
spec.container[].resources.limits.memory:容器所能使用的最大内存数量
默认情况下,pod中只写requests(cpu和memory写其中一个或两个都写)不写limits,则默认没有最大资源限制;
pod中只写limits.cpu、limits.memory,不写requests.cpu、requests.memory,默认的requests的cpu、memory其值等于对应的limits的cpu、memory值;
pod中只写limits的cpu或memory其中的一个,则requests对应的也等价于limits的对应的一个值。如只写limits.cpu,则requests.cpu值=limits.cpu值,limits.memory没写则requests.memory也没有值。
3、requests和limits背后的机制
如果容器运行时是docker,那么pod的requests和limits归根结底还是要转换为docker run启动容器的参数,对应如下:
spec.container[].resources.requests.cpu docker run --cpu-shares
spec.container[].resources.limits.cpu docker run --cpu-period
spec.container[].resources.requests.memory 无,请求内存只会作为调度器的参考,不会作为如何参数传递给docker run
spec.container[].resources.limits.memory docker run --memory
查看节点资源情况

// 可以查看节点的计算资源总量和已分配量
kubectl describe node master01

pod使用request、limits示例:

kubectl  create ns nginx    #创建命名空间

例如:

vim nginx-test.yaml         #创建pod,pod包含2个容器
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  namespace: nginx-test
spec:
........
    spec:
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx-test-1
        resources:                              #定义资源请求、资源限制
          requests:                             #资源请求
            memory: "20Mi"                      #内存请求
            cpu: "30m"                          #CPU请求
          limits:                               #资源限制
            memory: "50Mi"                      #内存限制
            cpu: "50m"                          #CPU限制
        ports:
        - containerPort: 80
          name: nginx
      - image: tomcat
        imagePullPolicy: IfNotPresent
        name: tomcat-test-2
        resources:                              #定义资源请求、资源限制
          requests:                             #资源请求
            memory: "10Mi"                      #内存请求
            cpu: "20m"                          #CPU请求
          limits:                               #资源限制
            memory: "40Mi"                      #内存限制
            cpu: "40m"                          #CPU限制
        ports:
        - containerPort: 8080
          name: tomcat

** 查看pod占用的资源情况**

[root@master ~]# kubectl describe node node2  | grep -C10  nginx-test-7d448999cb-mxq6s
  Namespace        Name                           CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------        ----                           ------------  ----------  ---------------  -------------  ----
  nginx-test       nginx-test-7d448999cb-mxq6s    50m (1%)      90m (2%)    30Mi (1%)        90Mi (4%)      6m31s

**注:**可以看到,我们创建的pod一共请求50m的CPU,30Mi的内存,最大CPU限制为90m,最大内存限制为90Mi

相关文章:

  • HTTPS的工作流程
  • 输入一个url后,会发生什么事?
  • Flink 基础 -- 应用开发(Table API SQL) Table API
  • npm 下载包失败解决方案
  • 内网如何使用Python第三方库包(举例JustinScorecardPy)
  • 第十三章《搞懂算法:神经网络是怎么回事》笔记
  • 基于Qt Linux开发板USER-KEY按键实现
  • uboot - 驱动开发 - dw watchdog
  • [autojs]逍遥模拟器和vscode对接
  • 通义千问, 文心一言, ChatGLM, GPT-4, Llama2, DevOps 能力评测
  • 原始html和vue中使用3dmol js展示分子模型,pdb文件
  • mysql,redis导入导出数据库数据
  • RustRover里使用AI通义灵码来写代码
  • IDEA插件开发--持久化配置信息方案
  • play() failed because the user didn‘t interact with the document first.
  • 路径加密(替换空格),剑指offer,力扣
  • 使用iperf3在macOS上进行网络性能测试
  • python flask_restful “message“: “Failed to decode JSON object: None“
  • Redis6的IO多线程分析
  • 嵌入式Linux系统中内存分配详解
  • 【社论】城市更新,始终以人为核心
  • 韶关一企业将消防安装工程肢解发包,广东住建厅:罚款逾五万
  • 一周文化讲座|“我的生命不过是温柔的疯狂”
  • 辽宁盘山县一乡镇幼儿园四名老师被指多次殴打一女童,均被行拘
  • 观察|本轮印巴冲突或促使印度空军寻求更先进战机
  • 外交部:中方对美芬太尼反制仍然有效