协调策略
借助声明式配置,您可以定义系统期望的状态。然后,系统会持续工作以尽可能保持接近此状态。请参阅 使用配置文件对 Kubernetes 对象进行声明式管理 。
借助 Config Connector,您可以按任意顺序创建和更新资源,而不管依赖关系如何。GKE 会将声明的配置移向具有期望状态的最终一致性。
例如,如果您在相应的 PubSubTopic
之前创建 PubSubSubscription
,则 Config Connector 会等到主题创建之后再创建关联的订阅。
Config Connector 安装保持不一致的时长取决于它管理的资源的数量和类型。对 GKE 的更改
通常在几秒钟内执行完毕。但是,创建 Google Cloud 资源所需的时间根据资源的类型而有所不同。对于
例如,创建单个 PubSubTopic
需要几秒钟时间。Google Cloud
资源在创建之前不会保持一致。例如,当
创建 SQLInstance
和 SQLDatabase
,则系统在对
持续几分钟。
GKE 和 Config Connector 更新或在抖动期过后,显示基于预配置默认值的平均值 。您可以在“Config Connector 默认平均值”中找到默认时间间隔 协调间隔(以秒为单位)从每个资源的参考页面获取。 如需各项资源的链接,请参阅资源概览。 当协调出错时,Config Connector 会使用指数退避算法重试,其中最大退避时间为两分钟。您可以在 事件 特定资源
配置协调间隔
从 Config Connector 1.102 开始,您可以使用 cnrm.cloud.google.com/reconcile-interval-in-seconds
注解为 Config Connector 管理的资源配置平均协调间隔。注释的值会覆盖资源引用页面中的“Config Connector 默认平均协调间隔(以秒为单位)”的默认值。注释的值应为一个非负整数,表示以秒为单位的时间。如果此值设置为 0,则一旦资源达到 UpToDate 状态,Config Connector 就会停止为该资源启动协调。
例如,如果您希望 Config Connector 降低对资源的协调频率,以避免对底层 Google Cloud 服务造成影响 API 配额问题,您可以将平均协调间隔值设置为 1 小时。
cnrm.cloud.google.com/reconcile-interval-in-seconds: "3600"
如果您希望 Config Connector 更频繁地对资源进行协调,以便更快地修正偏差,可以为注解设置较小的值。
您可以使用以下脚本为共享相同组版本类型 (GVK) 的特定类型的所有资源添加注解:
#!/bin/bash
KIND=RESOURCE_KIND
NAMESPACE=RESOURCE_NAMESPACE
ANNOTATION_KEY="cnrm.cloud.google.com/reconcile-interval-in-seconds"
ANNOTATION_VALUE=RECONCILE_INTERVAL
kubectl annotate --overwrite --all ${KIND} ${ANNOTATION_KEY}=${ANNOTATION_VALUE} -n ${NAMESPACE}
echo "Annotation added to all ${KIND} RESOURCE"
替换以下内容:
RESOURCE_KIND
:您要添加注释的资源种类。RESOURCE_NAMESPACE
:包含要添加注释的资源的命名空间。RECONCILE_INTERVAL
:协调间隔(以秒为单位)。
您可以将协调间隔设置为 0 以停用资源的偏移校正,但不会停用资源执行功能。如果您对资源 Spec
进行了更改,系统将再次对该资源进行对账。
将协调间隔时间设置为 0 是不可逆的。这意味着将值改回非零数字不会使 Config Connector 再次对资源进行协调。
如果您想还原为 0 的对账间隔,可以使用以下选项:
- 使用调节间隔值修改资源规范,以启用新的调节。
- 通过设置注解
cnrm.cloud.google.com/deletion-policy: "abandon"
舍弃资源,并使用协调间隔值(0 以外的值)重新创建资源。
可变但无法读取的字段仅在更改后生效
某些 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]