同步
概述
同步是 EKS 和 GKE 集群的功能,它使 Rancher 更新集群的值,使它们与托管的 Kubernetes 提供商中的相应集群对象保持一致。这使得 Rancher 不是托管集群状态的唯一所有者。其最大的局限性是,在同一时间或在 5 分钟内处理来自 Rancher 和另一个来源的更新,可能会导致一个来源的状态完全覆盖另一个来源。
工作原理
在 Rancher Cluster 对象上有两个字段,要理解同步是如何工作的,必须了解。
集群的配置对象,位于集群的 Spec 上。
- 对于 EKS,该字段被称为 EKSConfig
- 对于 GKE,该字段被称为 GKEConfig。
2.上游规格(UpstreamSpec)对象
- 对于 EKS,它位于集群状态的 EKSStatus 字段上。
- 对于 GKE,它位于集群状态的 GKEStatus 字段上。
定义这些对象的结构类型可以在其相应的操作者项目中找到。
除了集群名称、位置(地区或区域)、导入和云凭证参考之外,所有字段都可以在这个 Spec 对象上填写。
EKSConfig 或 GKEConfig 代表其非零值的期望状态。配置对象中非零的字段可以被认为是 “管理的”。当一个集群在 Rancher 中被创建时,所有字段都是非空的,因此是 “被管理的”。当一个预先存在的集群在 Rancher 中注册时,所有可忽略的字段都是空的,不是 “被管理的”。一旦 Rancher 改变了这些字段的值,这些字段就会成为被管理的。
UpstreamSpec 代表集群在托管的 Kubernetes 提供商中的情况,并以 5 分钟的时间间隔刷新。在 UpstreamSpec 被刷新后,Rancher 会检查集群是否有更新在进行。如果它正在更新,则不做任何进一步处理。如果它目前没有更新,EKSConfig 或 GKEConfig 上的任何 “管理 “字段都会被最近更新的 UpstreamSpec 上的相应值覆盖。
有效的期望状态可以被认为是 UpstreamSpec + EKSConfig 或 GKEConfig 中所有非零字段。这就是在用户界面中显示的内容。
如果 Rancher 和另一个来源试图在同一时间或在更新完成后的 5 分钟刷新窗口内更新集群,那么任何 “被管理 “的字段都有可能被卷入竞争条件。以 EKS 为例,一个集群可能有 PrivateAccess 作为一个受管字段。如果 PrivateAccess 是假的,然后在 EKS 控制台中启用,然后在 11:01 完成,然后在 11:05 之前从 Rancher 更新标签,该值可能会被覆盖。如果标签在集群处理更新时被更新,这也会发生。如果集群已经注册,并且 PrivateAccess 字段为零,那么在上述情况下,这个问题应该不会发生。