本文提供如何使用 ClusterResourceOverride API 在 Azure Kubernetes Fleet Manager 中自定義叢集範圍資源的概觀。
您可以在叢集資源之間修改或覆寫特定屬性。 您可以使用 ClusterResourceOverride,根據叢集卷標定義規則,並指定要套用至各種整個叢集資源的變更。 這些資源包括命名空間、叢集角色、叢集角色系結或自定義資源定義。
這些修改可能包括許可權、組態或其他參數的更新。 這類更新有助於確保透過 Fleet Manager 管理之叢集的一致管理和強制執行設定。
API 元件
ClusterResourceOverride API 是由下列元件組成:
-
clusterResourceSelectors:指定選取要覆寫的叢集資源集合。 -
policy:指定要套用至所選叢集資源的規則集合。
叢集資源選取器
ClusterResourceOverride 物件可以包含一或多個叢集資源選取器,以指定要覆寫的資源。 對象 ClusterResourceSelector 支援下列欄位。
注意
如果您在 中 ClusterResourceSelector選取命名空間,則覆寫會套用至命名空間中的所有資源。
-
group:資源的 API 群組。 -
version:資源的 API 版本。 -
kind:資源的類型。 -
name:資源的名稱。
若要將叢集資源選取器新增至 ClusterResourceOverride 物件,請使用具有下列 YAML 格式的 clusterResourceSelectors 欄位:
apiVersion: placement.kubernetes-fleet.io/v1alpha1
kind: ClusterResourceOverride
metadata:
name: example-cro
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
version: v1
name: secret-reader
此範例會ClusterRole從 secret-reader API 群組中選取名為 rbac.authorization.k8s.io/v1 的物件,以覆寫:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
原則
Policy 物件包含一組規則 overrideRules,可指定要套用至所選叢集資源的變更。 每個 overrideRules 物件都支援下列欄位:
-
clusterSelector:指定套用覆寫規則的叢集集合。 -
jsonPatchOverrides:指定要套用至所選資源的變更。
若要將覆寫規則新增至 ClusterResourceOverride 物件,請使用具有下列 YAML 格式的 policy 欄位:
apiVersion: placement.kubernetes-fleet.io/v1alpha1
kind: ClusterResourceOverride
metadata:
name: example-cro
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
version: v1
name: secret-reader
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: remove
path: /rules/0/verbs/2
此範例會移除叢集上名為 ClusterRole 且具有 卷標 secret-reader之物件中的env: prod動詞 「list」。。
叢集選取器
您可以使用 clusterSelector 物件中的 overrideRules 欄位來指定要套用覆寫規則的叢集。
ClusterSelector 物件支援下列欄位:
-
clusterSelectorTerms:指定選取叢集準則的字詞清單。 每個字詞都包含一個labelSelector欄位,可定義一組要比對的標籤。
重要
labelSelector 欄位中僅支援 clusterSelectorTerms。
JSON 修補程式覆寫
您可以在 jsonPatchOverrides 物件中使用 overrideRules 來指定要套用至所選資源的變更。
JsonPatch 物件支援下列欄位:
op:要執行的作業。 支援的作業包括:-
add:將新的值新增至指定路徑。 -
remove:移除位於指定路徑的值。 -
replace:取代位於指定路徑的值。
-
path:要修改欄位的路徑。 指定路徑的指引包括:- 必須以斜線 (
/) 字元開頭。 - 不能是空的或包含空字串。
- 不能是
TypeMeta欄位 (/kind或/apiVersion)。 - 不能是
Metadata欄位 (/metadata/name或/metadata/namespace),但欄位/metadata/labels和/metadata/annotations除外。 - 不能是資源狀態中的任何欄位。
有效路徑的範例包括:
/metadata/labels/new-label/metadata/annotations/new-annotation/spec/template/spec/containers/0/resources/limits/cpu/spec/template/spec/containers/0/resources/requests/memory
- 必須以斜線 (
value:要新增、移除或取代的值。 如果op為remove,則無法指定value。
欄位會 jsonPatchOverrides 遵循 RFC 6902,在選取的資源上套用 JSON 修補程式。
多個覆寫修補程式
您可以將多個 jsonPatchOverrides 欄位新增至 overrideRules 物件,以將多個變更套用至選取的叢集資源。 以下是範例:
apiVersion: placement.kubernetes-fleet.io/v1alpha1
kind: ClusterResourceOverride
metadata:
name: cro-1
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
version: v1
name: secret-reader
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: remove
path: /rules/0/verbs/2
- op: remove
path: /rules/0/verbs/1
此範例會移除具有標籤ClusterRole之secret-reader叢集上名為 env: prod 的物件中的動詞 「list」 和 「watch」 動詞:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
套用叢集資源放置
建立
ClusterResourcePlacement資源,以指定將叢集資源覆寫分散到叢集基礎結構的放置規則。 下列程式代碼是範例。 請務必選取適當的資源。apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: crp spec: resourceSelectors: - group: rbac.authorization.k8s.io kind: ClusterRole version: v1 name: secret-reader policy: placementType: PickAll affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: env: prod此範例將資源散發在所有以
env: prod標籤的叢集中。 實作變更時,對應的ClusterResourceOverride組態會套用至指定的叢集。 選取相符的叢集角色資源secret-reader會觸發組態對叢集的應用程式。使用 命令套
ClusterResourcePlacement用kubectl apply資源:kubectl apply -f cluster-resource-placement.yamlClusterResourceOverride透過 命令檢查資源的狀態ClusterResourcePlacement,確認物件已套用至選取的資源kubectl describe:kubectl describe clusterresourceplacement crp您的輸出應該類似下列範例:
Status: Conditions: ... Last Transition Time: 2024-04-27T04:18:00Z Message: The selected resources are successfully overridden in the 10 clusters Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: ClusterResourcePlacementOverridden ... Observed Resource Index: 0 Placement Statuses: Applicable Cluster Resource Overrides: example-cro-0 Cluster Name: member-50 Conditions: ... Message: Successfully applied the override rules on the resources Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: Overridden ...ClusterResourcePlacementOverridden條件指示資源覆寫是否已成功套用至叢集中的所選資源。 每個叢集都會維護自己的Applicable Cluster Resource Overrides清單。 如果相關,此清單包含叢集資源覆寫的快照集。 每個叢集的個別狀態訊息會指出覆寫規則是否已成功套用。