Config Connector 最佳实践


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

管理 API 配额限制

如果您遇到错误,表明已超出 API 配额限制,则可能是因为您在同一配额项目下创建了过多的同类 Config Connector 资源。当您创建大量资源时,这些资源可能会生成过多的 API 向同一个 API 端点发送请求,因为 对账策略 Config Connector 所用的资源

解决此问题的一种方法是申请增加配额。除了配额之外 如果您确认配额错误是由 GET 请求导致的 (针对由 Config Connector 管理的 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 项目复制到 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. 更新 YAML 配置中的 metadata.namespace 字段, 您计划移动到其他命名空间的 Config Connector 资源。

  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