资讯专栏INFORMATION COLUMN

K8S如何限制资源使用

Rindia / 2863人阅读

摘要:本文介绍几种在中限制资源使用的几种方法。其位置在举例方法二在中限定方法一虽然很好,但是其不是强制性的,因此很容易出现因忘记设定,导致资源使用过度的情形,因此我们需要一种全局性的资源限制设定,以防止这种情况发生。

本文介绍几种在K8S中限制资源使用的几种方法。

资源类型

在K8S中可以对两类资源进行限制:cpu和内存。

CPU的单位有:

正实数,代表分配几颗CPU,可以是小数点,比如0.5代表0.5颗CPU,意思是一颗CPU的一半时间。2代表两颗CPU。

正整数m,也代表1000m=1,所以500m等价于0.5

内存的单位:

正整数,直接的数字代表Byte

kKKi,Kilobyte

mMMi,Megabyte

gGGi,Gigabyte

tTTi,Terabyte

pPPi,Petabyte

方法一:在Pod Container Spec中设定资源限制

在K8S中,对于资源的设定是落在Pod里的Container上的,主要有两类,limits控制上限,requests控制下限。其位置在:

spec.containers[].resources.limits.cpu

spec.containers[].resources.limits.memory

spec.containers[].resources.requests.cpu

spec.containers[].resources.requests.memory

举例:

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: ...
    image: ...
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
方法二:在Namespace中限定

方法一虽然很好,但是其不是强制性的,因此很容易出现因忘记设定limits/request,导致Host资源使用过度的情形,因此我们需要一种全局性的资源限制设定,以防止这种情况发生。K8S通过在Namespace设定LimitRange来达成这一目的。

配置默认request/limit

如果配置里默认的request/limit,那么当Pod Spec没有设定request/limit的时候,会使用这个配置,有效避免无限使用资源的情况。

配置位置在:

spec.limits[].default.cpu,default limit

spec.limits[].default.memory,同上

spec.limits[].defaultRequest.cpu,default request

spec.limits[].defaultRequest.memory,同上

例子:

apiVersion: v1
kind: LimitRange
metadata:
  name: 
spec:
  limits:
  - default:
      memory: 512Mi
      cpu: 1
    defaultRequest:
      memory: 256Mi
      cpu: 0.5
    type: Container
配置request/limit的约束

我们还可以在K8S里对request/limit进行以下限定:

某资源的request必须>=某值

某资源的limit必须<=某值

这样的话就能有效避免Pod Spec中乱设limit导致资源耗尽的情况,或者乱设request导致Pod无法得到足够资源的情况。

配置位置在:

spec.limits[].max.cpulimit必须<=某值

spec.limits[].max.memory,同上

spec.limits[].min.cpurequest必须>=某值

spec.limits[].min.memory,同上

例子:

apiVersion: v1
kind: LimitRange
metadata:
  name: 
spec:
  limits:
  - max:
      memory: 1Gi
      cpu: 800m
    min:
      memory: 500Mi
      cpu: 200m
    type: Container
参考资料

Managing Compute Resources for Containers

Configure Default Memory Requests and Limits for a Namespace

Configure Default CPU Requests and Limits for a Namespace

Configure Minimum and Maximum Memory Constraints for a Namespace

Configure Minimum and Maximum CPU Constraints for a Namespace

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32732.html

相关文章

  • K8S如何限制资源使用

    摘要:本文介绍几种在中限制资源使用的几种方法。其位置在举例方法二在中限定方法一虽然很好,但是其不是强制性的,因此很容易出现因忘记设定,导致资源使用过度的情形,因此我们需要一种全局性的资源限制设定,以防止这种情况发生。 本文介绍几种在K8S中限制资源使用的几种方法。 资源类型 在K8S中可以对两类资源进行限制:cpu和内存。 CPU的单位有: 正实数,代表分配几颗CPU,可以是小数点,比如...

    sumory 评论0 收藏0
  • Kubernetes之路 2 - 利用LXCFS提升容器资源可见性

    摘要:简介社区中常见的做法是利用来提供容器中的资源可见性。从而使得应用获得正确的资源约束设定。阿里云服务全球首批通过一致性认证,简化了集群生命周期管理,内置了与阿里云产品集成,也将进一步简化的开发者体验,帮助用户关注云端应用价值创新。 摘要: 这是本系列的第2篇内容,将介绍在Docker和Kubernetes环境中解决遗留应用无法识别容器资源限制的问题。 showImg(https://se...

    graf 评论0 收藏0
  • Kubernetes资源分配(limit/request)

    摘要:为了实现资源被有效调度和分配时同时提高资源的利用率,采用和两种限制类型对资源进行分配。限制类型介绍容器使用的最小资源需求作为容器调度时资源分配的判断依赖。 概述 kubernetes 是一个集群管理平台, kubernetes需要统计整体平台的资源使用情况, 合理的将资源分配给容器使用, 并保证容器生命周期内有足够的资源来保证其运行. 同时, 如果资源发放是独占的, 对于空闲的容器来说...

    dack 评论0 收藏0
  • Kubernetes资源分配(limit/request)

    摘要:为了实现资源被有效调度和分配时同时提高资源的利用率,采用和两种限制类型对资源进行分配。限制类型介绍容器使用的最小资源需求作为容器调度时资源分配的判断依赖。 概述 kubernetes 是一个集群管理平台, kubernetes需要统计整体平台的资源使用情况, 合理的将资源分配给容器使用, 并保证容器生命周期内有足够的资源来保证其运行. 同时, 如果资源发放是独占的, 对于空闲的容器来说...

    plokmju88 评论0 收藏0
  • kube-dns的前世今生

    摘要:通过监视资源的变化,并根据的信息生成记录写入到中。是唯一保留的容器,依然提供健康检查。操作会获取最新的全量资源与本地状态进行比较来产生通知,可以避免网络原因导致的丢失通知的情况。最后一个参数用来设置处理事件的回调。 上一期我们以1.2版本为背景,介绍了K8S的服务发现和kube-dns插件的相关内容。有了上一期内容作为基础,这期了解最新版本的kube-dns就会容易很多。 本文主要对比...

    Lin_R 评论0 收藏0

发表评论

0条评论

Rindia

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<