详解Kubernetes中的资源限制原理

本文详细介绍了Kubernetes如何设置和传递资源限制,从yaml配置到Docker容器再到Linux Cgroups。通过实例展示了如何创建限制CPU核数的Pod,并深入探讨了资源限制的传递过程,揭示了Kubernetes、Docker与Cgroups之间的关系。最终总结了Kubernetes依赖Docker和Cgroups实现资源限制的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Kubernetes对资源的限制

在Kubernetes中,对资源(CPU、内存等)的限制,需要定义在yaml中,以Deployment举例:

apiVersion: v1
kind: Pod
metadata:
  name: cpu-overload
  namespace: test
spec:
  containers:
  - name: cpu-overload
    image: stress/stress:latest
    resources:
      limits:
        cpu: "2"
        memory: 1000Mi
      requests:
        cpu: "1"
        memory: 500Mi
    command: ["stress"]
    args: ["-c", "2"]

其中,CPU 有2个限制:

  • requests:相对限制,是容器的最低申请资源,这个限制是相对的,无法做到绝对严格。
  • limits:绝对限制,这个是限制的绝对的,不可能超越。

本例中,对容器cpu-overload的 CPU 的限制,是,申请1个核的运算资源,最多可以使用2个核。

这里需要特别说明一点,所谓的最多2个核,其实是均摊的,如果这个容器真的触发了计算瓶颈,在docker中看,CPU使用率是200%,但在宿主机去看,其实并非是将2个核占满了,而是将压力分摊到了多个CPU的核上。

对Kubernetes来说,只能做到限制容器资源,无法对pod资源做限制,Kubernetes官方认为,要计算一个pod的资源限制,将pod中各个容器的资源做加和就行了。

2 资源限制的传递

Kubernetes其实可以认为是一系列组件包装起来的一个大型工具。关于资源限制,其实Kubernetes自己做不了这些,而是将对资源限制,通过yaml中的定义,传递到Docker容器中。比如,之前我们在Deployment中容器的CPU,限制为最多使用2个核,这个限制,Kubernetes会传递给Docker来做,所以本质上,Kubernetes资源的限制能力,来源于Docker,而Docker能做到什么程度的限制,又取决于Linux的cgroups,所以在很早之前的Docker是不支持在Windows平台运行的,归根结底,还是因为cgroups是Linux内核支持的产物。

说了这么多,我们可以通过一个实例来说明这个传递性。在开始前,简单说一下步骤:

  • 1、在Kubernetes中启动一个单独的pod,资源限制为最多4个CPU核。
  • 2、找到这个pod对应的容器,看一下容器的运行配置,是 不是限制了4个核。
  • 3、找到这个容器对应的Cgroups配置,看是否对容器限制了4个核。3、实验

2.1 创建一个限制了1个核的pod

apiVersion: v1
kind: Pod
metadata:
  labels:
    system: centos7
  name: centos7
  namespace: test
spec:
  containers:
  - image: centos:7
    imagePullPolicy: IfNotPresent
    name: centos7
    command: [ "/bin/bash", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]
    ports:
    - containerPort: 30008
      hostPort: 30008
      name: http
      protocol: TCP
    resources:
      limits:
        cpu: "1"
        memory: 2000Mi
      requests:
        cpu: "0.1"
        memory: 100Mi
  hostNetwork: true
  restartPolicy: Always

在这个ya

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值