1.14. 创建和管理 ManagedClusterSets
ManagedClusterSet
是一个受管集群的组。使用受管集群集,您可以一起管理对组中所有受管集群的访问。您还可以创建一个 ManagedClusterSetBinding
资源,将 ManagedClusterSet
资源绑定到命名空间。
每个受管集群都必须是 ManagedClusterSet
的成员。安装 hub 集群时,会创建一个名为 default
的 ManagedClusterSet
。所有没有特别分配给受管集群集的受管集群都会被自动分配给 default
受管集群集。为确保默认受管集群集始终可用,您无法删除或更新 default
受管集群集。
注: 没有特别添加到 ManagedClusterSet
中的集群池不会添加到默认的 ManagedClusterSet
中。从集群池中声明受管集群后,如果不明确添加到另一个 ManagedClusterSet
中,则会将其添加到默认 ManagedClusterSet
中。
1.14.1. 创建 ManagedClusterSet
您可以在受管集群集中将受管集群分组在一起,以限制受管集群的用户访问权限。
需要的访问权限: 集群管理员
ManagedClusterSet
是一个集群范围的资源,因此您必须在创建 ManagedClusterSet
的集群中具有集群管理权限。受管集群不能包含在多个 ManagedClusterSet
中。您可以从 Red Hat Advanced Cluster Management for Kubernetes 控制台或命令行界面创建受管集群集。
1.14.1.1. 使用控制台创建 ManagedClusterSet
完成以下步骤,使用 Red Hat Advanced Cluster Management 控制台创建受管集群集:
- 在主控制台导航中,选择 Infrastructure > Clusters 并确保选择了 Cluster set 选项卡。
- 选择 Create cluster set,并输入集群集的名称。
1.14.1.2. 使用命令行创建 ManagedClusterSet
将受管集群集的以下定义添加到 yaml
文件中,使用命令行创建受管集群集:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: ManagedClusterSet metadata: name: <clusterset1>
将 clusterset1
替换为受管集集群的名称。
1.14.2. 为 ManagedClusterSet 分配用户或组基于角色的访问控制权限
您可以将用户或组分配给由 hub 集群上配置的身份提供程序提供的集群集合。
需要的访问权限:集群管理员
ManagedClusterSet
API 提供了两个级别的 RBAC 权限:
集群集
admin
- 对分配给受管集群集的所有集群和集群池资源具有完全访问权限。
- 创建集群、导入集群和创建集群池的权限。创建受管集群集时,必须将权限分配给受管集群集。
集群集
view
- 对分配给受管集群集的所有集群和集群池资源只读权限。
- 没有创建集群、导入集群或创建集群池的权限。
完成以下步骤,通过 Red Hat Advanced Cluster Management 控制台将用户或组分配给受管集群集:
- 在控制台的主导航菜单中选择 Infrastructure > Clusters。
- 选择 Cluster sets 选项卡。
- 选择您的目标集群集。
- 选择 Access management 选项卡。
- 选择 Add user or group。
- 搜索,然后选择您要提供访问权限的用户和组。
- 选择 Cluster set admin 或 Cluster set view 角色,赋予所选用户或用户组。如需有关角色权限的更多信息,请参阅角色概述。
- 选择 Add 以提交更改。
表中会显示您的用户或组。可能需要几秒钟后,分配到所有受管集群设置的资源的权限才会被传播到您的用户或组。
有关基于角色的操作的更多信息,请参阅基于角色的访问控制。
如需放置信息,请参阅使用 ManagedClusterSets with Placement。
1.14.2.1. 创建 ManagedClusterSetBinding 资源
创建一个 ManagedClusterSetBinding
资源,将 ManagedClusterSet
资源绑定到命名空间。在同一命名空间中创建的应用程序和策略只能访问包含在绑定受管集群集资源的受管集群。
命名空间的访问权限会自动应用到绑定到该命名空间的受管集群集。如果您有访问权限来访问受管集群设置的命名空间,则会自动具有访问绑定到该命名空间的任何受管集群集的权限。但是,如果您只拥有访问受管集群集的权限,则没有访问命名空间中其他受管集群集的权限。如果没有看到受管集群集,则可能没有查看它所需的权限。
您可以使用控制台或命令行创建受管集群集绑定。
1.14.2.1.1. 使用控制台创建 ManagedClusterSetBinding
完成以下步骤,使用 Red Hat Advanced Cluster Management 控制台从受管集群集中删除集群:
- 在主导航中选择 Infrastructure > Clusters 并选择 Cluster set 选项卡来访问集群页面。
- 选择您要为创建绑定的集群集的名称,以查看集群集详情。
- 选择 Actions > Edit namespace bindings。
- 在 Edit namespace bindings 页面中,从下拉菜单中选择您要将集群集绑定到的命名空间。已选择现有的与集群集绑定的命名空间。
1.14.2.1.2. 使用命令行创建 ManagedClusterSetBinding
要使用命令行创建受管集群集绑定,请完成以下步骤:
在
yaml
文件中创建ManagedClusterSetBinding
资源。在创建受管集群集绑定时,受管集群集绑定的名称必须与要绑定的受管集群集的名称匹配。您的ManagedClusterSetBinding
资源可能类似以下信息:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: ManagedClusterSetBinding metadata: namespace: project1 name: clusterset1 spec: clusterSet: clusterset1
确保目标受管集群集有绑定权限。查看以下
ClusterRole
资源示例,其中包含允许用户绑定到clusterset1
的规则:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: clusterrole1 rules: - apiGroups: ["cluster.open-cluster-management.io"] resources: ["managedclustersets/bind"] resourceNames: ["clusterset1"] verbs: ["create"]
1.14.3. 将集群添加到 ManagedClusterSet
创建 ManagedClusterSet
后,您必须添加一个或多个受管集群。您可以使用控制台或命令行将受管集群添加到受管集群集。
1.14.3.1. 使用控制台将集群添加到 ManagedClusterSet
完成以下步骤,使用 Red Hat Advanced Cluster Management 控制台将集群添加到受管集群集中:
- 如果您只创建了受管集群集,选择 Manage resource assignments 以直接进入 Manage 资源分配页面。继续执行此流程的第 6 步。
- 如果集群已存在,在主导航中选择 Infrastructure > Clusters 来访问集群页面。
- 选择 Cluster set 选项卡来查看可用的集群集。
- 选择您要添加到受管集群集的集群集的名称,以查看集群设置详情。
- 选择 Actions > Manage resource assignments。
- 在 Manage resource assignments 页面上,选中您要添加到集群集的资源的复选框。
- 选择 Review 查看您的更改。
选择 Save 保存您的更改。
注:如果将受管集群从一个受管集群集移到另一个受管集群,则必须在两个受管集群集中都有所需的 RBAC 权限。
1.14.3.2. 使用命令行将集群添加到 ManagedClusterSet
完成以下步骤,使用命令行将集群添加到受管集群集中:
确保有一个 RBAC
ClusterRole
条目,供您在managedclustersets/join
的虚拟子资源中创建。没有这个权限,就无法将受管集群分配给ManagedClusterSet
。如果此条目不存在,请将其添加到您的
yaml
文件中。示例条目类似以下内容:kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: clusterrole1 rules: - apiGroups: ["cluster.open-cluster-management.io"] resources: ["managedclustersets/join"] resourceNames: ["<clusterset1>"] verbs: ["create"]
将
clusterset1
替换为ManagedClusterSet
的名称。注:如果要将受管集群从一个
ManagedClusterSet
移到另一个,则必须在两个受管集群集中都有该权限。在
yaml
文件中查找受管集群的定义。在受管集群定义的这个部分添加与以下内容类似的标签:apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: name: cluster1 spec: hubAcceptsClient: true
在本例中,
cluster1
是受管集群的名称。添加一个标签,指定
ManagedClusterSet
,格式为:cluster.open-cluster-management.io/clusterset: clusterset1
。您的代码类似以下示例:
apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: name: cluster1 labels: cluster.open-cluster-management.io/clusterset: clusterset1 spec: hubAcceptsClient: true
在本例中,
cluster1
是添加到受管集群集clusterset1
的集群 。注: 如果受管集群之前被分配给已删除的受管集群集,受管集群可能会有一个受管集群集已被指定到不存在的集群集合。如果出现这种情况,请用新名称替换。
1.14.4. 从 ManagedClusterSet 中删除受管集群
您可能希望从受管集群集中删除受管集群,将其移到不同的受管集群集,或者从集合的管理设置中删除。您可以使用控制台或命令行界面从受管集群集中删除受管集群。
注:每个受管集群都必须分配到一个受管集群集。如果您从 ManagedClusterSet
中删除受管集群,且不将其分配给不同的 ManagedClusterSet
,则会自动添加到 default
受管集群集中。
1.14.4.1. 使用控制台从 ManagedClusterSet 中删除受管集群
完成以下步骤,使用 Red Hat Advanced Cluster Management 控制台从受管集群集中删除集群:
- 如果您只创建了受管集群集,选择 Manage resource assignments 以直接进入 Manage 资源分配页面。继续执行此流程的第 5 步。
- 如果集群已存在,在主导航中选择 Infrastructure > Clusters 来访问集群页面,并确保选择了 Cluster sets 选项卡。
- 选择您要从受管集群集中删除的集群集的名称,以查看集群设置详情。
- 选择 Actions > Manage resource assignments。
在 Manage resource assignments 页面上,选中您要从集群集合中删除的资源的复选框。
此步骤删除已是集群集成员的资源,或添加尚未成为集群集成员的资源。您可以通过查看受管集群的详情来查看资源是否已是集群集的成员。
注: 如果要将受管集群从一个受管集群集移到另一个受管集群,则必须在两个受管集群集中都有所需的 RBAC 权限。
1.14.4.2. 使用命令行从 ManagedClusterSet 中删除集群
要使用命令行从受管集群集中删除受管集群,请完成以下步骤:
运行以下命令在受管集群集中显示受管集群列表:
oc get managedclusters -l cluster.open-cluster-management.io/clusterset=<clusterset1>
将
clusterset1
替换为受管集群集的名称。- 找到您要删除的集群条目。
从您要删除的集群的
yaml
条目中删除该标签。参阅以下标签代码示例:labels: cluster.open-cluster-management.io/clusterset: clusterset1
注: 如果要将受管集群从一个受管集群集移到另一个受管集群集,则必须在两个受管集群集中都有所需的 RBAC 权限。
1.14.5. 在放置中使用 ManagedClusterSet
Placement
资源是一个命名空间范围的资源,它定义了一个规则来从 ManagedClusterSets
中选择 ManagedClusters
集合,它们绑定到放置命名空间。
需要的访问权限: Cluster administrator,Cluster set administrator
1.14.5.1. 放置概述
参阅以下有关使用受管集群放置的信息:
-
Kubernetes 集群在 hub 集群中注册,作为集群范围的
ManagedClusters
。 -
ManagedClusters
被组织到集群范围的ManagedClusterSets
中。 -
ManagedClusterSets
与工作负载命名空间绑定。 -
命名空间范围的
放置
指定ManagedClusterSet
的一个部分,用于选择潜在ManagedClusters
的工作集合。 使用标签和声明选择器从该工作集中选择
放置
。重要:如果没有绑定到放置命名空间的
ManagedClusterSet
绑定,Placement
不会选择ManagedCluster
。-
ManagedClusters
的放置可以使用污点和容限控制。如需更多信息,请参阅使用污点和容限放置受管集群。
Placement
规格包括以下字段:
ClusterSets
代表从中选择ManagedClusters
的ManagedClusterSets
。-
如果没有指定,则从绑定到放置命名空间的
ManagedClusterSets
中选择ManagedClusters
。 -
如果指定,
ManagedClusters
会从这个集合的交集和绑定到放置命名空间的ManagedClusterSets
中选择。
-
如果没有指定,则从绑定到放置命名空间的
NumberOfClusters
代表要选择的可以满足放置要求的ManagedClusters
数量。如果没有指定,则会选择满足放置要求的所有
ManagedClusters
。-
Predicates
代表一个 predicates 片段,用于选择带有标签和声明选择器的ManagedClusters
。predicate 是 ORed。 priorityrPolicy
代表优先级器的策略。mode
可以是Exact
,Additive
, 或""
,其中""
默认为Additive
。-
在
Additive
模式中,未特别提供配置值的任何优先级程序均通过其默认配置启用。在当前的默认配置中,Steady 和 Balance 的权重为 1,而其他优先级的权重为 0。默认配置将来可能会改变,这可能会改变优先级。additive
模式不要求您配置所有优先级别。 -
在
Exact
模式中,没有特别提供的配置值的任何优先级优先级的权重为零。Exact
模式要求您输入您想要的完整一组优先级程序,但可避免版本之间的行为改变。
-
在
configurations
表示优先级器的配置。scoreCoordinate 代表优先级和分数源的配置。
-
type
定义优先级分数的类型。类型是BuiltIn
,AddOn
, 或" "
,其中" "
默认为BuiltIn
。当类型为BuiltIn
时,必须指定 prioritizer 的名称。当类型为AddOn
时,您需要在AddOn
中配置分数源。 builtIn
定义 BuiltIn prioritizer 的名称。以下列表包含有效的BuiltIn
prioritizer 名称:- Balance: 平衡集群之间的决策。
- Steady:确保现有决策稳定。
- ResourceAllocatableCPU 和 ResourceAllocatableMemory: 根据可分配资源排序集群。
addOn
定义资源名称和分数名称。引入了AddOnPlacementScore
来描述附加组件分数。请参阅可扩展调度以了解更多信息。-
resourceName
定义AddOnPlacementScore
的资源名称。放置 prioritizer 根据此名称选择AddOnPlacementScore
自定义资源。 -
scoreName
定义AddOnPlacementScore
中的分数名称。AddOnPlacementScore
包含分数名称和分数值的列表。scoreName
,指定 prioritizer 要使用的分数。
-
-
-
weight
定义优先级优先级的权重。该值必须在 [-10,10] 范围内。每个优先级器计算一个集群在 [-100, 100] 范围内的整数分数。集群的最终分数由以下公式sum(weight * prioritizer_score)
决定。权重越高,表示优先级函数在集群选择中获得更高的权重,而 0 个权重表示已禁用优先级优先级。负权重表示它是选定的最后一个。
注: configure.name
文件将在 v1beta1 中删除,并替换为 scoreCoordinate.builtIn
文件。如果同时定义了 name
和 scoreCoordinate.builtIn
,则使用 scoreCoordinate.builtIn
的值来确定选择。
1.14.5.2. 放置示例
您需要通过在该命名空间中创建一个 ManagedClusterSetBinding
来最少将一个 ManagedClusterSet
绑定到一个命名空间。注:您需要在 managedclustersets/bind
的虚拟子资源上对 CREATE
进行基于角色的访问权限。请参见以下示例:
您可以使用
labelSelector
选择ManagedClusters
。请参阅以下示例,其中labelSelector
仅与带有标签vendor: OpenShift
的集群匹配:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement1 namespace: ns1 spec: predicates: - requiredClusterSelector: labelSelector: matchLabels: vendor: OpenShift
您可以使用
claimSelector
选择ManagedClusters
。请参阅以下示例,其中claimSelector
仅与带有us-west-1
的region.open-cluster-management.io
的集群匹配:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement2 namespace: ns1 spec: predicates: - requiredClusterSelector: claimSelector: matchExpressions: - key: region.open-cluster-management.io operator: In values: - us-west-1
您可以从特定的
clusterSets
中选择ManagedClusters
。请参阅以下示例,其中claimSelector
仅与clusterSets:
clusterset1
clusterset2
匹配:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement3 namespace: ns1 spec: clusterSets: - clusterset1 - clusterset2 predicates: - requiredClusterSelector: claimSelector: matchExpressions: - key: region.open-cluster-management.io operator: In values: - us-west-1
选择所需的
ManagedClusters
数量。请参阅以下示例,其中numberOfClusters
为3
:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement4 namespace: ns1 spec: numberOfClusters: 3 predicates: - requiredClusterSelector: labelSelector: matchLabels: vendor: OpenShift claimSelector: matchExpressions: - key: region.open-cluster-management.io operator: In values: - us-west-1
选择具有最大可分配内存的集群。
注: 与 Kubernetes Node Allocatable 类似,"可分配"这里定义为每个集群中 pod 可用的计算资源数量。
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement6 namespace: ns1 spec: numberOfClusters: 1 prioritizerPolicy: configurations: - scoreCoordinate: builtIn: ResourceAllocatableMemory
选择具有最大可分配 CPU 和内存的集群,并区分资源更改。
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement7 namespace: ns1 spec: numberOfClusters: 1 prioritizerPolicy: configurations: - scoreCoordinate: builtIn: ResourceAllocatableCPU weight: 2 - scoreCoordinate: builtIn: ResourceAllocatableMemory weight: 2
选择具有最大可分配内存的两个集群,以及最大附加组件分数 cpu 比例,并固定放置决策。
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement8 namespace: ns1 spec: numberOfClusters: 2 prioritizerPolicy: mode: Exact configurations: - scoreCoordinate: builtIn: ResourceAllocatableMemory - scoreCoordinate: builtIn: Steady weight: 3 - scoreCoordinate: type: AddOn addOn: resourceName: default scoreName: cpuratio
1.14.5.3. 放置决定
将创建一个或多个带有标签 cluster.open-cluster-management.io/placement={placement name}
的 PlacementDecisions
来代表由一个 Placement
选择的 ManagedClusters
。
如果选择了 ManagedCluster
并添加到 PlacementDecision
中,消耗此放置
的组件可能会在这个 ManagedCluster
上应用工作负载。当 ManagedCluster
不再被选择后,它会从 PlacementDecisions
中删除后,在此 ManagedCluster
上应用的工作负载也会被相应地删除。
请参阅以下 PlacementDecision
示例:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: PlacementDecision metadata: labels: cluster.open-cluster-management.io/placement: placement1 name: placement1-kbc7q namespace: ns1 ownerReferences: - apiVersion: cluster.open-cluster-management.io/v1beta1 blockOwnerDeletion: true controller: true kind: Placement name: placement1 uid: 05441cf6-2543-4ecc-8389-1079b42fe63e status: decisions: - clusterName: cluster1 reason: '' - clusterName: cluster2 reason: '' - clusterName: cluster3 reason: ''
1.14.5.4. 附加组件状态
您可能希望根据部署在其上的附加组件的状态,为放置选择受管集群。例如,只有在集群中启用了特定的附加组件时,才会为放置选择受管集群。
您可以为附加组件指定标签,并在创建放置时根据需要指定其状态(如果需要)。如果集群中启用了附加组件,则会自动在 ManagedCluster
资源上创建一个标签。如果禁用了附加组件,则会自动删除该标签。
每个附加组件都由一个标签表示,格式为 feature.open-cluster-management.io/addon-<addon_name>=<status_of_addon>
。
使用要在要选择的受管集群中启用的附加组件名称替换 addon_name
。
将 status_of_addon
替换为在选择集群时该附加组件应具有的状态。status_of_addon
的可能值位于以下列表中:
-
available
:附加组件已启用并可用。 -
unhealthy
:附加组件已启用,但租期不会持续更新。 -
unreachable
:附加组件已启用,但没有为其找到租用。也可以在受管集群离线时导致这个问题。
例如,可用的 application-manager
附加组件由受管集群中的标签表示:
feature.open-cluster-management.io/addon-application-manager: available
请参阅以下基于附加组件及其状态创建放置的示例:
您可以通过添加以下 YAML 内容来创建放置,其中包含启用了
application-manager
的所有受管集群:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement1 namespace: ns1 spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: - key: feature.open-cluster-management.io/addon-application-manager operator: Exists
您可以通过添加以下 YAML 内容来创建放置,其中包含启用了
application-manager
且具有available
状态的所有受管集群:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement2 namespace: ns1 spec: predicates: - requiredClusterSelector: labelSelector: matchLabels: "feature.open-cluster-management.io/addon-application-manager": "available"
您可以通过添加以下 YAML 内容来创建包含禁用
application-manager
的所有受管集群的放置:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement3 namespace: ns1 spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: - key: feature.open-cluster-management.io/addon-application-manager operator: DoesNotExist
1.14.5.5. 可扩展调度
在基于放置资源的调度中,prioritizer 需要比 MananagedCluster
资源提供的默认值更多的数据来计算受管集群分数。例如,根据通过监控系统获取的集群 CPU 或内存使用情况数据来调度集群。
API AddOnPlacementScore
支持根据自定义分数进行调度的更可扩展方式。
-
您可以指定
placement.yaml
文件中的分数来选择集群。 -
作为分数供应商,第 3 方控制器可以在 hub 集群或受管集群上运行,以便维护
AddOnPlacementScore
生命周期,并在其中更新分数。
请参阅 open-cluster-management
存储库中的放置可扩展调度增强,以了解更多信息。
1.14.6. 使用污点和容限来放置受管集群
您可以使用污点和容限控制受管集群或受管集群集的放置。污点和容限提供了一种防止为特定放置选择受管集群的方法。如果要阻止某些受管集群包含在某些放置中,这个控制会很有用。您可以向受管集群添加污点,并为放置添加容限。如果污点和容限不匹配,则不会为该放置选择受管集群。
1.14.6.1. 将污点添加到受管集群
污点在受管集群的属性中指定,并允许放置来重新放置受管集群或一组受管集群。您可以通过输入类似以下示例的命令,为受管集群添加污点:
kubectl taint ManagedCluster <managed_cluster_name> key=value:NoSelect
污点的规格包括以下字段:
-
必需键 - 应用到集群的污点键。这个值必须与受管集群的容限中的值匹配,以满足添加到该放置的条件。您可以确定这个值。例如,这个值可以是
bar
或foo.example.com/bar
。 -
可选值 - 污点键的污点值。这个值必须与受管集群的容限中的值匹配,以满足添加到该放置的条件。例如,这个值可以是
value
。 必需效果 - 污点对不容许污点的放置效果,或者在污点和放置容限不匹配时发生什么。effect 的值必须是以下值之一:
-
NoSelect
- 除非容许这个污点,否则不允许放置来选择集群。如果在设置污点前放置选择了集群,则会从放置决定中移除集群。 -
NoSelectIfNew
- 如果是新集群,调度程序就无法选择该集群。只有容许污点且已在其集群决策中拥有集群,放置才可以选择集群。
-
-
必需
TimeAdded
- 添加污点的时间。这个值会自动设置。
1.14.6.2. 识别内置污点以反映受管集群的状态
当无法访问受管集群时,您不希望集群添加到放置中。以下污点会自动添加到无法访问的受管集群:
cluster.open-cluster-management.io/unavailable
- 当集群有ManagedClusterConditionAvailable
条件为False
时,这个污点被添加到受管集群。污点具有NoSelect
和空值的效果,以防止调度不可用的集群。以下内容中提供了此污点的示例:apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: name: cluster1 spec: hubAcceptsClient: true taints: - effect: NoSelect key: cluster.open-cluster-management.io/unavailable timeAdded: '2022-02-21T08:11:54Z'
cluster.open-cluster-management.io/unreachable
- 当ManagedClusterConditionAvailable
条件的状态为Unknown
或没有条件时,此污点被添加到受管集群。污点对NoSelect
和一个空值的影响,以防止调度无法访问的集群。以下内容中提供了此污点的示例:apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: name: cluster1 spec: hubAcceptsClient: true taints: - effect: NoSelect key: cluster.open-cluster-management.io/unreachable timeAdded: '2022-02-21T08:11:06Z'
1.14.6.3. 为放置添加容限
容限应用到放置,并允许放置没有与放置容限匹配的污点的受管集群。容限的规格包括以下字段:
- 可选 键 - 密钥与 taint 键匹配以允许放置。
- 可选 值 - 容限中的值必须与容限的污点值匹配,以允许放置。
可选 Operator - Operator 代表键和值之间的关系。有效的操作符是
equal
和exists
。默认值为equal
。当键相同时,容限与污点匹配,影响相同,运算符是以下值之一:-
equal
- 运算符equal
,值在污点和容忍度中是相同的。 -
exists
- 值的通配符,因此放置可以容限特定类别的所有污点。
-
-
可选 效果 - 要匹配的污点效果。当留空时,它将匹配所有污点效果。指定后允许的值为
NoSelect
或NoSelectIfNew
。 -
可选 TolerationSeconds - 将受管集群移至新放置前容许污点的时间长度(以秒为单位)。如果 effect 值不是
NoSelect
或PreferNoSelect
,会忽略此字段。默认值为nil
,这表示没有时间限制。TolerationSeconds
的开始时间自动列为污点中的TimeAdded
值,而不是在集群调度时间或者TolerationSeconds
添加时间。
以下示例演示了如何配置容许具有污点的集群的容限:
受管集群中的污点,例如:
apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: name: cluster1 spec: hubAcceptsClient: true taints: - effect: NoSelect key: gpu value: "true" timeAdded: '2022-02-21T08:11:06Z'
允许容许污点的放置上的容限
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement1 namespace: default spec: tolerations: - key: gpu value: "true" operator: Equal
在定义了容限示例后,放置可以选择
cluster1
,因为key: gpu
和value: "true"
匹配。
注: 受管集群不能保证放在包含污点容限的放置上。如果其他放置包含相同的容限,受管集群可能会放置到其中一个放置上。
1.14.6.4. 指定临时容限
TolerationSeconds
的值指定容限容许污点的时间期限。当受管集群离线时,这个临时容限会很有用,您可以将在此集群中部署的应用程序传送到另一个受管集群中,以便容忍的时间。
例如,具有以下污点的受管集群将无法访问:
apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: name: cluster1 spec: hubAcceptsClient: true taints: - effect: NoSelect key: cluster.open-cluster-management.io/unreachable timeAdded: '2022-02-21T08:11:06Z'
如果您使用 TolerationSeconds
的值定义放置,如下例所示,工作负载在 5 分钟后传输到另一个可用的受管集群。
apiVersion: cluster.open-cluster-management.io/v1alpha1 kind: Placement metadata: name: demo4 namespace: demo1 spec: tolerations: - key: cluster.open-cluster-management.io/unreachable operator: Exists tolerationSeconds: 300 ----
受管集群在无法访问 5 分钟后,应用程序会被移到另一个受管集群。