在Kubernetes中,ResourceQuota对象与LimitRange对象之间有什么区别

k10s72fa  于 2022-12-03  发布在  Kubernetes
关注(0)|答案(2)|浏览(178)

请解释Kubernetes中ResourceQuotaLimitRange对象之间的区别......?

wa7juj8i

wa7juj8i1#

LimitRangeResourceQuota是Kubernetes集群管理员用于控制资源使用情况的对象。
ResourceQuota用于限制名称空间的总资源消耗,例如:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-counts
spec:
  hard:
    configmaps: "10" 
    persistentvolumeclaims: "4" 
    replicationcontrollers: "20" 
    secrets: "10" 
    services: "10"

LimitRange用于管理项目中pod和容器级别的约束。

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

请求这些LimitRange约束之外的资源的单个Pod或Container将被拒绝,而ResourceQuota仅应用于聚合的所有名称空间/项目的对象。

eeq64g8w

eeq64g8w2#

资源配额

当几个用户或组共享一个具有固定节点数的群集时,可能会出现一个问题,即一个组使用的资源可能超过其公平份额。资源配额是管理员解决此问题的工具。由ResourceQuota对象定义的资源配额提供限制每个命名空间的汇总资源消耗的条件约束。它可以按类型限制可在命名空间中创建的对象数量,以及该命名空间中的资源可能消耗的计算资源总量。
资源配额的工作方式如下:
1.不同的团队在不同的命名空间中工作。这可以通过RBAC强制执行。
1.管理员为每个命名空间创建一个ResourceQuota。
1.用户在命名空间中创建资源(pod、服务等),配额系统跟踪使用情况以确保其不超过ResourceQuota中定义的硬资源限制。
1.如果创建或更新资源违反了配额约束,则请求将失败,HTTP状态代码为403 FORBIDDEN,并显示一条消息,说明可能违反的约束。
1.如果在命名空间中为CPU和内存等计算资源启用了配额,则用户必须为这些值指定请求或限制;否则,配额系统可能会拒绝Pod创建。提示:使用LimitRanger接入控制器强制设置没有计算资源要求的Pod的默认值。

限制范围

默认情况下,container在Kubernetes集群上使用无限的计算资源运行。(也称为群集操作员)可以限制群集资源的使用和创建(如CPU时间、内存和持久性存储)。在命名空间中,Pod可以在应用于该命名空间的ResourceQuotas允许的范围内消耗尽可能多的CPU和内存。作为群集操作员或命名空间级别的管理员,您可能还需要考虑确保单个对象不能独占名称空间中的所有可用资源。
LimitRange是一种用于约束资源分配(限制和请求)的策略,您可以为名称空间中的每个适用对象类型(如Pod或PersistentVolumeClaim)指定这些资源分配。
LimitRange提供的约束可以:
1.强制执行命名空间中每个Pod或Container的最小和最大计算资源使用量。
1.强制命名空间中每个PersistentVolumeClaim的最小和最大存储请求。
1.对命名空间中的资源强制执行请求和限制之间的比率。
1.为命名空间中的计算资源设置默认请求/限制,并在运行时自动将其注入Containers。
当特定命名空间中存在LimitRange对象时,将在该命名空间中强制执行LimitRange。
对资源限制和请求的约束:
1.管理员在命名空间中创建LimitRange。
1.用户在该名称空间中创建(或尝试创建)对象,如Pod或PersistentVolumeClaims。
1.首先,LimitRange准入控制器将默认请求和限制值应用于未设置计算资源要求的所有Pod(及其容器)。
1.其次,LimitRange跟踪使用情况以确保其不超过在命名空间中存在的任何LimitRange中定义的资源最小值、最大值和比率。
1.如果尝试创建或更新违反LimitRange约束的对象(Pod或PersistentVolumeClaim),则向API服务器发出的请求将失败,并显示HTTP状态代码403 Forbidden和一条消息,说明违反的约束。
1.如果在应用于计算相关资源(如cpu和内存)的命名空间中添加LimitRange,则必须为这些值指定请求或限制。否则,系统可能会拒绝Pod创建。LimitRange验证仅在Pod准入阶段进行,而不在运行Pod时进行。7.如果添加或修改LimitRange,则该命名空间中已存在的Pod将继续保持不变。
1.如果命名空间中存在两个或多个LimitRange对象,则无法确定将应用哪个默认值。

---------------------------------------------

因此,如果您尝试总结ResourceQuota应用有关CPU,工作负荷内存以及可在名称空间中创建的对象数的限制。LimitRange定义名称空间中工作负荷的CPU和内存消耗的默认值,最大值和最小值。如果您在名称空间中应用了配额,每个Pod都必须在其清单中请求CPU和内存等资源。2否则Pod创建将失败。3但是如果您使用默认内存和CPU请求强制执行了LimitRange,则可以避免。
资料来源:Kubernetes文件

相关问题