CNCF 沙箱项目 OCM Placement 多集群分派指南
2023-03-02 运营
总而言之,在一个常用的多坦克部队所在之处掌控直角中都,如何补救多个广泛该软件/剧情分离的原因本来是最首要的原因之一,OCM 之所以过渡到了 ClusterSet 仿真且额外以外了其到再一命名内部空间的射影,是为了想要 OCM 作为一个平台能补救“多坦克部队情景”中都努力广泛该软件补救最琐碎同时又最操心的原因。至于如何消费所区隔的坦克部队此表请参照比如说的 Placement 仿真。
什么是 Placement?Placement API 用于在一个或多个转交坦克部队组成员(ManagedClusterSet)中都面为了让一个大成员转交大群聚(ManagedCluster),以便将兼职输显露侦察到这些大群聚上。
如果度量了必要的 Placement,则 Placement 掌控筒 (controller) 将生成相应的适时执行者 (PlacementDecision),并在状态 (Status) 中都面罗列显露拟定的转交大群聚 (ManagedCluster)。作为再行次广泛该软件,你可以解析显露拟定的坦克部队,然后对期望坦克部队顺利进行操纵。你也可以将非常高一般而言的兼职输显露编排筒 (orchestrator) 与 PlacementDecision 构建,来扩展到 Placement 的适时能力。
例如,ArgoCD 仍未与 Placement 构建。ArgoCD 的用到者可以在 ApplicationSet 的 clusterDecisionResource 中都面指明一个区隔了的 PlacementDecision 海洋资源的 ConfigMap,就可以借助 Placement 的适时执行者,将广泛应用启动时相应到一个大成员期望坦克部队。如下:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: book-import
spec:
generators:
- clusterDecisionResource:
configMapRef: ocm-placement
labelSelector:
matchLabels:
cluster.open-cluster-management.io/placement: local-cluster
requeueAfterSeconds: 30
template:
…
apiVersion: v1
kind: ConfigMap
metadata:
name: ocm-placement
data:
apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: placementdecisions
statusListKey: decisions
matchKey: clusterName
apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: PlacementDecision
metadata:
labels:
cluster.open-cluster-management.io/placement: local-cluster
name: local-cluster-decision-1
status:
decisions:
- clusterName: cluster1
reason: ""
- clusterName: cluster2
reason: ""
KubeVela 作为停止使用广泛该软件仿真 OAM(Open Application Model) 的发挥功用,也快要借助 Placement API 顺利进行兼职输显露适时。
与原生 Kubernetes 适时仿真的区隔与密切联系?
与 Kubernetes 的静态适时相同,Placement 用到一个系统适时的组态。适时思索则会随着坦克部队属连续性转变也渐次偏离,广泛该软件可以通过在 Placement 上优化适时的稳固取值来减少适时执行者的震荡。另外,Placement API 设法将整个适时现实生活推测化,让广泛该软件可以通过 API 查询适时思索的原委,方便广泛该软件非常加难以的数据处理适时可用和参数。
同时在原生 Kubernetes 中都面的适时是一次连续性的,而在多坦克部队情景中都我们往往只能的是一个“回应式的适时” — 我们度量显露适时策略连续性的“粗大必要条件”和“硬必要条件”是什么,再行根据实际的坦克部队代数/实时状态执行者再行次匹配的坦克部队,所以它非常好像原生 Kubernetes 中都面的还击适时/反适时 PodDisruptionBudget 的仿真而非静态适时中都面的 Taint/Toleration 的仿真。
OCM 在 Placement 仿真中都面同时受制于了大规模多坦克部队适时时坦克部队此表长度暴跌的原因,在 Placement 的匹配中间体 PlacementDecision 中都面所有匹配结果都是分页展出的以避免取得成功 Kubernetes CRD 对仿真的限制。
Placement 如何为了让坦克部队?有了上述的初步简介,让我们非常深入地洞察 Placement API,就让它是如何为了让所须的坦克部队以及它可以以外哪些适时一个系统。
如下是一个 Placement 取值得注意:
apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: Placement
metadata:
name: placement
namespace: ns1
spec:
numberOfClusters: 4
clusterSets:
- clusterset1
- clusterset2
predicates:
- requiredClusterSelector:
labelSelector:
matchLabels:
vendor: OpenShift
prioritizerPolicy:
mode: Exact
configurations:
- scoreCoordinate:
builtIn: ResourceAllocatableMemory
- scoreCoordinate:
builtIn: Steady
weight: 3
- scoreCoordinate:
type: AddOn
addOn:
resourceName: default
scoreName: cpuratio
Spec 都有请注意四个文件名:
numberOfClusters: 暗示要为了让的这两项的 ManagedClusters 生产量。 clusterSets: 暗示从中都面为了让 ManagedCluster 的 ManagedClusterSet 地名。 predicates: 以外了一个大成员备选策略连续性。可以用到附加为了让筒 (labelSelector) 和回应为了让筒 (claimSelector) 来为了让 ManagedCluster。每一个备选策略连续性可用彼此之间间是或的人关系。 prioritizerPolicy: 度量了譬如说策略连续性。譬如说策略连续性中都面通过 mode 设是否用到选项的譬如说筒 (prioritizer)。同时也可以在 configurations 中都面可用完全一致的譬如说筒 (prioritizer)。目前所 Placement 内置背书的譬如说筒 (prioritizer) 以外平衡 (Balance),稳固 (Steady),仅有可相应CPU海洋资源 (ResourceAllocatableCPU) 和仅有可相应磁盘海洋资源 (ResourceAllocatableMemory)。Placement 同时也背书通过第三方以外的得分来为了让坦克部队。weight 举例来说是一个 -10 到 10 的整数,用以优化相同的譬如说筒评分对冠亚军的冲击。如果未度量 Spec 中都面各文件名的取值,则用到选项取值。每个文件名中都面选项取值的详尽信息在 PlacementSpec[5] 中都面度量。
如果 Spec 为空,所有绑定到 Placement 再一命名内部空间 (namespace) 的 ManagedClusterSet 中都面的所有 ManagedCluster 将作为有可能的选项。
以上每个文件名的度量都在适时中都面发挥着功用。如下是一个典型的适时现实生活:
适时基本首先从 clusterSets 中都面度量的 ManagedClusterSet 中都面为了让显露能用的 ManagedCluster。 过滤筒该软件 (filter plugin) 通过备选策略连续性 predicates 中都面度量的附加 (label) 和回应 (claim) 为了让筒进一步择优 ManagedCluster。 在譬如说策略连续性 prioritizerPolicy 开通的譬如说筒该软件 (prioritizer plugin) 则会为每个择优后的 ManagedCluster 打一个得分,并且按冠亚军从高到较高确认队罗列。 适时基本则会为了让前所 k 个 ManagedCluster,并把这些坦克部队罗列在 PlacementDecision 中都面。k 的取值是在 numberOfClusters 度量的坦克部队生产量。如果将以上步骤相异的上述的取值得注意中都面,适时现实生活如下:
适时基本首先为了让 ManagedClusterSet clusterset1 和 clusterset2 中都面的坦克部队作为能用的 ManagedCluster。 过滤筒该软件 (filter plugin) 择优显露带有附加 (label)vendor=OpenShift 的 ManagedCluster。 譬如说筒该软件 (prioritizer plugin)ResourceAllocatableMemory 和 Steady 为每一个择优的 ManagedCluster 评分。当可用了譬如说策略连续性 AddOn,Placement 则会设法获得坦克部队相异的第三方海洋资源以外的得分 cpuratio。并用如下恒等式计算每个 ManagedCluster 的冠亚军:1(ResourceAllocatableMemory 的选项举例来说) * ResourceAllocatableMemory 的评分 + 3(Steady 的举例来说) * Steady 的评分 + 1(AddOn 的选项举例来说) * cpuratio(AddOn 的得分)
适时基本按照每个 ManagedCluster 的冠亚军从高到较高排罗列,并返回最高得分的 ManagedCluster 作为结果。在第 3 步譬如说筒该软件兼职时,实际上多个该软件的组成员合。每个该软件的算法和举例来说都则会冲击再行次的适时结果。下一节中都面,则会非常详尽的简介每个该软件,以便你较好的洞察 Placement是如何为了让 ManagedCluster 的。
譬如说筒该软件如何兼职?在执笔此文时,我们有如下四个选项的譬如说筒:
平衡 (Balance): 平衡每个坦克部队上的适时执行者 (PlacementDecision) 生产量。以外 PlacementDecision 生产量最多的坦克部队将给予最较高分 -100 分,如果并未 PlacementDecision 则被赋予冠亚军 100 分。其他的得分介于 -100 到 100 彼此之间间。 稳固 (Steady): 确保现有的 PlacementDecision 中都面已选坦克部队的结果一直发挥功用。现有的 PlacementDecision 仍未选中都面的坦克部队将给予冠亚军 100 分,并未被选中都面的坦克部队给予最较高分 0 分。 仅有可相应 CPU 海洋资源 (ResourceAllocatableCPU) 和仅有可相应磁盘海洋资源 (ResourceAllocatableMemory) 基于坦克部队的可相应 CPU 或者磁盘想到执行者。以外最多可已足够(CPU 或者磁盘)的坦克部队将给予冠亚军 100 分,以外有约海洋资源的坦克部队将给予最较高分 -100分。其他的得分介于 -100 到 100 彼此之间间。譬如说策略连续性 AddOn 还背书通过第三方以外的得划分了让坦克部队。这部分也是 Placement 在 OCM v0.6.0 中都面的最最初一个系统。OCM v0.6.0 中都面以外了最初的 API AddOnPlacementScore 用以背书一种基于自度量得分的非常具可扩展到连续性的适时方式。
作为用到者,可以在 yaml 文件中都面 prioritizerPolicy 下可用 AddOn,来指明自度量得分以为了让坦克部队。 作为得分的以外者,第三方的掌控筒 (controller) 可以在中都面心 (Hub Cluster) 或转交大群聚 (Managed Cluster) 上行驶,controller 只能保障 AddOnPlacementScore 的一般来说并将得分非常最初到其中都面。关于可扩展到适时的非常多详尽完全一致内容,可以参照最初社区HTML[6]。
在想到显露适时执行者时,ManagedCluster 按照再行次的冠亚军选取。冠亚军是每个譬如说筒的评分乘以举例来说的总和: 冠亚军 = sum(prioritizer_x_weight * prioritizer_x_score),其中都面 prioritizer_x_weight 是譬如说筒 (prioritizer)X 的举例来说,prioritizer_x_score是譬如说筒 (prioritizer)X 为一个 ManagedCluster 打的得分。
可以通过优化譬如说筒 (prioritizer) 的举例来说来冲击再行次的得分,比如:
通过给海洋资源类型的譬如说筒 ResourceAllocatableCPU 和 ResourceAllocatableMemory 设举例来说,来基于可相应的海洋资源想到适时。 通过给海洋资源类型的譬如说筒设一个非常高的举例来说,使得适时结果对于海洋资源的转变非常加敏感性。 通过给譬如说筒 Steady 设非常高的举例来说,使得适时结果可以忽略海洋资源的转变一直发挥功用。如下是一些实际的取值得注意,来指明多个譬如说筒是如何共同兼职以给予再行次的适时结果。这些取值得注意也可以当成是在一些情景下的最佳方法论。
请注意范例中都面假设有三个转交坦克部队 (ManagedCluster) 绑定在再一命名内部空间 (namespace)ns1, 其中都面 cluster1,cluster2,cluster3 分别有 60MB,80MB 和 100MB 可相应磁盘。
范例 1:为了让很强仅有可相应磁盘的坦克部队。
在此范例中都面,想要为了让很强仅有可相应磁盘的坦克部队。为了按可相应磁盘对坦克部队顺利进行队罗列选取,可以在譬如说策略连续性 (prioritizerPolicy) 中都面可用ResourceAllocatableMemory。
apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: Placement
metadata:
name: demo
namespace: ns1
spec:
numberOfClusters: 2
prioritizerPolicy:
configurations:
- scoreCoordinate:
builtIn: ResourceAllocatableMemory
Placement建立之前,可以通过oc describe placement指示,查看events来洞察队罗列选取是如何选中都面坦克部队的。
# oc describe placement demo -n ns1
Name: demo
Namespace: ns1
Labels:
Annotations:
API Version: cluster.open-cluster-management.io/v1alpha1
Kind: Placement
…
Status:
Conditions:
Last Transition Time: 2021-11-09T07:02:14Z
Message: All cluster decisions scheduled
Reason: AllDecisionsScheduled
Status: True
Type: PlacementSatisfied
Number Of Selected Clusters: 2
Events:
Type Reason Age From Message
--- ----- --- --- ------
Normal DecisionCreate 10s placementController Decision demo-decision-1 is created with placement demo in namespace ns1
Normal DecisionUpdate 10s placementController Decision demo-decision-1 is updated with placement demo in namespace ns1
Normal ScoreUpdate 10s placementController cluster1:0 cluster2:100 cluster3:200
在这个取值得注意中都面,在 Additive 模式下,譬如说筒以外了选项举例来说为 1 的 Balance 和 Steady 以及推测可用了举例来说为 1 的 ResourceAllocatableMemory。一个坦克部队的再行次得分将由如下恒等式决定:
1 * prioritizer_balance_score + 1 * prioritizer_steady_score + 1 * prioritizer_resourceallocatablememory_score
从上面的 event 中都面可以看显露来,cluster1 最高划分 0,cluster2 最高划分 100,cluster3 最高划分 200。适时结果必要为了让 cluster2 和 cluster3。
可以通过 oc describe placementdecision 指示来验证适时结果,如下:
# oc describe placementdecision demo-decision-1 -n ns1
Name: demo-decision-1
Namespace: ns1
Labels: cluster.open-cluster-management.io/placement=placement-jkd42
Annotations:
API Version: cluster.open-cluster-management.io/v1alpha1
Kind: PlacementDecision
Status:
Decisions:
Cluster Name: cluster2
Reason:
Cluster Name: cluster3
Reason:
Events:
可以看到,在 PlacementDecision 的 status 中都面,cluster2 和 cluster3 被罗列在其中都面。
让我们设法去掉一个最初的坦克部队,并且这个坦克部队上都有著比被选中都面坦克部队高显露一些的可相应磁盘。
Placement 适时筒则会警卫 (watch) 转交坦克部队。一旦有海洋资源转变,将接踵而来重最初适时。以前所,让我们起先去掉一个有 100MB 可相应磁盘的最初坦克部队 cluster4,同时安全检查 Placement 中都面的暴力事件 (event)。
# oc describe placement demo -n ns1
Events:
Type Reason Age From Message
--- ----- --- --- ------
Normal DecisionCreate 100s placementController Decision demo-decision-1 is created with placement demo in namespace ns1
Normal DecisionUpdate 100s placementController Decision demo-decision-1 is updated with placement demo in namespace ns1
Normal ScoreUpdate 100s placementController cluster1:0 cluster2:100 cluster3:200
可以看到并并未暴力事件非常最初,适时结果也并未发生转变。所以当我们去掉一个意味着比 cluster2 的磁盘高显露 20MB 的 cluster4 时,适时结果并不则会被冲击。
让我们设法去掉一个最初的坦克部队,并且这个坦克部队上都有著比被选中都面坦克部队高显露很多的可相应磁盘。
以前所,让我们起先去掉一个有 150MB 可相应磁盘的最初坦克部队 cluster4,同时再行次安全检查 Placement 中都面的暴力事件 (event)。
# oc describe placement demo -n ns1
Events:
Type Reason Age From Message
--- ----- --- --- ------
Normal DecisionCreate 2m10s placementController Decision demo-decision-1 is created with placement demo in namespace ns1
Normal DecisionUpdate 2m10s placementController Decision demo-decision-1 is updated with placement demo in namespace ns1
Normal ScoreUpdate 2m10s placementController cluster1:0 cluster2:100 cluster3:200
Normal DecisionUpdate 3s placementController Decision demo-decision-1 is updated with placement demo in namespace ns1
Normal ScoreUpdate 3s placementController cluster1:200 cluster2:145 cluster3:189 cluster4:200
这一次,适时结果非常最初了,Placement 被重最初适时到了 cluster3 和 cluster4 上。
# oc describe placementdecision demo-decision-1 -n ns1
Status:
Decisions:
Cluster Name: cluster3
Reason:
Cluster Name: cluster4
Reason:
在上面这个取值得注意中都面,当海洋资源只发生了少许转变时,适时结果并不则会被冲击。而当海洋资源发生较为大的转变时,转变则会赶紧底物在适时结果中都面。这样便引发显露如下 2 个过关斩将:
如果想要适时结果对海洋资源转变一直保持敏感性,必要怎么想到? 如果想要适时结果一直发挥功用,忽略海洋资源的转变,必要怎么想到?还忘记我们在 prioritizerPolicy 中都面有 4 个譬如说筒并且可以优化他们的举例来说吗?我们可以通过删减 prioritizerPolicy 的可用来补救上面两个原因。
范例 2:为了让很强仅有可相应磁盘的大群聚,并使 Placement 对海洋资源转变一直保持敏感性。
为了使适时结果对海洋资源的转变敏感性,这次我们显式设了譬如说筒 ResourceAllocatableMemory,举例来说为 3。
apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: Placement
metadata:
name: placement7
namespace: ns1
spec:
numberOfClusters: 2
prioritizerPolicy:
configurations:
- scoreCoordinate:
builtIn: ResourceAllocatableMemory
weight: 3
当 Placement 建立好之前,让我们通过 oc describe 指示来安全检查 Placement 和 PlacementDecision 的结果。
# oc describe placement demo -n ns1
Status:
Conditions:
Last Transition Time: 2021-11-09T08:58:40Z
Message: All cluster decisions scheduled
Reason: AllDecisionsScheduled
Status: True
Type: PlacementSatisfied
Number Of Selected Clusters: 2
Events:
Type Reason Age From Message
--- ----- --- --- ------
Normal DecisionCreate 35s placementController Decision demo-decision-1 is created with placement demo in namespace ns1
Normal DecisionUpdate 35s placementController Decision demo-decision-1 is updated with placement demo in namespace ns1
Normal ScoreUpdate 35s placementController cluster1:-200 cluster2:100 cluster3:400
# oc describe placementdecision demo-decision-1 -n ns1
Status:
Decisions:
Cluster Name: cluster2
Reason:
Cluster Name: cluster3
Reason:
初始的适时结果为 cluster2 和 cluster3。以前所,让我们起先再行次转到一个有 100MB 可相应磁盘的坦克部队,然后安全检查 Placement 暴力事件。
# oc describe placement demo -n ns1
Events:
Type Reason Age From Message
--- ----- --- --- ------
Normal DecisionCreate 3m1s placementController Decision demo-decision-1 is created with placement demo in namespace ns1
Normal DecisionUpdate 3m1s placementController Decision demo-decision-1 is updated with placement demo in namespace ns1
Normal ScoreUpdate 3m1s placementController cluster1:-200 cluster2:100 cluster3:400
Normal DecisionUpdate 2s placementController Decision demo-decision-1 is updated with placement demo in namespace ns1
Normal ScoreUpdate 2s placementController cluster1:-200 cluster2:200 cluster3:500 cluster4:400
这一次,PlacementDecision 非常最初了,并且结果重最初适时到了 cluster3 和 cluster4。
# oc describe placementdecision demo-decision-1 -n ns1
Status:
Decisions:
Cluster Name: cluster3
Reason:
Cluster Name: cluster4
Reason:
范例 3:为了让很强仅有可相应磁盘的坦克部队并稳固适时结果。
为了使适时结果一直发挥功用,这次我们显式设了譬如说筒 Steady,并且设举例来说为 3。
apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: Placement
metadata:
name: demo
namespace: ns1
spec:
numberOfClusters: 2
prioritizerPolicy:
configurations:
- scoreCoordinate:
builtIn: ResourceAllocatableMemory
- scoreCoordinate:
builtIn: Steady
weight: 3
Placement 建立好之前,再行次通过 oc describe 指示来安全检查 Placement 和 PlacementDecision 的结果。
# oc describe placement demo -n ns1
Status:
Conditions:
Last Transition Time: 2021-11-09T09:05:36Z
Message: All cluster decisions scheduled
Reason: AllDecisionsScheduled
Status: True
Type: PlacementSatisfied
Number Of Selected Clusters: 2
Events:
Type Reason Age From Message
--- ----- --- --- ------
Normal DecisionCreate 15s placementController Decision demo-decision-1 is created with placement demo in namespace ns1
Normal DecisionUpdate 15s placementController Decision demo-decision-1 is updated with placement demo in namespace ns1
Normal ScoreUpdate 15s placementController cluster1:0 cluster2:100 cluster3:200
# oc describe placementdecision demo-decision-1 -n ns1
Status:
Decisions:
Cluster Name: cluster2
Reason:
Cluster Name: cluster3
Reason:
初始的适时结果为 cluster2 和 cluster3。
以前所,让我们起先再行次转到一个有 150MB 可相应磁盘的坦克部队,然后安全检查 Placement 暴力事件。这一次 event 并并未非常最初。
# oc describe placement demo -n ns1
Events:
Type Reason Age From Message
--- ----- --- --- ------
Normal DecisionCreate 80s placementController Decision demo-decision-1 is created with placement demo in namespace ns1
Normal DecisionUpdate 80s placementController Decision demo-decision-1 is updated with placement demo in namespace ns1
Normal ScoreUpdate 80s placementController cluster1:0 cluster2:100 cluster3:200
再行次安全检查 PlacementDecision,可以看到适时结果并并未转变,固定在了 cluster2 和 cluster3。
# oc describe placementdecision demo-decision-1 -n ns1
Status:
Decisions:
Cluster Name: cluster2
Reason:
Cluster Name: cluster3
Reason:
在前所面的三个范例中都面,我们展出了多个譬如说筒是如何协同兼职的,以及如何通过优化每个譬如说筒的举例来说来冲击再行次执行者。在用到中都面,你也可以按须求设法优化举例来说或非常改已开通的譬如说筒。
总结通过本文,你可以洞察到如何在相同的广泛应用情景下用到 Placement API。这篇名解释了什么是 Placement 以及它如何和一些主流的开源新项目配合用到。简介了 Placement 如何为了让坦克部队,以及通过一些范例展出多个譬如说筒是如何共同兼职并想到显露适时执行者的。在文章的先前所,以外了一些范例来展出最佳方法论。欢迎随时在 open-cluster-management-io GitHub 最初社区[7]中都面提显露批评原因,或用到 Slack[8]与我们密切联系,同时转到我们的 Google Groups 以浏览我们的每半年最初社区则会议。
未来我们将在 OCM 中都看到非常多结合 OCM 见习适时能力的其他见习一个系统模块,比如多坦克部队 Workload 适时/容灾等等。
相关链接
[1] Open Cluster Management 0.6 公布:
[2] OCM 最初社区:
[3] ManagedCluster 和 ManagedClusterSet:
[4] Placement:
[5] PlacementSpec:
[6] 最初社区HTML:
[7] open-cluster-management-io GitHub 最初社区:
[8] Slack:
参照:
本文为阿中都云原创完全一致内容,未经必须不得转载。
。河南不孕不育医院哪里好郑州看白癜风去哪家医院
天津妇科专科医院哪好
新乐敦和乐珠都可以治疗眼涩吗
辽宁男科医院哪家比较好
- 05-12想要在职场上取得胜利,更进一步……
- 05-12到底什么是雷电适配器,这个适配器有什么用?
- 05-12曾是《爱情住宅》林宛瑜,如今摆脱骨感,逆袭成功,网友:惊艳了
- 05-12快讯:草药板块继续活跃
- 05-12在空难现场,伤员可能会被分成4种颜色?医生:懂点急救知识很重要
- 05-12王者12号更新,吕布新机甲海报二选一,郃宝马疑似返场
- 05-12仅有最后1天,选国债逆回购还是货币基金?春节假期“躺赚”指南来了!
- 05-12(经济)赞比亚财长表示赞比亚财政状况前景改善
- 05-12四季如何科学保健?
- 05-12【天治晨报1月27日】A股股价总结