协调策略

Config Connector 具有最终一致性

借助声明式配置,您可以定义系统期望的状态。然后,系统会持续工作以尽可能保持接近此状态。如需了解详情,请参阅使用配置文件对 Kubernetes 对象进行声明式管理

借助 Config Connector,您可以按任意顺序创建和更新资源,而不管依赖关系如何。GKE 将声明的配置移向具有期望状态的最终一致性

例如,如果您在相应的 PubSubTopic 之前创建 PubSubSubscription,则 Config Connector 会等到主题创建之后再创建关联的订阅。

Config Connector 安装保持不一致的时长取决于它管理的资源的数量和类型。更改 GKE 集群只需要几秒钟。但是,创建 Google Cloud 资源所需的时间根据资源的类型而有所不同。例如,创建单个 PubSubTopic 花费只需几秒钟。Google Cloud 资源在创建之后才能达成一致性。例如,当创建 SQLInstanceSQLDatabase 时,在创建数据库的过程中,系统会有几分钟处于不一致状态。

GKE 和 Config Connector 会在每次更新时或平均时长为 10 分钟的抖动期之后对每个资源进行协调。当协调出错时,Config Connector 会使用指数退避算法重试,其中最大退避时间为两分钟。您可以在查看给定资源的事件中查看所有错误。

可变但无法读取的字段仅在更改后生效

某些 API 会公开看不清但可变的字段(如 SQL 用户的密码)。由于无法查看这些字段是否已修改,因此只有当自定义资源被修改时,可变但不可读的字段才会更新。

修改不可变字段时,不会重新创建资源

资源中的某些字段是不可变的,如不删除然后重新创建目标资源,则无法进行协调。

在这些情况下,Config Connector 将为该资源发出“UpdatedFailed”Kubernetes 事件,而不是执行此重新创建操作。然后,用户必须删除并重新创建资源。

事件示例

Warning  UpdateFailed  37m (x643 over 15d)    computeinstance-controller  Update call failed: the desired mutation for the following field(s) is invalid: [bootDisk.0.InitializeParams.0.Image networkInterface.0.NetworkIp]