Kubernetes 对Pod的资源限制详解;

这篇具有很好参考价值的文章主要介绍了Kubernetes 对Pod的资源限制详解;。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、K8s对Pod资源配置详解

limits限制容器最高使用多少资源:

  • resources.limits.cpu
  • resources.limits.memory

request是容器使用的最小资源申请,也就是说这个容器里的服务至少给它多少资源才能运行,作为容器调度时资源分配的依据:(对于k8s来说是预留,主要用作于k8s对node资源的一个规划和分配)
requests一般小于limits限制的20%-30%

  • resources.requests.cpu
  • resources.requests.memory

CPU单位:可以写m也可以写浮点数,例如0.5核=500m,1核=1000m,2核=2000m;

m毫核,cpu单位;Kubernetes 集群中的每一个节点可以通过操作系统的命令来确认本节点的 CPU 内核数量,然后将这个数量乘以1000,得到的就是节点总 CPU 总毫数。比如一个节点有四核,那么该节点的 CPU 总毫量为 4000m,如果你要使用0.5 core,则你要求的是 4000*0.5 = 2000m。

内存单位:1 MiB = 1024 KiB,内存这块在 Kubernetes 里一般用的是Mi单位,当然你也可以使用Ki、Gi甚至Pi,看具体的业务需求和资源容量;

这里注意的是MiB ≠ MB,MB 是十进制单位,MiB 是二进制,平时我们以为 MB 等于 1024KB,其实1MB=1000KB,1MiB才等于1024KiB。中间带字母 i 的是国际电工协会(IEC)定的,走1024乘积;KB、MB、GB是国际单位制,走1000乘积。

二、K8s对Pod资源配置的限制

资源配置的限制:

  • limits建议不能超出宿主机的配置,否则没意义了,至少要低于宿主机配置的20%;
  • requests的值必须小于或等于limits的限制;
  • k8s会根据requests的值去查找能满足该值的node进行调度,如果不满足,pod将处于未分配状态;
  • requests值不能设置太大,因为requests决定了一个节点能分配的pod数量;所以不要设置太大,否则会造成node资源浪费,即跑的pod少,实际负载很低;
  • kubectl describe node/k8s-node1查看节点资源分配情况;

三、K8s对Pod资源配置的实战

1.例如:限制一个容器只能使用2核cpu和2G内存,方法如下

apiVersion: v1
kind: Pod
metadata:
  name: "pod-limits"
  namespace: default
  labels:
    app: "pod4"
spec:
  containers:
  - name: pod4
    image: "nginx:latest"
    ##资源配置##
    resources:
      #限制容器最高使用多少资源
      limits:
        cpu: 2
        memory: 2Gi
      #容器使用的最小资源(也是调度时的依据)
      requests:
        cpu: 0.6
        memory: 614Mi

2.然后运行pod,查看下pod的详细信息看资源配置是否生效

[root@k8s-master ~]# kubectl describe pod/pod-limits
...
    Limits:
      cpu:     2
      memory:  2Gi
    Requests:
      cpu:        600m
      memory:     614Mi
...

3.创建完成功这个pod后,我们可以看到这个pod被分配到了node1上

[root@k8s-master ~]# kubectl get pod -o wide 
NAME          READY   STATUS    RESTARTS   AGE   IP              NODE        NOMINATED NODE   READINESS GATES
pod-limits    1/1     Running   0          11d   10.244.36.108   k8s-node1   <none>           <none>

4.然后到node1上去查看这个pod里面启动的容器的资源限制

[root@k8s-node1 ~]# docker ps | grep limits
#主容器
6933185dbe4b   nginx                                                                   "/docker-entrypoint.…"   2 minutes ago        Up 2 minutes                  k8s_pod4_pod-limits_default_b8919bf5-a355-4f13-acbc-a5b291e31a6f_0
#Infra容器
f2723187db48   registry.aliyuncs.com/google_containers/pause:3.2                       "/pause"                 2 minutes ago        Up 2 minutes                  k8s_POD_pod-limits_default_b8919bf5-a355-4f13-acbc-a5b291e31a6f_0

