Rancher 專案中的資源配額如何運作
Rancher 中的資源配額包含與 Kubernetes 原生版本相同的功能。然而,在 Rancher 中,資源配額已經擴展,以便您可以將它們套用到專案。
在標準的 Kubernetes 部署中,資源配額套用於各個命名空間。但是,您無法透過單一操作同時將配額套用到您的命名空間。相反,資源配額必須多次套用。
在下圖中,Kubernetes 管理員嘗試在沒有 Rancher 的情況下強制執行資源配額。管理員想要套用資源配額,為叢集中的每個命名空間(Namespace 1-4)設定相同的 CPU 和記憶體限制。然而,在基礎版本的 Kubernetes 中,每個命名空間都需要唯一的資源配額。管理員必須建立四個具有相同規格設定的不同資源配額(Resource Quota 1-4),並分別套用它們。
Rancher 中的資源配額有些不同。在 Rancher 中,您將資源配額套用到專案,然後配額傳播到每個命名空間,之後 Kubernetes 使用資源配額的原生版本強制執行您的限制。如果您想變更特定命名空間的配額,您可以覆寫它。
資源配額包含兩個限制,您在建立或編輯專案時設定:
-
專案限制:
這組值設定專案中所有命名空間共享 的每個指定資源的總限制。
-
命名空間預設限制:
這組值設定每個命名空間可用於每個指定資源的預設配額限制。 當在專案中建立命名空間而沒有覆寫時,此限制會自動綁定到命名空間並強制執行。
在下圖中,Rancher 管理員想要套用資源配額,為專案中的每個命名空間(Namespace 1-4)設定相同的 CPU 和記憶體限制。然而,在 Rancher 中,管理員可以為專案(Project Resource Quota)設定資源配額,而不是為各個命名空間設定。此配額包含整個專案(Project Limit)和各個命名空間(Namespace Default Limit)的資源限制。然後,Rancher 在建立時將 Namespace Default Limit 配額傳播到每個命名空間(Namespace Resource Quota)。

讓我們強調一些在 Rancher UI 中建立的命名空間的更細緻的功能。如果在專案層級刪除配額,它也將從該專案中包含的所有命名空間中移除,儘管可能存在任何覆寫。此外,在專案層級更新配額的現有命名空間預設限制不會導致該值傳播到專案中的現有命名空間;更新的值僅套用於該專案中新建立的命名空間。要更新現有命名空間的命名空間預設限制,您可以使用新的預設值刪除然後重新建立專案層級的配額。這將導致新的預設值套用於專案中的所有現有命名空間。
在專案中建立命名空間之前,Rancher 會比較專案可用資源和請求資源的數量,無論它們來自預設限制還是覆寫限制。 如果請求的資源超過專案中這些資源的剩 餘容量,Rancher 將為該命名空間分配該資源的剩餘容量。
然而,對於在 Rancher UI 之外建立的命名空間,情況並非如此。對於透過 kubectl 建立的命名空間,Rancher
將分配一個資源配額,對於請求超過專案剩餘容量的任何資源,其數量為零。
要透過 kubectl 在現有專案中建立命名空間,請使用 field.cattle.io/projectId 註解。要覆寫預設的
請求配額限制,請使用 field.cattle.io/resourceQuota 註解。
請注意,Rancher 僅會覆寫專案配額上定義的資源的限制。
apiVersion: v1
kind: Namespace
metadata:
annotations:
field.cattle.io/projectId: [your-cluster-ID]:[your-project-ID]
field.cattle.io/resourceQuota: '{"limit":{"limitsCpu":"100m", "configMaps": "50"}}'
name: my-ns
在此範例中,如果專案的配額在其資源清單中不包含 configMaps,則 Rancher 將忽略此覆寫中的 configMaps。
建議使用者在命名空間中建立專用的 ResourceQuota 物件,以設定專案上未定義的資源的額外自訂限制。
資源配額是原生 Kubernetes 物件,Rancher 將忽略屬於具有配額的專案的命名空間中使用者定義的配額,
從而使使用者擁有更多控制權。
下表說明兩種配額類型之間的主要差異。
| Rancher 資源配額 | Kubernetes 資源配額 |
|---|---|
| 套用於專案和命名空間。 | 僅套用於命名空間。 |
| 為專案中的所有命名空間建立資源池。 | 將靜態資源限制套用於各個命名空間。 |
| 透過傳播將資源配額套用到命名空間。 | 僅套用於指定的命名空間。 |