常见问题解答

为什么在导入命名空间时不应该存在多个 ResourceQuota?

在导入命名空间时,如果该命名空间中包含多个 ResourceQuota 资源,平台将会选择每个配额项中最小的值来进行合并,最终创建一个名为 default 的单一 ResourceQuota。

示例:

待导入的命名空间 to-import 包含以下 resourcequota 资源:

---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: a
  namespace: to-import
spec:
  hard:
    requests.cpu: "1"
    requests.memory: "500Mi"
    limits.cpu: "3"
    limits.memory: "1Gi"
---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: b
  namespace: to-import
spec:
  hard:
    requests.cpu: "2"
    requests.memory: "300Mi"
    limits.cpu: "2"
    limits.memory: "2Gi"

导入 to-import 命名空间后,将在该命名空间创建以下 default ResourceQuota:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: default
  namespace: to-import
spec:
  hard:
    requests.cpu: "1"
    requests.memory: "300Mi"
    limits.cpu: "2"
    limits.memory: "1Gi"

对于每个 ResourceQuota,资源配额的值是 ab 之间的最小值。

当命名空间中存在多个 ResourceQuota 时,Kubernetes 会独立验证每个 ResourceQuota。因此,在导入命名空间后,建议删除除 default 之外的所有 ResourceQuota。这有助于避免由于存在多个 ResourceQuota 而导致的配额计算复杂性,从而可能引发错误。

为什么在导入命名空间时不应该存在多个 LimitRange 或者 LimitRange 的名称不是default

在导入命名空间时,如果该命名空间中包含多个 LimitRange 资源,平台无法将它们合并为单个 LimitRange。因为 Kubernetes 在存在多个 LimitRange 的情况下会独立验证每个 LimitRange,而选择哪个 LimitRange 的默认值是不可预测的。

在创建命名空间时,平台将会创建一个名为 default 的 LimitRange。因此,在导入命名空间之前,命名空间中应该只存在单个名为 default 的 LimitRange。