5.我们去看下主容器的信息

[root@k8s-node1 ~]# docker inspect aa659bf24d9c
...
            "CpuShares": 614,
            "Memory": 2147483648,
            "NanoCpus": 0,
            "CgroupParent": "kubepods-burstable-podb8919bf5_a355_4f13_acbc_a5b291e31a6f.slice",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 100000,
            "CpuQuota": 200000,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 2147483648,
            "MemorySwappiness": null,
            "OomKillDisable": false,
...

6.实际上我们就可以看到这个容器的一些资源情况,Pod 上的资源配置最终也还是通过底层的容器运行时去控制 CGroup 来实现的,我们可以进入如下目录查看 CGroup 的配置,该目录就是 CGroup 父级目录,而 CGroup 是通过文件系统来进行资源限制的,所以我们上面限制容器的资源就可以在该目录下面反映出来:

##查看CPU的限制##
[root@k8s-node1 ~]# docker exec -it 6933185dbe4b /bin/bash
root@pod-limits:/# cd /sys/fs/cgroup/cpu/
root@pod-limits:/sys/fs/cgroup/cpu# cat cpu.cfs_period_us 
100000
root@pod-limits:/sys/fs/cgroup/cpu# cat cpu.cfs_quota_us  
200000
#反向计算出--cpus参数
#cpu.cfs_quota_us / cpu.cfs_period_us = cpu的限制
root@pod-limits:/sys/fs/cgroup/cpu# expr `cat cpu.cfs_quota_us` / `cat cpu.cfs_period_us`
2

cpu.cfs_period_us和cpu.cfs_quota_us来限制该组中的所有进程在单位时间里可以使用的cpu时间。
cpu.cfs_period_us:时间周期(微秒);
cpu.cfs_quota_us:指的是在cpu.cfs_period_us周期内可使用的cpu的时间(微秒);
多核场景下,如配置cpu.cfs_period_us=10000,而cfs_quota_us=20000,表示该cgroup可以完全使用2个cpu。
所以cpu的计算方法为:cfs_quota_us / cpu.cfs_period_us

##查看内存的限制##
[root@k8s-node1 ~]# docker exec -it 6933185dbe4b /bin/bash
root@pod-limits:~# cd /sys/fs/cgroup/memory/
root@pod-limits:/sys/fs/cgroup/memory# cat memory.limit_in_bytes 
2147483648 (Byte字节)

内存的计算方法为:2147483648÷1024÷1024÷1024 = 2(G)

四、查看Pod资源限制已使用资源

主要查看node允许分配资源汇总配置里面的Requests值,它代表的是已分配出的资源;

[root@k8s-master goodgood-study]# kubectl describe nodes/k8s-node1
...
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
                     #已分配出的资源(例如下cpu已使用81%)     
  Resource           Requests          Limits
  --------           --------          ------
  cpu                3250m (81%)       6 (150%)
  memory             4460300800 (26%)  9Gi (58%)
  ephemeral-storage  0 (0%)            0 (0%)
  hugepages-1Gi      0 (0%)            0 (0%)
  hugepages-2Mi      0 (0%)            0 (0%)
Events:              <none>

总结

注:文章来源地址https://www.toymoban.com/news/detail-726142.html

  • CPU 资源是可压缩资源,也就是容器达到了这个设定的上限后,容器性能会下降,但是不会终止或退出。
  • 内存是不可压缩性资源,如果容器使用内存资源到达了上限,那么会OOM,造成内存溢出,容器就会终止和退出。
  • 一个node节点默认最多运行110个Pod,可通过修改kubelet的maxPods参数进行修改。

