Config Connector 最佳实践
本页介绍了在使用 Config Connector 时应考虑的最佳实践。
管理 API 配额限制
如果您遇到错误,表明已超出 API 配额限制,则您可能在同一配额项目下创建了过多的同类 Config Connector 资源。由于 Config Connector 使用的协调策略,当您创建大量资源时,这些资源可能会针对同一 API 端点生成过多的 API 请求。
解决此问题的一种方法是申请增加配额。除了增加配额之外,如果您已确认配额错误是由针对 Config Connector 资源管理的资源发出的 GET 请求导致的,则可以考虑以下任一选项: Google Cloud
延长对账间隔
您可以延长 Config Connector 对资源进行协调的时间,以免超出 API 配额。建议将对账间隔设置为 1 小时。
如需延长对账间隔,请按照配置对账间隔中的步骤操作。
将资源拆分到多个项目中
这种方法会将 Config Connector 资源分散到不同的项目中。在添加新资源时,此方法非常适用,但拆分现有资源可能会有风险,因为您需要删除现有资源,然后在其他项目下重新创建这些资源。删除资源可能会导致某些类型的资源(例如 SpannerInstance
或 BigtableTable
资源)的数据丢失。您应先备份数据,然后再将其删除。
如需将现有 Config Connector 资源拆分到不同的项目中,请完成以下步骤:
- 确定您计划将哪些 Config Connector 资源迁移到其他项目。
- 删除 Config Connector 资源。确保
cnrm.cloud.google.com/deletion-policy
注解未设置为abandon
。 - 更新您计划迁移到新项目的 Config Connector 资源的 YAML 配置中的
spec.projectRef
字段或cnrm.cloud.google.com/project-id
注解。 - 向 Config Connector 使用的 IAM 服务账号授予对新项目的适当权限。
- 应用更新后的 YAML 配置以创建 Config Connector 资源。
切换到命名空间模式
您可以将不同Google Cloud 项目拥有的不同 IAM 服务账号绑定到以命名空间模式安装 Config Connector 的不同命名空间,并将资源拆分到不同的命名空间。为此,请完成以下步骤:
将 Config Connector 配置为在命名空间模式下运行。从不同的项目创建新的 IAM 服务账号,并按照为每个项目配置 Config Connector 的说明将其绑定到不同的命名空间。
向新的 IAM 服务账号授予对包含资源的项目的适当权限。
确定您计划将哪些 Config Connector 资源移至其他命名空间。
更新 Config Connector 资源的 YAML 配置,并设置
cnrm.cloud.google.com/deletion-policy
注解abandon
。应用更新后的 YAML 配置,以更新 Config Connector 资源的删除政策。
更新您计划移至其他命名空间的 Config Connector 资源的 YAML 配置中的
metadata.namespace
字段。应用更新后的 YAML 配置以获取被废弃的资源。
管理 GKE 集群中的节点池
如果您在 Config Connector 中应用 ContainerCluster
资源创建集群,然后尝试通过应用更新后的 ContainerCluster
配置来更新 nodeConfig
或其他与节点相关的字段,则可能会遇到错误。这些错误是由于 nodeConfig
、nodeConfig.labels
、nodeConfig.taint
等不可变字段而导致的,这是底层 Google Cloud API 的技术限制。
如果您需要更新这些字段,可以使用 ContainerNodePool
资源来管理这些字段可更改的节点池。如需使用 ContainerNodePool
资源管理节点池,您必须指定注解 cnrm.cloud.google.com/remove-default-node-pool: "true"
。此注解会移除在创建集群期间创建的默认节点池。然后,如需创建单独的节点池,请在 ContainerNodePool
中(而非 ContainerCluster
中)指定 nodeConfig
字段。如需参考信息,请参阅 ContainerNodePool
资源示例。
您应为 ContainerCluster
和 ContainerNodePool
资源设置注解 cnrm.cloud.google.com/state-into-spec: absent
。此注解可避免在 Config Connector 控制器与底层 API 交互期间出现潜在的协调错误。
以下示例展示了设置了这些注解的 ContainerCluster
和 ContainerNodePool
配置:
apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerCluster metadata: name: containercluster-sample annotations: cnrm.cloud.google.com/remove-default-node-pool: "true" cnrm.cloud.google.com/state-into-spec: absent spec: description: A sample cluster. location: us-west1 initialNodeCount: 1
apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerNodePool metadata: labels: label-one: "value-one" name: containernodepool-sample annotations: cnrm.cloud.google.com/state-into-spec: absent spec: location: us-west1 autoscaling: minNodeCount: 1 maxNodeCount: 3 nodeConfig: machineType: n1-standard-1 preemptible: false oauthScopes: - "https://www.googleapis.com/auth/logging.write" - "https://www.googleapis.com/auth/monitoring" clusterRef: name: containercluster-sample