Config Connector 最佳实践


本页介绍了在使用 Config Connector 时应考虑的最佳实践。

管理 API 配额限制

如果您遇到错误,表明已超出 API 配额限制,则您可能在同一配额项目下创建了过多的同类 Config Connector 资源。由于 Config Connector 使用的协调策略,当您创建大量资源时,这些资源可能会针对同一 API 端点生成过多的 API 请求。

解决此问题的一种方法是申请增加配额。除了增加配额之外,如果您已确认配额错误是由针对 Config Connector 资源管理的资源发出的 GET 请求导致的,则可以考虑以下任一选项: Google Cloud

延长对账间隔

您可以延长 Config Connector 对资源进行协调的时间,以免超出 API 配额。建议将对账间隔设置为 1 小时。

如需延长对账间隔,请按照配置对账间隔中的步骤操作。

将资源拆分到多个项目中

这种方法会将 Config Connector 资源分散到不同的项目中。在添加新资源时,此方法非常适用,但拆分现有资源可能会有风险,因为您需要删除现有资源,然后在其他项目下重新创建这些资源。删除资源可能会导致某些类型的资源(例如 SpannerInstanceBigtableTable 资源)的数据丢失。您应先备份数据,然后再将其删除。

如需将现有 Config Connector 资源拆分到不同的项目中,请完成以下步骤:

  1. 确定您计划将哪些 Config Connector 资源迁移到其他项目。
  2. 删除 Config Connector 资源。确保 cnrm.cloud.google.com/deletion-policy 注解未设置为 abandon
  3. 更新您计划迁移到新项目的 Config Connector 资源的 YAML 配置中的 spec.projectRef 字段或 cnrm.cloud.google.com/project-id 注解。
  4. 向 Config Connector 使用的 IAM 服务账号授予对新项目的适当权限。
  5. 应用更新后的 YAML 配置以创建 Config Connector 资源

切换到命名空间模式

您可以将不同Google Cloud 项目拥有的不同 IAM 服务账号绑定到以命名空间模式安装 Config Connector 的不同命名空间,并将资源拆分到不同的命名空间。为此,请完成以下步骤:

  1. 将 Config Connector 配置为在命名空间模式下运行。从不同的项目创建新的 IAM 服务账号,并按照为每个项目配置 Config Connector 的说明将其绑定到不同的命名空间。

  2. 向新的 IAM 服务账号授予对包含资源的项目的适当权限。

  3. 确定您计划将哪些 Config Connector 资源移至其他命名空间。

  4. 更新 Config Connector 资源的 YAML 配置,并设置 cnrm.cloud.google.com/deletion-policy 注解 abandon

  5. 应用更新后的 YAML 配置,以更新 Config Connector 资源的删除政策。

  6. 放弃 Config Connector 资源

  7. 更新您计划移至其他命名空间的 Config Connector 资源的 YAML 配置中的 metadata.namespace 字段。

  8. 应用更新后的 YAML 配置以获取被废弃的资源

管理 GKE 集群中的节点池

如果您在 Config Connector 中应用 ContainerCluster 资源创建集群,然后尝试通过应用更新后的 ContainerCluster 配置来更新 nodeConfig 或其他与节点相关的字段,则可能会遇到错误。这些错误是由于 nodeConfignodeConfig.labelsnodeConfig.taint 等不可变字段而导致的,这是底层 Google Cloud API 的技术限制。

如果您需要更新这些字段,可以使用 ContainerNodePool 资源来管理这些字段可更改的节点池。如需使用 ContainerNodePool 资源管理节点池,您必须指定注解 cnrm.cloud.google.com/remove-default-node-pool: "true"。此注解会移除在创建集群期间创建的默认节点池。然后,如需创建单独的节点池,请在 ContainerNodePool 中(而非 ContainerCluster 中)指定 nodeConfig 字段。如需参考信息,请参阅 ContainerNodePool 资源示例

您应为 ContainerClusterContainerNodePool 资源设置注解 cnrm.cloud.google.com/state-into-spec: absent。此注解可避免在 Config Connector 控制器与底层 API 交互期间出现潜在的协调错误。

以下示例展示了设置了这些注解的 ContainerClusterContainerNodePool 配置:

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