• kubernetes资源调度之LimitRange


    系列目录

    LimitRange从字面意义上来看就是对范围进行限制,实际上是对cpu和内存资源使用范围的限制

    前面我们讲到过资源配额,资源配额是对整个名称空间的资源的总限制,是从整体上来限制的,而LimitRange则是对pod和container级别来做限制的

    由于LimitRange是基于名称空间的,因此为了测试,我们先创建一个名称空间

    kubectl create namespace default-mem-example
    

    创建LimitRange和Pod对象

    以下配置文件声明了内存的默认限制量和默认请求量

    admin/resource/memory-defaults.yaml 
    
    apiVersion: v1
    kind: LimitRange
    metadata:
      name: mem-limit-range
    spec:
      limits:
      - default:
          memory: 512Mi
        defaultRequest:
          memory: 256Mi
        type: Container
    
    

    在default-mem-example名称空间下创建它

    kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults.yaml --namespace=default-mem-example
    

    现在,如果有在容器在default-mem-example名称空间下创建,并且在创建的时候没有指定内存申请值和内存限制值,则它会被默认分配256M的内存请求和512M的内存上限

    下面是一个包含容器的pod的配置.容器没有显式声明资源申请和内存限制

    admin/resource/memory-defaults-pod.yaml 
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: default-mem-demo
    spec:
      containers:
      - name: default-mem-demo-ctr
        image: nginx
    
    

    下面创建这个pod

    kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod.yaml --namespace=default-mem-example
    

    查看这个pod的详细信息

    kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
    
    containers:
    - image: nginx
      imagePullPolicy: Always
      name: default-mem-demo-ctr
      resources:
        limits:
          memory: 512Mi
        requests:
          memory: 256Mi
    

    以上输出信息显示pod的容器包含了一个256M的内存申请和一个512M的内存限制.它们是LimitRange里声明的默认值

    仅指定限制,没指定申请

    下面是一个pod的其中一个容器的声明文件,它声明了内存限制,但是没有内存申请

    apiVersion: v1
    kind: Pod
    metadata:
      name: default-mem-demo-2
    spec:
      containers:
      - name: default-mem-demo-2-ctr
        image: nginx
        resources:
          limits:
            memory: "1Gi"
    

    创建它

    kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod-2.yaml --namespace=default-mem-example
    

    查看信息

    kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
    
    resources:
      limits:
        memory: 1Gi
      requests:
        memory: 1Gi
    

    可以看到容器的内存申请值和限制值是一样的.需要注意它并不是LimitRange里的默认值256M

    仅声明了申请,没有声明限制

    下面是一个包含一个容器的pod声明,容器只申请了资源,没有限制

    apiVersion: v1
    kind: Pod
    metadata:
      name: default-mem-demo-3
    spec:
      containers:
      - name: default-mem-demo-3-ctr
        image: nginx
        resources:
          requests:
            memory: "128Mi"
    

    创建pod

    kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod-3.yaml --namespace=default-mem-example
    

    查看信息

    kubectl get pod default-mem-demo-3 --output=yaml --namespace=default-mem-example
    
    resources:
      limits:
        memory: 512Mi
      requests:
        memory: 128Mi
    

    输出信息显示容器的申请值被设置为声明的值.而限制值被设置成了512M,这是LimitRange的默认设置

    设置申请和限制值的动机

    如果一个名称空间包含有资源限额,那么设置申请和限制默认值往往也是有帮助的.以下是资源配额对命名空间施加的两个限制

    • 在命名空间运行的每一个容器必须有它自己的内存限额(CPU限额)。

    • 在命名空间中所有的容器使用的内存总量(CPU总量)不能超出指定的限额。

    完整示例

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: mem-limit-range
      namespace: example
    spec:
      limits:
      - default:  # default limit
          memory: 512Mi
          cpu: 2
        defaultRequest:  # default request
          memory: 256Mi
          cpu: 0.5
        max:  # max limit
          memory: 800Mi
          cpu: 3
        min:  # min request
          memory: 100Mi
          cpu: 0.3
        maxLimitRequestRatio:  # max value for limit / request
          memory: 2
          cpu: 2
        type: Container # limit type, support: Container / Pod / PersistentVolumeClaim
    
    • default为默认值,即pod不设置的时候的默认值.

    • defaultRequest 默认请求

    • max 请求上限

    • min请求下限

    注意默认请求值即为创建pod的时候不指定resource申请时默认赋予的值,默认值即为默认限制的上限.即不指定的时候默认赋予的值.min和max是可以指定的最大值和最小值.并且需要注意的是以上都是Pod级别的.

    -maxLimitRequestRatio顾名思义,是一个比率值,它是限制值和请求值的比率.由于资源调度都是基于申请的值,因此可能会出现资源超售情况(当然,可以使用配额来限制总的量),这个比率显示了超售的比率.

  • 相关阅读:
    ADC和RTC的寄存器的读取
    串口中断
    chengdongyue的笔记
    UART速度的问题
    tags
    strtok
    exports、module.exports和export、export default到底是咋回事
    module.exports与exports,export与export default之间的关系和区别
    Vue2.x中的Render函数
    Vue的入门之安装
  • 原文地址:https://www.cnblogs.com/tylerzhou/p/11041963.html
Copyright © 2020-2023  润新知