• kubernetes集群之资源配额(Resource Quotas)


    一.简单介绍

    资源配额(Resource Quotas)是用来限制用户资源用量的一种机制。 它的工作原理为:
    资源配额应用在Namespace上,并且每个Namespace最多只能有一个ResourceQuota对象
    开启计算资源配额后,创建容器时必须配置计算资源请求或限制(也可以LimitRange设置默认值)
    用户超额后禁止创建新的资源

    二.资源配额的启用

    首先,在API Server启动时配置ResourceQuota adminssion control,然后在namespace中创建ResourceQuota对象即可。

    三.资源配额的类型

    • 计算资源,包括cpu和memory
      • cpu,limits.cpu,requests.cpu
      • memory,limits.memory,requests.memory
    • 存储资源,包括存储资源的总量以及制定的storage class的总量
      • requests.storage:存储资源总量,如500Gi
      • persistentvolumeclaims:pvc的个数
      • .storageclass.storage.k8s.io/requests.storage
      • .storageclass.storage.k8s.io/persistentvolumeclaims
    • 对象数,即可创建的对象的个数
      • pods, replicationcontrollers, configmaps, secrets
      • resourcequotas, persistentvolumeclaims
      • services, services.loadbalancers, services.nodeports

    四.LimitRange

    默认情况下,kubernetes中所有容器都没有任何cpu和内存限制。limitRange用来给Namespace增加一个资源限制,包括最小、最大和默认资源。比如:

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: mylimits
    spec:
      limits:
      - max:
          cpu: "2"
          memory: 1Gi
        min:
          cpu: 200m
          memory: 6Mi
        type: Pod
      - default:
          cpu: 300m
          memory: 200Mi
        defaultRequest:
          cpu: 200m
          memory: 100Mi
        max:
          cpu: "2"
          memory: 1Gi
        min:
          cpu: 100m
          memory: 3Mi
        type: Container
    

    五.kubernetes Resource QoS Classes 介绍

    对于每一种Resource都可以将容器分为三种Qos Classes: Guaranteed,Burstable,Best-Effort,它们的QoS级别依次递减。

    5.1 Guaranteed

    如果pod中所有Container的所有Resource的limit和request相等都不为0,则这个Pod的Qos Class就是Guaranteed。
    注意:如果一个容器只指明了limit,而未指明request,则表明request的值等于limit的值。
    例子如下:

    containers:
        name: foo
            resources:
                limits:
                    cpu: 10m
                    memory: 1Gi
        name: bar
            resources:
                limits:
                    cpu: 100m
                    memory: 100Mi
    containers:
        name: foo
            resources:
                limits:
                    cpu: 10m
                    memory: 1Gi
                requests:
                    cpu: 10m
                    memory: 1Gi
    
        name: bar
            resources:
                limits:
                    cpu: 100m
                    memory: 100Mi
                requests:
                    cpu: 100m
                    memory: 100Mi
    

    5.2 Best-Effort

    如果Pod中所有容器的所有Resource的request和limit都没有赋值,则这个Pod的QoS Class就是Best-Effort.

    containers:
        name: foo
            resources:
        name: bar
            resources:
    

    5.3 Burstable
    除了符合Guaranteed和Best-Effort的场景,其他场景的Pod QoS Class都属于Burstable。
    注意:当limit值未指定时,其有效值其实是对应Node Resource的Capacity。

    # 容器bar没有对Resource进行指定。
    containers:
        name: foo
            resources:
                limits:
                    cpu: 10m
                    memory: 1Gi
                requests:
                    cpu: 10m
                    memory: 1Gi
    
        name: bar
    
    # 容器foo和bar对不同的Resource进行了指定。
    containers:
        name: foo
            resources:
                limits:
                    memory: 1Gi
    
        name: bar
            resources:
                limits:
                    cpu: 100m
    
    容器foo未指定limit,容器bar未指定request和limit。
    containers:
        name: foo
            resources:
                requests:
                    cpu: 10m
                    memory: 1Gi
    
        name: bar
    
  • 相关阅读:
    编写 grunt 插件经验
    Sencha Touch 手机移动开发框架 HTML5 项目压缩方案;
    随笔 编辑推荐 上头条了, 贴出来做个记念!
    Javascript 俄罗斯方块 游戏代码解释!
    30天自制操作系统(NASM+GCC版)
    Logisim 打不开的解决方案(Windows10)
    Kali Linux 2020通过UEFI硬盘安装(免u盘)
    开源一个自制的ORM框架,基于Java原生JDBC(应该是全网首个吧)
    书单
    前端技术文章收集
  • 原文地址:https://www.cnblogs.com/yuhaohao/p/13202828.html
Copyright © 2020-2023  润新知