到了这里,关于Kubernetes 对Pod的资源限制详解;的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(k8s):Pod 的 Node Selector详解

    💖The Begin💖点点关注,收藏不迷路💖 Node Selector是Kubernetes中一个用于指定Pod部署位置的重要概念。通过Node Selector,用户可以将Pod调度到具有特定标签的节点上。 这种标签通常用于区分节点的硬件配置、地理位置、网络特性等。通过合理地设置Node Selector,用户可以优化应用

    2024年04月08日
    浏览(87)
  • Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务

    目录 Pod 参考文档:Pod | Kubernetes Pod配置文件:simple-pod.yaml 对master进行如下操作 Pod的状态有: 参考文档:(70条消息) Pod生命周期中的状态解释_pod状态_闹玩儿扣眼珠子的博客-CSDN博客 进入Pod内的nginx容器: 当我们创建一个Pod,其中的步骤是什么?(启动Pob的流程) 大概步骤:

    2024年02月13日
    浏览(71)
  • K8S学习指南(10)-k8s中为pod分配CPU和内存资源

    Kubernetes(简称K8s)是一种开源的容器编排平台,广泛用于构建、部署和管理容器化应用。在Kubernetes中,Pod是最小的可部署单元,而资源分配是确保Pod正常运行的关键因素之一。本文将深入探讨如何在Kubernetes中为Pod分配CPU和内存资源,并提供详细的示例。 在容器化环境中,多

    2024年02月04日
    浏览(57)
  • K8s(Kubernetes)学习(三):pod概念及相关操作

    摘取官网: https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/#working-with-pods 1.1 简介 Pod 是可以在 Kubernetes 中 创建和管理的、最小的可部署的计算单元 。 Pod (就像在鲸鱼荚或者豌豆荚中) 是一组(一个或多个)容器 ; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 P

    2024年02月13日
    浏览(94)
  • Kubernetes 对Pod的资源限制详解;

    limits 限制容器最高使用多少资源: resources.limits.cpu resources.limits.memory request 是容器使用的最小资源申请,也就是说这个容器里的服务至少给它多少资源才能运行,作为容器调度时资源分配的依据:(对于k8s来说是预留,主要用作于k8s对node资源的一个规划和分配) requests一般小于

    2024年02月07日
    浏览(47)
  • K8s(一)Pod资源——Pod介绍、创建Pod、Pod简单资源配额

    目录 Pod概述 pod网络 pod存储 pod和容器对比 创建pod的方式 pod运行方式分类 Pod的创建 Pod的创建过程 通过kubectl run来创建pod 通过yaml文件创建,yaml文件简单写法 Pod简单操作 Pod的标签labels Pod的资源配额resource 测试 Kubernetes Pod | Kubernetes Pod是Kubernetes中的最小调度单元,k8s都是以p

    2024年01月18日
    浏览(61)
  • k8s资源配额限制

    为什么会有资源配额管理? 资源配额管理维度解释? 资源配额参数有什么? 计算CPU CPU的Requests和Limits是通过CPU数(cpus)来度量的。 CPU的资源值是绝对值,而不是相对值,比如0.1CPU在单核或多核机器上是一样的,都严格等于0.1 CPU core。 计算Memory 内存的Requests和Limits计量单位

    2024年02月13日
    浏览(52)
  • k8s进阶3——资源配额、资源限制

    为什么会有资源配额管理? 可以提高集群稳定性,确保指定的资源对象在任何时候都不会超量占用系统物理资源,避免业务进程在设计或实现上的缺陷导致整个系统运行紊乱甚至意外宕机。 资源配额管理维度: 容器级别,定义每个Pod上资源配额相关的参数,比如CPU/Memory、

    2024年02月10日
    浏览(33)
  • 【Kubernetes】K8s 查看 Pod 的状态

    NAME :Pod 的名称。 READY :代表 Pod 里面有几个容器,前面是启动的,后面是总数, 1 / 1 1/1 1/1 。 STATUS :就是当前 Pod 状态,最常见的就是 Running 正在运行,最期望的状态,只要不是 Running 的就说明有问题,就算是 Running 的就不一定没有问题。 状态 说明 Pending 挂起 在执行创建

    2024年01月15日
    浏览(96)
  • k8s资源对象(1) namespace&&pod

    Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的

    2024年01月18日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包