kubernetes资源对象之limitrange

limitrange简述

当定义 pod时可以选择性地为每个 container设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存(RAM)大小;此外还有其他类型的资源。当你为 Pod 中的 Container 指定了资源 请求 时,kube-scheduler就利用该信息决定将 Pod 调度到哪个节点上。 当你还为 Container 指定了资源 约束时,kubelet 就可以确保运行的容器不会使用超出所设约束的资源。 kubelet 还会为容器预留所 请求数量的系统资源,供其使用。

kubernetes中的资源单位

CPU 资源单位

CPU 资源的约束和请求以 “cpu” 为单位。 在 Kubernetes 中,一个 CPU 等于1 个物理 CPU 核或者 一个虚拟核, 取决于节点是一台物理主机还是运行在某物理主机上的虚拟机。也可以表达带小数 CPU 的请求。 当定义一个容器,将其 spec.containers.resources.requests.cpu 设置为 0.5 时, 你所请求的 CPU 是你请求 1.0 CPU 时的一半。 对于 CPU 资源单位,数量表达式 0.1 等价于表达式 100m,可以看作 “100 millicpu”。

CPU 资源总是设置为资源的绝对数量而非相对数量值。 例如,无论容器运行在单核、双核或者 48-核的机器上,500m CPU 表示的是大约相同的计算能力。

Kubernetes 不允许设置精度小于 1m 的 CPU 资源。 因此,当 CPU 单位小于 11000m 时,使用毫核的形式是有用的; 例如 5m 而不是 0.005

内存资源单位

memory 的约束和请求以字节为单位。你可以使用普通的证书,或者带有以下数量后缀 的定点数字来表示内存:E、P、T、G、M、k。 你也可以使用对应的 2 的幂数:Ei、Pi、Ti、Gi、Mi、Ki。 例如,以下表达式所代表的是大致相同的值:

128974848、129e6、129M、128974848000m、123Mi

请注意后缀的大小写。如果你请求 400m 内存,实际上请求的是 0.4 字节。 如果有人这样设定资源请求或限制,可能他的实际想法是申请 400 兆字节(400Mi) 或者 400M 字节。

limitrange资源清单解析

apiVersion: v1
kind: LimitRange
metadata:
  name: limitrange
  namespace: test
spec:
  limits:
  - type: Container       #限制的资源类型
    max:
      cpu: "2"            #限制单个容器的最大CPU
      memory: "2Gi"       #限制单个容器的最大内存
    min:
      cpu: "500m"         #限制单个容器的最小CPU
      memory: "512Mi"     #限制单个容器的最小内存
    default:
      cpu: "500m"         #默认单个容器的CPU限制
      memory: "512Mi"     #默认单个容器的内存限制
    defaultRequest:
      cpu: "500m"         #默认单个容器的CPU创建请求
      memory: "512Mi"     #默认单个容器的内存创建请求
    maxLimitRequestRatio:
      cpu: 2              #限制CPU limit/request比值最大为2  
      memory: 2           #限制内存limit/request比值最大为1.5
      
      
  - type: Pod
    max:
      cpu: "4"            #限制单个Pod的最大CPU
      memory: "4Gi"       #限制单个Pod最大内存
      
      
  - type: PersistentVolumeClaim
    max:
      storage: 50Gi        #限制PVC最大的requests.storage
    min:
      storage: 30Gi        #限制PVC最小的requests.storage

创建limitrange

[root@master test]# kubectl describe -n test limitrange
Name:                  limitrange
Namespace:             test
Type                   Resource  Min    Max   Default Request  Default Limit  Max Limit/Request Ratio
----                   --------  ---    ---   ---------------  -------------  -----------------------
Container              cpu       500m   2     500m             500m           2
Container              memory    512Mi  2Gi   512Mi            512Mi          2
Pod                    cpu       -      4     -                -              -
Pod                    memory    -      4Gi   -                -              -
PersistentVolumeClaim  storage   30Gi   50Gi  -                -              -

在test空间命令下创建一个pod并查看,发现使用设置默认的limit属性值

    resources:
      limits:
        cpu: 500m
        memory: 512Mi
      requests:
        cpu: 500m
        memory: 512Mi

Pod 和 容器的资源请求和约束

针对每个容器,都可以指定其资源约束和请求,包括如下选项:

  • spec.containers.resources.limits.cpu
  • spec.containers.resources.limits.memory
  • spec.containers.resources.limits.hugepages-
  • spec.containers.resources.requests.cpu
  • spec.containers.resources.requests.memory
  • spec.containers.resources.requests.hugepages-

尽管只能逐个容器地指定请求和限制值,考虑 Pod 的总体资源请求和约束也是有用的。 对特定资源而言,Pod 的资源请求/约束值是 Pod 中各容器对该类型资源的请求/约束值的总和。

apiVersion: v1
kind: Pod
metadata:
  name: test1
spec:
  containers:
  - name: app
    image: images.my-company.example/app:v4
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: log-aggregator
    image: images.my-company.example/log-aggregator:v6
    resources:
      requests:
        memory: "100Mi"
        cpu: "300m"
      limits:
        memory: "128Mi"
        cpu: "500m"

查看pod详情

Containers:
  app:
    Container ID:   
    Image:          images.my-company.example/app:v4
    Limits:
      cpu:     500m
      memory:  128Mi
    Requests:
      cpu:        250m
      memory:     64Mi
  log-aggregator:
    Container ID:   
    Image:          images.my-company.example/log-aggregator:v6
    Limits:
      cpu:     500m
      memory:  128Mi
    Requests:
      cpu:        300m
      memory:     100Mi
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