关于ns的请求/限制配额,我有以下问题:
考虑以下命名空间资源设置: -要求:1核心/ 1GiB -限制:2核心/ 2GiB
这是否意味着一个命名空间被保证具有1 / 1GiB?在群集节点上如何物理实现?这是否意味着k8s在某种程度上严格保留了这些值ns(在创建时)?预订在什么时间进行?
限制为2个核心/ 2GiB-这是否意味着不能保证ns并取决于当前群集的状态?就像当前集群只有100MiB的可用ram可用,但是在运行时pod需要在资源请求上方多200Mib一样-pod将重新启动吗?如果pod需要超出请求的范围,k8s将从哪里获取该资源?
关于namespace granularity和k8s水平自动缩放:考虑我们有2个应用程序和2个名称空间-每个应用程序1 ns。我们将ns配额都设置为这样,以便有一些空闲缓冲区可容纳2个额外的容器,并在一定的CPU阈值下水平自动缩放至2个容器。那么,进行这样的设置真的有意义吗?我担心的是,如果NS保留了它的资源,而其他ns都无法利用它们-我们可以在每个ns副本集中创建2个额外的pod,而不会自动缩放,并且不断使用这些pod。如果在1 ns内有多个应用程序,我可以看到使用自动缩放的一点,这样这些应用程序可以共享相同的资源缓冲区进行缩放。这个假设正确吗?
您认为每个应用程序具有1 ns的良好做法是什么?为什么?
p.s。我知道什么是资源请求/限制以及它们之间的区别。在大多数信息源中,仅对此概念进行了非常高级的解释。
谢谢。
答案 0 :(得分:1)
docs明确指出以下内容:
在群集的总容量小于名称空间的配额之和的情况下,可能会争用资源。这是按照先到先得的原则处理的。
和
ResourceQuotas与群集容量无关。它们以绝对单位表示。因此,如果将节点添加到群集中,这不会自动为每个名称空间提供消耗更多资源的能力。
和
资源配额划分了聚集的群集资源,但对节点没有任何限制:来自多个名称空间的pod可能在同一节点上运行
ResourceQuotas 是在命名空间中设置的约束,并且不保留容量,它只是设置了每个命名空间可以使用的资源限制。
要有效地“保留”容量,您必须对所有名称空间设置限制,以便其他名称空间使用的资源不会超出群集可以提供的资源。这样,您可以进一步保证名称空间具有可用的容量来运行其负载。
文档建议:
鉴于此,您的问题的答案是:
这不是保留的容量,保留发生在创建resource(pod)时。
保留后运行资源不会受到影响。如果资源创建将过度使用配额(限制),则新资源将被拒绝
如文档中所述,如果限制高于容量,则保留将以先到先得的方式进行。
这个问题可以用简单的话说成是SO中自己的问题,用于资源隔离和管理。