本文概述了如何使用 ClusterResourceOverride
API 自定义 Azure Kubernetes Fleet Manager 中的群集范围资源。
可以跨群集资源修改或替代特定属性。 使用 ClusterResourceOverride
,可以根据群集标签定义规则,指定要应用于各种群集范围的资源的更改。 这些资源包括命名空间、群集角色、群集角色绑定或自定义资源定义。
这些修改可能包括对权限、配置或其他参数的更新。 此类更新有助于确保跨通过机群管理器管理的群集中的配置进行一致的管理和强制实施。
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
API 组中选择一个名为 secret-reader
的 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
。
可以使用 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.yaml
使用
ClusterResourceOverride
命令查看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
列表。 此列表包含群集资源替代快照。 每个群集的单独状态消息指示是否已成功应用替代规则。