安装 Config Sync

借助 Config Sync,您可以使用存储在可靠来源中的配置文件来管理 Kubernetes 资源。Config Sync 支持使用 Git 代码库、OCI 映像和 Helm 图表作为可靠来源。本页面介绍如何启用和配置 Config Sync,以便它可以从根代码库同步。Config Sync 适用于 Google Kubernetes Engine (GKE) Enterprise 版本。

当您使用 Google Cloud 控制台或 Google Cloud CLI 安装 Config Sync 时,系统会默认启用 RootSyncRepoSync API。这为您提供其他功能,例如从多个代码库同步以及同步 Kustomize 和 Helm 配置

准备工作

在安装 Config Sync 之前,请准备您的环境,确保满足集群要求并授予适当的用户角色。

准备本地环境

通过完成以下任务来准备本地环境:

  1. 创建可靠来源或确保您有权访问可靠来源。您可以在此处添加 Config Sync 同步到的配置。如需详细了解如何设置配置和可靠来源,请参阅以下指南之一:
  2. 安装并初始化 Google Cloud CLI,它提供了 gcloudnomos 命令。如果您使用 Cloud Shell,则系统会预安装 Google Cloud CLI。 如果您之前安装了 Google Cloud CLI,请运行 gcloud components update 以获取最新版本。
  3. 启用 GKE Enterprise API

    启用 GKE Enterprise API

集群要求

如需使用 Config Sync,您的集群必须满足以下要求:

  • 必须是 Google Kubernetes Engine (GKE) Enterprise 版本支持的平台和版本

  • (可选)如果您使用 GKE 集群,请确保已启用 Workload Identity。Autopilot 集群默认启用 Workload Identity。

  • 拥有正确的指标写入权限,以便 Config Sync 可以将指标发送到 Cloud Monitoring。

  • 如果您要自动升级 Config Sync 版本,请确保您的 GKE 集群已在发布渠道中注册。Config Sync 将不使用 GKE 发布渠道的集群视为使用稳定发布渠道。

  • 如果您要使用专用 GKE 集群,请配置 Cloud NAT 以允许来自专用 GKE 节点的出站流量。如需了解详情,请参阅GKE 设置示例。或者,您可以启用专用 Google 访问通道,以连接到 Google API 和服务使用的外部 IP 地址集。

  • 如果您要在向 Config Sync 授予对可靠来源的访问权限时使用 IAM 服务账号,则必须在 Cloud Source Repositories 集群节点的访问权限范围中包含只读范围。

    如需添加只读范围,您可以在创建集群时指定的 --scopes 列表中包含 cloud-source-repos-ro,或在创建集群时使用 cloud-platform 范围。例如:

    gcloud container clusters create CLUSTER_NAME --scopes=cloud-platform
    

    创建节点池后,您将无法修改访问权限范围。但是,您可以在使用同一集群时创建具有适当访问权限范围的新节点池。默认的 gke-default 范围不包含 cloud-source-repos-ro

  • 如果您有严格的 VPC 防火墙要求,旨在阻止任何不必要的流量,则需要创建防火墙规则以允许公共 GKE 集群上的以下流量:

    • TCP:允许端口 53 和 443 上的入站流量和出站流量

    • UDP:允许端口 53 上的出站流量

    如果您未添加这些规则,Config Sync 将无法正确同步,并且 nomos status 会报告以下错误:

    Error: KNV2004: unable to sync repo Error in the git-sync container

    如果使用专用 GKE 集群,则可以跳过这些步骤。

  • Config Sync 必须在 amd64 节点池上运行。只会针对 amd64 机器架构构建、分发和测试 Config Sync 后端组件容器映像。如果 Config Sync 组件已调度到 Arm 节点上,它会遇到 exec format 错误并崩溃。

    如果您的集群中有 Arm 节点,请将一个或多个 amd64 节点添加到集群;如果您未使用 GKE 集群,请将污点添加到 arm64 节点,以避免在没有特定容忍的情况下将 Pod 调度到 arm64 节点上。GKE arm 节点已有默认污点,因此您无需添加污点。

如果您的集群是 Autopilot 集群,您还应注意,Autopilot 会调整容器资源要求以满足以下规则:

由于存在这些规则,因此对于 Autopilot 集群,Config Sync 会:

  • 调整用户指定的资源替换限制以匹配请求
  • 只有当存在一个或多个资源请求值大于注释中声明的相应调整输出值,或当存在一个或多个资源请求值小于注释中声明的相应输入值时,系统才会应用替换值。

准备集群

创建合适的集群后,请完成以下步骤:

  1. 将所需的 IAM 角色授予注册集群的用户

  2. 如果您计划使用 Google Cloud CLI 配置 Config Sync 或使用 Google Cloud 外部的集群,请确保 GKE 集群Google Cloud 外部的集群现在已注册到舰队。如果您计划使用 Google Cloud 控制台,则可以在配置 Config Sync 时注册 GKE 集群。

安装 Config Sync

在以下部分中,您将向 Config Sync 授予对以下可靠来源之一的访问权限:

授予访问权限后,您可以配置 Config Sync

授予对 Git 的访问权限

Config Sync 需要 Git 代码库的只读权限,以便读取提交到代码库的配置,并将其应用到您的集群。

如果您的代码库无需进行身份验证即可提供只读权限,您可以继续配置 Config Sync 并使用 none 作为身份验证类型。例如,如果您无需登录即可使用网页界面浏览代码库,或者如果您可以使用 git clone 在本地创建代码库的克隆而无需提供凭据或使用已保存的凭据,则无需进行身份验证。在这种情况下,您不需要创建 Secret。

不过,大多数用户都需要创建凭据,因为对其代码库的读取权限会受到限制。如果需要凭据,则凭据会存储在每个注册集群的 git-creds Secret 中(除非您使用的是 Google 服务账号)。Secret 必须是命名 git-creds,因为这是一个固定值。

Config Sync 支持以下身份验证机制:

  • SSH 密钥对 (ssh)
  • Cookiefile (cookiefile)
  • 令牌 (token)
  • Google 服务账号 (gcpserviceaccount)
  • Compute Engine 默认服务账号 (gcenode)

您选择的机制取决于您的代码库支持的内容。通常,我们推荐您使用 SSH 密钥对。GitHub 和 Bitbucket 都支持使用 SSH 密钥对。但是,如果您使用的是 Cloud Source Repositories 中的代码库,我们建议您使用 Google 服务账号,因为其流程更简单。如果您的组织托管代码库,并且您不知道其支持哪些身份验证方法,请与您的管理员联系。

如需将 Cloud Source Repositories 中的代码库用作 Config Sync 代码库,请完成以下步骤以检索 Cloud Source Repositories 网址:

  1. 列出所有代码库:

    gcloud source repos list
    
  2. 在输出中,复制您要使用的代码库的网址。例如:

    REPO_NAME  PROJECT_ID  URL
    my-repo    my-project  https://source.developers.google.com/p/my-project/r/my-repo-csr
    

    在下一部分中配置 Config Sync 时,您需要使用此网址。如果您使用 Google Cloud 控制台配置 Config Sync,请在网址字段中添加该网址。如果您使用 Google Cloud CLI 配置 Config Sync,请将网址添加到配置文件的 syncRepo 字段中。

SSH 密钥对

SSH 密钥对由两个文件组成,即公钥和私钥。公钥通常具有 .pub 扩展名。

要使用 SSH 密钥对,请完成以下步骤:

  1. 创建 SSH 密钥对,以允许 Config Sync 向您的 Git 代码库进行身份验证。如果您需要向代码库验证身份以克隆代码库或从中读取内容,则需要执行此步骤。如果安全管理员为您提供密钥对,请跳过此步骤。您可以对所有集群使用一个密钥对,也可以对每个集群各使用一个密钥对,具体取决于您的安全性和合规性要求。

    以下命令会创建 4096 位 RSA 密钥。建议不要使用较小的值:

    ssh-keygen -t rsa -b 4096 \
    -C "GIT_REPOSITORY_USERNAME" \
    -N '' \
    -f /path/to/KEYPAIR_FILENAME
    

    替换以下内容:

    • GIT_REPOSITORY_USERNAME:您希望 Config Sync 用于向代码库进行身份验证的用户名
    • /path/to/KEYPAIR_FILENAME:密钥对的路径

    如果您使用的是第三方 Git 代码库主机(如 GitHub),或者想要将服务账号用于 Cloud Source Repositories,我们建议您使用一个单独的账号。

  2. 配置您的代码库以识别新创建的公钥。 请参阅 Git 托管服务提供商的文档。为方便起见,我们提供了一些常用的 Git 托管服务提供商的说明:

  3. 将私钥添加到集群中的新 Secret:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
    

    /path/to/KEYPAIR_PRIVATE_KEY_FILENAME 替换为私钥(即不含 .pub 后缀的密钥)的名称。

  4. (推荐)如需使用 SSH 身份验证配置已知主机检查,您可以将已知主机密钥添加到 git_creds Secret 中的 data.known_hosts 字段。如需停用 known_hosts 检查,您可以从 Secret 中移除 known_hosts 字段。如需添加已知主机密钥,请运行以下命令:

    kubectl edit secret git-creds \
     --namespace=config-management-system
    

    然后,在 data 下添加已知主机条目:

    known_hosts: KNOWN_HOSTS_KEY
    
  5. 从本地磁盘中删除私钥或以其他方式保护私钥。

  6. 配置 Config Sync 并添加 Git 代码库的网址时,请使用 SSH 协议。如果您使用的是 Cloud Source Repositories 中的代码库,则必须在输入网址时使用以下格式:

    ssh://EMAIL@source.developers.google.com:2022/p/PROJECT_ID/r/REPO_NAME
    

    替换以下内容:

    • EMAIL:您的 Google Cloud 用户名
    • PROJECT_ID:代码库所在 Google Cloud 项目的 ID
    • REPO_NAME:代码库的名称

Cookiefile

获取 cookiefile 的过程取决于您代码库的配置。如需查看示例,请参阅 Cloud Source Repositories 文档中的生成静态凭据。凭据通常存储在您的主目录下的 .gitcookies 文件中,也可能由安全管理员提供给您。

要使用 cookiefile,请完成以下步骤:

  1. 创建并获取 cookiefile 后,将其添加到集群的新 Secret 中。

    如果您不使用 HTTPS 代理,请使用以下命令创建 Secret:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-file=cookie_file=/path/to/COOKIEFILE
    

    如果您需要使用 HTTPS 代理,请运行以下命令,将其与 cookiefile 添加到 Secret 中:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-file=cookie_file=/path/to/COOKIEFILE \
     --from-literal=https_proxy=HTTPS_PROXY_URL
    

    替换以下内容:

    • /path/to/COOKIEFILE 替换为适当的路径和文件名
    • HTTPS_PROXY_URL 替换为您在与 Git 代码库通信时使用的 HTTPS 代理的网址
  2. 如果您仍需在本地使用 cookiefile,请保护好其内容。否则,请将其删除。

令牌

如果您的组织不允许使用 SSH 密钥,您可能更倾向于使用令牌。借助 Config Sync,您可以使用 GitHub 的个人访问令牌 (PAT)、GiLab 的 PAT 或部署键,或 Bitbucket 的应用专用密码作为令牌。

如需使用您的令牌创建 Secret,请完成以下步骤:

  1. 使用 GitHub、GitLab 或 Bitbucket 创建令牌:

  2. 创建并获取令牌后,将其添加到集群的新 Secret 中。

    如果您不使用 HTTPS 代理,请使用以下命令创建 Secret:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
      --namespace="config-management-system" \
      --from-literal=username=USERNAME \
      --from-literal=token=TOKEN
    

    替换以下内容:

    • USERNAME:您要使用的用户名。
    • TOKEN:您在上一步中创建的令牌。

    如果您需要使用 HTTPS 代理,请运行以下命令,将其与 usernametoken 添加到 Secret 中:

    kubectl create ns config-management-system && \
    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-literal=username=USERNAME \
      --from-literal=token=TOKEN \
     --from-literal=https_proxy=HTTPS_PROXY_URL
    

    替换以下内容:

    • USERNAME:您要使用的用户名。
    • TOKEN:您在上一步中创建的令牌。
    • HTTPS_PROXY_URL 替换为您在与 Git 代码库通信时使用的 HTTPS 代理的网址。
  3. 如果您仍需在本地使用令牌,请保护好令牌。否则,请将其删除。

Google 服务账号

如果您的代码库在 Cloud Source Repositories 中,并且您的集群使用 GKE Workload Identity舰队 Workload Identity,您可以使用 Google 服务账号向 Config Sync 授予对托管式集群所在项目中的代码库的访问权限。

  1. 如果您还没有服务账号,请创建一个服务账号

  2. 向 Google 服务账号授予 Cloud Source Repositories Reader (roles/source.reader) IAM 角色。如需详细了解 Cloud Source Repositories 角色和权限,请参阅授予查看代码库的权限

    • 如果项目中的所有代码库都应用相同的权限,请授予项目范围的权限。

      gcloud projects add-iam-policy-binding PROJECT_ID \
        --role=roles/source.reader \
        --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
      
    • 如果您希望服务账号对项目中的每个代码库拥有不同级别的访问权限,请授予特定于代码库的权限。

      gcloud source repos set-iam-policy REPOSITORY POLICY_FILE --project=PROJECT_ID
      
  3. 如果您使用 Google Cloud 控制台配置 Config Sync,请选择 Workload Identity 作为身份验证类型,然后添加您的服务账号电子邮件地址。

    如果您使用 Google Cloud CLI 配置 Config Sync,请将 gcpserviceaccount 添加为 secretType,然后将您的服务账号电子邮件添加到 gcpServiceAccountEmail 中。

  4. 配置 Config Sync 之后,在 Kubernetes 服务账号和 Google 服务账号之间创建一个 IAM 政策绑定。在您首次配置 Config Sync 之前,系统不会创建 Kubernetes 服务账号。

    如果您使用注册到舰队的集群,则只需为每个舰队创建一次政策绑定。在一个舰队中注册的所有集群共享相同的工作负载身份池。舰队具有相同性概念,如果您将 IAM 政策添加到一个集群中的 Kubernetes 服务账号,则同一舰队中其他集群上相同命名空间中的 Kubernetes 服务账号也会获得相同的 IAM 政策。

    此绑定允许 Config Sync Kubernetes 服务账号充当 Google 服务账号:

    gcloud iam service-accounts add-iam-policy-binding \
        GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
        --project=PROJECT_ID
    

请替换以下内容:

  • PROJECT_ID:组织的项目 ID。
  • FLEET_HOST_PROJECT_ID:如果您使用的是 GKE Workload Identity,则此 ID 与 PROJECT_ID 相同。如果您使用的是舰队 Workload Identity,则这是集群注册到的舰队的项目 ID。
  • GSA_NAME:您要用来连接到 Artifact Registry 的自定义 Google 服务账号。该服务账号必须具有 Artifact Registry Reader (roles/artifactregistry.reader) IAM 角色。
  • KSA_NAME:协调器的 Kubernetes 服务账号。
    • 对于根代码库,如果 RootSync 名称为 root-sync,请使用 root-reconciler。否则,请使用 root-reconciler-ROOT_SYNC_NAME。如果您使用 Google Cloud 控制台或 Google Cloud CLI 安装 Config Sync,Config Sync 会自动创建一个名为 root-sync 的 RootSync 对象。
  • REPOSITORY:代码库的名称。
  • POLICY_FILE:具有 Identity and Access Management 政策的 JSON 或 YAML 文件。

Compute Engine 默认服务账号

如果您的代码库在 Cloud Source Repositories 中,并且您的集群是停用了 Workload Identity 的 GKE 集群,您可以使用 gcenode 作为身份验证类型。

如果您使用 Google Cloud 控制台配置 Config Sync,请选择 Google Cloud Repository 作为身份验证类型

如果您使用 Google Cloud CLI 配置 Config Sync,请将 gcenode 添加为 secretType

选择 Google Cloud Repositorygcenode 之后,您便可以使用 Compute Engine 默认服务账号。您必须向 Compute Engine 默认服务账号授予 Cloud Source Repositories Reader (roles/source.reader) IAM 角色。如需详细了解 Cloud Source Repositories 角色和权限,请参阅授予查看代码库的权限

gcloud projects add-iam-policy-binding PROJECT_ID \
  --role=roles/source.reader \
  --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"

PROJECT_ID 替换为您的组织的项目 ID,并将 PROJECT_NUMBER 替换为您的组织的项目编号。

向 Config Sync 授予对 OCI 的只读权限

Config Sync 需要具有 Artifact Registry 中存储的 OCI 映像的只读权限,才能读取映像中包含的配置并将其应用到您的集群。

如果您的映像无需进行身份验证即可提供只读权限,您可以继续配置 Config Sync 并使用 none 作为身份验证类型。例如,如果您的映像是公开的且可供互联网上的任何人访问,则无需进行身份验证。

不过,大多数用户都需要创建凭据才能访问受限映像。Config Sync 支持以下身份验证机制:

  • Kubernetes 服务账号 (k8sserviceaccount)
  • Google 服务账号 (gcpserviceaccount)
  • Compute Engine 默认服务账号 (gcenode)

Kubernetes 服务账号

如果您将 OCI 映像存储在 Artifact Registry 中,并且您的集群使用 GKE Workload Identity舰队 Workload Identity,您可以使用 k8sserviceaccount 作为身份验证类型(在 1.17.2 版及更高版本中)。由于此选项简化了配置流程,因此建议您使用此选项,而不是 gcpserviceaccount

  1. 在使用工作负载身份池的情况下向 Kubernetes 服务账号授予 Artifact Registry Reader (roles/artifactregistry.reader) IAM 角色。如需详细了解 Artifact Registry 角色和权限,请参阅为 Artifact Registry 配置角色和权限

    • 如果项目中的所有代码库都应用相同的权限,请授予项目范围的权限。

      gcloud projects add-iam-policy-binding PROJECT_ID \
            --role=roles/artifactregistry.reader \
            --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
      
    • 如果您希望服务账号对项目中的每个代码库拥有不同级别的访问权限,请授予特定于代码库的权限。

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
         --location=LOCATION \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
         --project=PROJECT_ID
      

    请替换以下内容:

    • PROJECT_ID:组织的项目 ID。
    • FLEET_HOST_PROJECT_ID:如果您使用的是 GKE Workload Identity,则此 ID 与 PROJECT_ID 相同。如果您使用的是舰队 Workload Identity,则这是集群注册到的舰队的项目 ID。
    • KSA_NAME:协调器的 Kubernetes 服务账号。
      • 对于根代码库,如果 RootSync 名称为 root-sync,请使用 root-reconciler。否则,请使用 root-reconciler-ROOT_SYNC_NAME。如果您使用 Google Cloud 控制台或 Google Cloud CLI 安装 Config Sync,Config Sync 会自动创建一个名为 root-sync 的 RootSync 对象。
    • REPOSITORY:制品库的 ID。
    • LOCATION:制品库的单区域级或多区域级位置。

Google 服务账号

如果您将 OCI 映像存储在 Artifact Registry 中,并且您的集群使用 GKE Workload Identity舰队 Workload Identity,您可以使用 gcpserviceaccount 作为身份验证类型。从 1.17.2 版开始,建议改用 k8sserviceaccount。此选项消除了创建 Google 服务账号和关联的 IAM 政策绑定的额外步骤。

  1. 如果您还没有服务账号,请创建一个服务账号

  2. 向 Google 服务账号授予 Artifact Registry Reader (roles/artifactregistry.reader) IAM 角色。如需详细了解 Artifact Registry 角色和权限,请参阅为 Artifact Registry 配置角色和权限

    • 如果项目中的所有代码库都应用相同的权限,请授予项目范围的权限。

      gcloud projects add-iam-policy-binding PROJECT_ID  \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
      
    • 如果您希望服务账号对项目中的每个代码库拥有不同级别的访问权限,请授予特定于代码库的权限。

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
         --location=LOCATION \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
         --project=PROJECT_ID
      
  3. 通过运行以下命令,在 Kubernetes 服务账号和 Google 服务账号之间创建 IAM 政策绑定

    gcloud iam service-accounts add-iam-policy-binding
      GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
        --project=PROJECT_ID
    

请替换以下内容:

  • PROJECT_ID:组织的项目 ID。
  • FLEET_HOST_PROJECT_ID:如果您使用的是 GKE Workload Identity,则此 ID 与 PROJECT_ID 相同。如果您使用的是舰队 Workload Identity,则这是集群注册到的舰队的项目 ID。
  • GSA_NAME:您要用来连接到 Artifact Registry 的自定义 Google 服务账号。该服务账号必须具有 Artifact Registry Reader (roles/artifactregistry.reader) IAM 角色。
  • KSA_NAME:协调器的 Kubernetes 服务账号。
    • 对于根代码库,如果 RootSync 名称为 root-sync,请使用 root-reconciler。否则,请使用 root-reconciler-ROOT_SYNC_NAME。如果您使用 Google Cloud 控制台或 Google Cloud CLI 安装 Config Sync,Config Sync 会自动创建一个名为 root-sync 的 RootSync 对象。
  • REPOSITORY:制品库的 ID。
  • LOCATION:制品库的单区域级或多区域级位置。

Compute Engine 默认服务账号

如果您将 Helm 图表存储在 Artifact Registry 中,并且您的集群是停用了 Workload Identity 的 GKE 集群,您可以使用 gcenode 作为身份验证类型。Config Sync 使用 Compute Engine 默认服务账号。您必须向 Compute Engine 默认服务账号授予对 Artifact Registry 的读取权限。

  1. 运行以下命令,向 Compute Engine 服务账号授予对 Artifact Registry 的读取权限:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
       --role=roles/artifactregistry.reader
    

    PROJECT_ID 替换为您的组织的项目 ID,并将 PROJECT_NUMBER 替换为您的组织的项目编号。

向 Config Sync 授予对 Helm 的只读权限

Config Sync 需要具备对 Helm 代码库的只读权限,以便可以读取代码库中的 Helm 图表并将其安装到您的集群中。

如果您的代码库无需进行身份验证即可提供只读权限,您可以继续配置 Config Sync 并使用 none 作为身份验证类型。例如,如果您的 Helm 代码库是公开提供的,可供互联网上的任何人访问,那么便无需进行身份验证。

但是,大多数用户都需要创建凭据才能访问私有 Helm 代码库。Config Sync 支持以下身份验证机制:

  • 令牌 (token)
  • Kubernetes 服务账号 (k8sserviceaccount)
  • Google 服务账号 (gcpserviceaccount)
  • Compute Engine 默认服务账号 (gcenode)

令牌

使用 Helm 代码库用户名和密码创建 Secret:

kubectl create secret generic SECRET_NAME \
    --namespace=config-management-system \
    --from-literal=username=USERNAME \
    --from-literal=password=PASSWORD

替换以下内容:

  • SECRET_NAME:您要为 Secret 指定的名称。
  • USERNAME:Helm 代码库用户名。
  • PASSWORD:Helm 代码库密码。

配置 ConfigManagement Operator 时,您需要使用为 spec.helm.secretRef.name 指定的 Secret 名称。

Kubernetes 服务账号

如果您将 Helm 图表存储在 Artifact Registry 中,并且您的集群使用 GKE Workload Identity舰队 Workload Identity,您可以使用 k8sserviceaccount 作为身份验证类型(在 1.17.2 版及更高版本中)。由于此选项简化了配置流程,因此建议您使用此选项,而不是 gcpserviceaccount

  1. 在使用工作负载身份池的情况下向 Kubernetes 服务账号授予 Artifact Registry Reader (roles/artifactregistry.reader) IAM 角色。如需详细了解 Artifact Registry 角色和权限,请参阅为 Artifact Registry 配置角色和权限

    • 如果项目中的所有代码库都应用相同的权限,请授予项目范围的权限。

      gcloud projects add-iam-policy-binding PROJECT_ID \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
      
    • 如果您希望服务账号对项目中的每个代码库拥有不同级别的访问权限,请授予特定于代码库的权限。

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
         --location=LOCATION \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
         --project=PROJECT_ID
      

    请替换以下内容:

    • PROJECT_ID:组织的项目 ID。
    • FLEET_HOST_PROJECT_ID:如果您使用的是 GKE Workload Identity,则此 ID 与 PROJECT_ID 相同。如果您使用的是舰队 Workload Identity,则这是集群注册到的舰队的项目 ID。
    • KSA_NAME:协调器的 Kubernetes 服务账号。
      • 对于根代码库,如果 RootSync 名称为 root-sync,请使用 root-reconciler。否则,请使用 root-reconciler-ROOT_SYNC_NAME
    • REPOSITORY:制品库的 ID。
    • LOCATION:制品库的单区域级或多区域级位置。

Google 服务账号

如果您将 Helm 图表存储在 Artifact Registry 中,并且您的集群使用 GKE Workload Identity舰队 Workload Identity,那么可以使用 gcpserviceaccount 作为您的身份验证类型。 从 1.17.2 版开始,建议改用 k8sserviceaccount。此选项消除了创建 Google 服务账号和关联的 IAM 政策绑定的额外步骤。

  1. 如果您还没有服务账号,请创建一个服务账号

  2. 向 Google 服务账号授予 Artifact Registry Reader (roles/artifactregistry.reader) IAM 角色。如需详细了解 Artifact Registry 角色和权限,请参阅为 Artifact Registry 配置角色和权限

    • 如果项目中的所有代码库都应用相同的权限,请授予项目范围的权限。

      gcloud projects add-iam-policy-binding PROJECT_ID  \
            --role=roles/artifactregistry.reader \
            --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
      
    • 如果您希望服务账号对项目中的每个代码库拥有不同级别的访问权限,请授予特定于代码库的权限。

      gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
         --location=LOCATION \
         --role=roles/artifactregistry.reader \
         --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
         --project=PROJECT_ID
      
  3. 通过运行以下命令,在 Kubernetes 服务账号和 Google 服务账号之间创建 IAM 政策绑定

    gcloud iam service-accounts add-iam-policy-binding
      GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
        --project=PROJECT_ID
    

请替换以下内容:

  • PROJECT_ID:组织的项目 ID。
  • FLEET_HOST_PROJECT_ID:如果您使用的是 GKE Workload Identity,则此 ID 与 PROJECT_ID 相同。如果您使用的是舰队 Workload Identity,则这是集群注册到的舰队的项目 ID。
  • GSA_NAME:您要用来连接到 Artifact Registry 的自定义 Google 服务账号。该服务账号必须具有 Artifact Registry Reader (roles/artifactregistry.reader) IAM 角色。
  • KSA_NAME:协调器的 Kubernetes 服务账号。
    • 对于根代码库,如果 RootSync 名称为 root-sync,请使用 root-reconciler。否则,请使用 root-reconciler-ROOT_SYNC_NAME
  • REPOSITORY:制品库的 ID。
  • LOCATION:制品库的单区域级或多区域级位置。

Compute Engine 默认服务账号

如果您将 Helm 图表存储在 Artifact Registry 中,并且您的集群是停用了 Workload Identity 的 GKE 集群,您可以使用 gcenode 作为身份验证类型。Config Sync 使用 Compute Engine 默认服务账号。您必须向 Compute Engine 默认服务账号授予对 Artifact Registry 的读取权限。您可能需要授予 storage-ro 访问权限范围才能授予对拉取映像的只读权限。

  1. 向 Compute Engine 服务账号授予对 Artifact Registry 的读取权限:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/artifactregistry.reader
    

    PROJECT_ID 替换为您的组织的项目 ID,并将 PROJECT_NUMBER 替换为您的组织的项目编号。

配置 Config Sync

在本部分中,您将配置根代码库的设置。如果您要同步到 Git 代码库,可以使用 Google Cloud 控制台来引导您完成安装过程并自动执行某些步骤。

当您使用 Google Cloud 控制台或 Google Cloud CLI 安装 Config Sync 时,Config Sync 会自动创建一个名为 root-sync 的 RootSync 对象。您可以使用 kubectl 命令修改 root-sync 并添加其他 Config Sync 配置。如需了解详情,请参阅使用 kubectl 命令配置 Config Sync

控制台

安装 Config Sync

如需安装 Config Sync,所有集群都必须注册到舰队。在 Google Cloud 控制台中安装 Config Sync 时,选择个别集群会自动将这些集群注册到舰队。

  1. 在 Google Cloud 控制台中,转到功能部分下的配置页面。

    转到“配置”

  2. 点击 安装 Config Sync
  3. 选择自动升级预览版)以允许 Config Sync 自动升级版本,或选择手动升级来自行管理 Config Sync 版本。如需详细了解自动升级功能的工作原理,请参阅升级 Config Sync
  4. 安装选项下,选择以下选项之一:
    • Install Config Sync on entire fleet(在整个舰队上安装 Config Sync)(推荐):Config Sync 将安装在舰队中的所有集群上。
    • Install Config Sync on individual clusters(在个别集群上安装 Config Sync):所有选定的集群都将自动注册到舰队。Config Sync 会安装在舰队中的所有集群上。
  5. 如果您要在个别集群上安装 Config Sync,请在可用集群表中选择要安装 Config Sync 的集群。
  6. 点击 Install Config Sync(安装 Config Sync)。在设置标签页中,几分钟后,您应该会在舰队中集群的状态列中看到已启用

部署软件包

将集群注册到舰队并安装 Config Sync 后,您可以配置 Config Sync 以从可靠来源将软件包部署到集群。您可以将同一软件包部署到多个集群,也可以将不同的软件包部署到不同的集群。您可以在部署软件包后对其进行修改,但软件包名称和同步类型等某些设置除外。如需了解详情,请参阅管理软件包

如需部署软件包,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 Config Sync 信息中心

    转到 Config Sync 信息中心

  2. 点击部署软件包

  3. 选择要部署软件包的集群表中,选择要部署软件包的集群,然后点击继续

  4. 选择托管在 Git 上的软件包托管在 OCI 上的软件包作为来源类型,然后点击继续

  5. 软件包详情部分,输入软件包名称,用于标识 RootSync 或 RepoSync 对象。

  6. Sync type(同步类型)字段中,选择 Cluster scoped sync(集群级同步)或 Namespace scoped sync(命名空间级同步)作为同步类型。

    集群级同步会创建 RootSync 对象,命名空间级同步会创建 RepoSync 对象。如需详细了解这些对象,请参阅 Config Sync 架构

  7. 来源部分,完成以下操作:

    • 对于托管在 Git 代码库中的源代码,请输入以下字段:

      1. 输入您用作可靠来源的 Git 代码库的网址作为代码库网址
      2. 可选:更新修订版本字段以检查您是否未使用默认的 HEAD
      3. 可选:如果您不想从根代码库同步,请更新路径字段。
      4. 可选:如果您不使用默认 main 分支,请更新分支字段。
    • 对于托管在 OCI 映像中的来源,请输入以下字段:

      1. 输入用作映像的可靠来源的 OCI 映像的网址。
      2. 输入要从中同步的目录的路径(相对于根目录)以作为目录
  8. (可选):展开高级设置部分,完成以下操作:

    1. 选择相应的身份验证类型。Config Sync 需要可靠来源的只读权限,才能读取来源中的配置文件并将它们应用于您的集群。除非您的来源不需要身份验证(例如公共代码库),否则请确保向 Config Sync 授予您的 Git 代码库OCI 映像Helm 图表(仅限 gcloud CLI)的只读权限。选择您在安装 Config Sync 时配置的身份验证类型:

      • :不使用身份验证。
      • SSH:使用 SSH 密钥对进行身份验证。
      • Cookiefile:使用 cookiefile 进行身份验证。
      • 令牌:使用访问令牌或密码进行身份验证。
      • Google Cloud 代码库:使用 Google 服务账号访问 Cloud Source Repositories 代码库。请仅在集群中未启用 Workload Identity 时选择此选项。
      • Workload Identity:使用 Google 服务账号访问 Cloud Source Repositories 代码库。
    2. 输入数字(以秒为单位)以设置 Sync wait time(同步等待时间),这决定了 Config Sync 从可靠来源进行拉取的尝试之间的等待时间。

    3. 输入 Git 代理网址,以便在与可靠来源通信时使用 HTTPS 代理。

    4. 选择层次结构以更改来源格式

      在大多数情况下,建议使用默认值非结构化,因为它支持您根据需要整理可靠来源。

  9. 点击部署软件包

    系统会将您重定向至 Config Sync 软件包页面。几分钟后,您应该会在配置的集群的同步状态列中看到已同步

gcloud

在继续操作之前,请确保您已向舰队注册集群

  1. 启用 ConfigManagement 舰队功能:

    gcloud beta container fleet config-management enable
    
  2. 通过创建新的 apply-spec.yaml 清单或使用现有清单来准备配置。通过使用现有清单,您可以使用另一个集群所用的相同设置来配置集群。

    创建新的清单

    如需使用新设置为集群配置 Config Sync,请创建一个名为 apply-spec.yaml 的文件,并将以下 YAML 文件复制到其中。

    您可以在创建清单时设置所需的所有可选 spec.configSync 字段,稍后再使用 kubectl 命令进行配置。您还可以将 spec.configSync.enabled 字段设置为 true,并省略可选字段。您随后可以使用 kubectl 命令创建其他 RootSync 对象或 RepoSync,以便日后使用 kubectl 命令进行全面管理。

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      # upgrades: UPGRADE_SETTING
      configSync:
        # Set to true to install and enable Config Sync
        enabled: true
        # If you don't have a source of truth yet, omit the
        # following fields. You can configure them later.
        sourceType: SOURCE_TYPE
        sourceFormat: FORMAT
        syncRepo: REPO
        syncRev: REVISION
        syncBranch: BRANCH
        secretType: SECRET_TYPE
        gcpServiceAccountEmail: EMAIL
        metricsGcpServiceAccountEmail: METRICS_EMAIL
        policyDir: DIRECTORY
        preventDrift: PREVENT_DRIFT
    

    请替换以下内容:

    • 预览版UPGRADE_SETTING:取消备注该字段并将其设置为 auto 可将 Config Sync 配置为自动升级。设置为 manual 可自行手动升级 Config Sync。默认值为 manual。只有 GKE on Google Cloud 集群才支持此标志。如需使用此字段,您可能需要运行 gcloud components update 来更新 gcloud CLI。

    • SOURCE_TYPE:添加 git 以从 Git 代码库同步,添加 oci 以从 OCI 映像同步,或添加 helm 以从 Helm 图表同步。如果未指定任何值,则默认为 git

    • FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。 这些值区分大小写。 此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。

    • REPO:添加可靠来源的网址。Git 和 Helm 代码库网址使用 HTTPS 或 SSH 协议。例如 https://github.com/GoogleCloudPlatform/anthos-config-management-samples。如果您计划使用 SSH 作为 secretType,请使用 SSH 协议输入您的网址。此字段是必填字段;如果您不输入协议,则网址会被视为 HTTPS 网址。

      OCI 网址采用以下格式:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。默认情况下,映像是从 latest 标记中拉取的,但您也可以通过 TAGDIGEST 拉取映像。在 PACKAGE_NAME 中指定 TAGDIGEST

      • 如需通过 TAG 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如需通过 DIGEST 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • REVISION:需与其同步的 Git 修订版本(标记或哈希)。此字段是可选字段,默认值为 HEAD。从 Config Sync 1.17.0 版开始,您还可以在 syncRev 字段中指定分支名称。在 1.17.0 版或更高版本中使用哈希时,哈希必须是完整哈希,而不是缩写形式。

    • BRANCH:要从中同步的代码库的分支。此字段是可选字段,默认值为 master。 从 Config Sync 1.17.0 版开始,为简单起见,建议使用 syncRev 字段指定分支名称。如果同时指定了 syncRev 字段和 syncBranch 字段,则 syncRev 优先于 syncBranch

    • SECRET_TYPE:以下 secretTypes 之一:

      git

      • none:不使用身份验证。
      • ssh:使用 SSH 密钥对。
      • cookiefile:使用 cookiefile
      • token:使用令牌。
      • gcpserviceaccount:使用 Google 服务账号访问 Cloud Source Repositories。如果您选择此身份验证类型,则需要在完成 Config Sync 配置后创建一个 IAM 政策绑定。如需了解详情,请参阅向 Config Sync 授予对 Git 的只读权限部分中的 Google 服务账号标签页。
      • gcenode:使用 Google 服务账号访问 Cloud Source Repositories。请仅在集群中未启用 Workload Identity 时选择此选项。

      如需详细了解这些身份验证类型,请参阅授予 Config Sync 对 Git 的只读权限

      oci

      • none:不使用身份验证
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      Helm

      • token:使用令牌。
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。
    • EMAIL:如果您已将 gcpserviceaccount 添加为 secretType,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • METRICS_EMAIL:用于将 Config Sync 指标导出到 Cloud Monitoring 的 Google Cloud 服务账号 (GSA) 的电子邮件。GSA 应具有 Monitoring Metric Writer (roles/monitoring.metricWriter) IAM 角色。命名空间 config-management-monitoring 中的 Kubernetes ServiceAccount default绑定到 GSA

    • DIRECTORY:要从中同步的目录的路径(相对于 Git 代码库的根目录)。您指定的目录的所有子目录都会包含在内并同步到集群。默认值为代码库的根目录。

    • PREVENT_DRIFT:如果设置为 true,则允许 Config Sync 准入网络钩子通过拒绝将有冲突的更改推送到活跃集群来防止偏移。默认设置为 false。 无论此字段的值如何,Config Sync 始终会修复偏移。

    如需查看可添加到 spec 字段的完整字段列表,请参阅 gcloud 字段

    使用现有清单

    要使用与另一个集群相同的设置配置集群,请从已注册的集群中提取设置:

    gcloud alpha container fleet config-management fetch-for-apply \
        --membership=MEMBERSHIP_NAME \
        --project=PROJECT_ID \
        > CONFIG_YAML_PATH
    

    替换以下内容:

    • MEMBERSHIP_NAME:具有您要使用的 Config Sync 设置的已注册集群的成员资格名称
    • PROJECT_ID:您的项目 ID
    • CONFIG_YAML_PATHapply-spec.yaml 文件的路径,该文件包含从集群提取的设置
  3. 应用 apply-spec.yaml 文件。如果您使用的是现有清单,则应将文件应用于您要使用上一条命令中提取的设置来配置的集群:

    gcloud beta container fleet config-management apply \
        --membership=MEMBERSHIP_NAME \
        --config=CONFIG_YAML_PATH \
        --project=PROJECT_ID
    

    请替换以下内容:

    • MEMBERSHIP_NAME:您在注册集群时选择的舰队成员资格名称。您可以通过 gcloud container fleet memberships list 找到该名称。
    • CONFIG_YAML_PATHapply-spec.yaml 文件的路径。
    • PROJECT_ID:您的项目 ID。

Terraform

对于要配置 Config Sync 的每个集群,请应用包含 configmanagementconfig_sync 块的 google_gkehub_feature_membership 资源块:

git

resource "google_container_cluster" "cluster" {
 name = EXISTING_CLUSTER_NAME
 location = "EXISTING_CLUSTER_LOCATION"
}

resource "google_gke_hub_membership" "membership" {
 membership_id = "MEMBERSHIP_ID"
 endpoint {
   gke_cluster {
     resource_link = "//container.googleapis.com/${google_container_cluster.cluster.id}"
   }
 }

resource "google_gke_hub_feature" "feature" {
  name = "configmanagement"
  location = "global"
  }
}

resource "google_gke_hub_feature_membership" "feature_member" {
 location = "global"
 feature = google_gke_hub_feature.feature.name
 membership = google_gke_hub_membership.membership.membership_id
 configmanagement {
   version = "VERSION"
   config_sync {
     git {
       sync_repo = "REPO"
       sync_branch = "BRANCH"
       policy_dir = "DIRECTORY"
       secret_type = "SECRET"
     }
   }
 }
}

请替换以下内容:

  • EXISTING_CLUSTER_NAME:现有集群的名称。
  • EXISTING_CLUSTER_LOCATION:现有集群的位置。
  • MEMBERSHIP_ID:成员资格绑定 ID。
  • VERSION:(可选)Config Sync 版本号。必须设置为 1.17.0 版或更高版本。如果留空,则默认为最新版本。
  • REPO:包含配置文件的代码库的网址。
  • BRANCH:代码库分支,例如 main
  • DIRECTORY:Git 代码库中的路径,表示要同步的代码库的顶层目录。
  • SECRET:密钥身份验证类型。

oci

resource "google_container_cluster" "cluster" {
 name = EXISTING_CLUSTER_NAME
 location = "EXISTING_CLUSTER_LOCATION"
}

resource "google_gke_hub_membership" "membership" {
 membership_id = "MEMBERSHIP_ID"
 endpoint {
   gke_cluster {
     resource_link = "//container.googleapis.com/${google_container_cluster.cluster.id}"
   }
 }

resource "google_gke_hub_feature" "feature" {
  name = "configmanagement"
  location = "global"
  }
}

resource "google_gke_hub_feature_membership" "feature_member" {
 location = "global"
 feature = google_gke_hub_feature.feature.name
 membership = google_gke_hub_membership.membership.membership_id
 configmanagement {
   version = "VERSION"
   config_sync {
     oci {
       sync_repo = "REPO"
       policy_dir = "DIRECTORY"
       secret_type = "SECRET"
     }
   }
 }
}

请替换以下内容:

  • EXISTING_CLUSTER_NAME:现有集群的名称。
  • EXISTING_CLUSTER_LOCATION:现有集群的位置。
  • MEMBERSHIP_ID:成员资格绑定 ID。
  • VERSION:(可选)Config Sync 版本号。如果留空,则默认为最新版本。
  • REPO:包含配置文件的 OCI 映像代码库的网址。
  • DIRECTORY:包含要同步的资源的目录的绝对路径。留空可使用根目录。
  • SECRET:密钥身份验证类型。

对要同步的每个集群重复此过程。

完成根代码库的配置后,您可以选择配置从多个代码库同步,包括其他根代码库和命名空间代码库。如果您希望代码库中包含要跨集群同步到特定命名空间的命名空间级配置,则命名空间代码库非常有用。

配置舰队级默认设置

如果您已启用 Google Kubernetes Engine (GKE) Enterprise 版本,则可以启用 Config Sync 并将其配置为集群的舰队级默认设置。这意味着在舰队中创建的每个新的 GKE on Google Cloud 集群都将使用您指定的设置在集群上启用 Config Sync。您可以在管理舰队级功能中详细了解舰队默认配置。

如果仅使用 Google Cloud 控制台,您可以在集群上默认启用 Config Sync,并为舰队设置 Config Sync 版本。如果使用 Terraform,您可以在集群上默认启用 Config Sync,为舰队设置 Config Sync 版本,并设置与 Git 代码库或 OCI 映像代码库的连接。

如需为 Config Sync 配置舰队级默认设置,请完成以下步骤:

控制台

  1. 在 Google Cloud 控制台中,前往 Feature Manager 页面。

    前往 Feature Manager

  2. Config Sync 窗格中,点击配置

  3. 查看舰队级设置。您在舰队中创建的所有新集群都会继承这些设置。

  4. 可选:如需更改默认设置,请点击自定义舰队设置。在显示的对话框中,执行以下操作:

  5. 选择自动升级预览版)以让 Config Sync 自动升级版本,或选择手动升级以自行管理 Config Sync 版本。如需详细了解自动升级功能的工作原理,请参阅升级 Config Sync

  6. 如果您选择了手动升级,请在版本列表中选择要使用的 Config Sync 版本。

  7. 点击保存更改

  8. 点击配置

  9. 配置舰队设置确认对话框中,点击确认。如果您之前未启用 Config Sync,则点击确认还会启用 anthosconfigmanagement.googleapis.com API。

Terraform

  1. 为舰队默认配置 Terraform 文件创建一个目录。向该目录添加 main.tf 文件,其中包含以下用于配置 Config Sync 设置的资源:

    git

    terraform {
      required_providers {
        google = {
          source = "hashicorp/google"
          version = ">=5.16.0"
          }
        }
      }
    
    provider "google" {
      project = "PROJECT_ID"
    }
    
    resource "google_gke_hub_feature" "feature" {
      name = "configmanagement"
      location = "global"
      provider = google
      fleet_default_member_config {
        configmanagement {
        version = "VERSION"
        config_sync {
        source_format = "unstructured"
          git {
            sync_repo = "REPO"
            sync_branch = "BRANCH"
            policy_dir = "DIRECTORY"
            secret_type = "SECRET"
          }
        }
        }
      }
    }
    

    请替换以下内容:

    • PROJECT_ID:舰队宿主项目 ID。
    • VERSION:(可选)Config Sync 版本号。如果留空,则默认为最新版本。
    • REPO:包含配置文件的代码库的网址。
    • BRANCH:代码库分支,例如 main
    • DIRECTORY:Git 代码库中的路径,表示要同步的代码库的顶层目录。
    • SECRET:密钥身份验证类型。

    如需查看 Config Sync git 块支持的设置的完整列表,请参阅适用于 GKE Hub 功能的 Terraform 参考文档

    OCI

    terraform {
      required_providers {
        google = {
          source = "hashicorp/google"
          version = ">=5.16.0"
          }
        }
      }
    
    provider "google" {
      project = "PROJECT_ID"
    }
    
    resource "google_gke_hub_feature" "feature" {
      name = "configmanagement"
      location = "global"
      provider = google
      fleet_default_member_config {
        configmanagement {
        version = "VERSION"
        config_sync {
        source_format = "unstructured"
          oci {
            sync_repo = "REPO"
            policy_dir = "DIRECTORY"
            secret_type = "SECRET"
          }
        }
        }
      }
    }
    

    请替换以下内容:

    • PROJECT_ID:舰队宿主项目 ID。
    • VERSION:Config Sync 版本号。必须设置为 1.17.0 版或更高版本。如果留空,则默认为最新版本。
    • REPO:包含配置文件的 OCI 映像代码库的网址。
    • DIRECTORY:包含要同步的资源的目录的绝对路径。留空可使用根目录。
    • SECRET:密钥身份验证类型。

    如需查看 Config Sync oci 块支持的设置的完整列表,请参阅适用于 GKE Hub 功能的 Terraform 参考文档

  2. 在您创建的目录中初始化 Terraform:

    terraform init
    
  3. 检查您向 Terraform 建议的更改是否与预期方案匹配:

    terraform plan
    
  4. 创建默认舰队成员配置:

    terraform apply
    

如果您具有要更新以使用默认 Config Sync 设置的现有集群,请使用 Google Cloud 控制台将所选舰队集群同步到舰队默认设置。或者,您可以按照配置 Config Sync 的说明,使用 Terraform 或 gcloud CLI,通过相同设置配置每个集群。如果您之前使用 Terraform 指定了舰队默认设置,请使用您用于设置默认设置的同一 configmanagementconfig_sync 块来配置所选集群。

如需在舰队中同步 Config Sync 默认设置,请按照以下步骤操作:

  1. 前往 Feature Manager

    前往“Feature Manager:Config Sync”

  2. 在集群表中,选择要同步到舰队设置的集群。

  3. 点击同步到舰队设置

Config Sync 默认设置将应用于您选择的任何集群。虽然 Google Cloud 控制台仅显示一部分设置(如 Config Sync 版本),但所有舰队级设置都会同步到集群。例如,如果您使用 Terraform 将 Config Sync 配置为同步到 Git 代码库,则该设置会同步到您的集群,但不会在 Google Cloud 控制台中显示。

验证安装

安装和配置 Config Sync 后,您可以验证安装是否成功完成。

控制台

请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到功能部分下的配置页面。

    转到“配置”

  2. 软件包标签页上,检查集群表中的同步状态列。Config Sync 成功安装的状态为已安装。成功配置的可靠来源的状态为已同步

gcloud

运行以下命令:

gcloud beta container fleet config-management status \
    --project=PROJECT_ID

PROJECT_ID 替换为您的项目 ID。

成功安装的状态为 SYNCED。从 Config Sync 1.18.0 版开始,输出还会显示安装的 Config Sync 版本以及 Config Sync 的升级设置。

如果您在运行上述命令后看到错误,请确保已创建 git-creds Secret。如果您已创建 Secret,请尝试重新运行以下命令:

gcloud beta container fleet config-management apply

您还可以使用 nomos status 命令检查 Config Sync 是否已成功安装。对于没有问题的有效安装,其状态为 PENDINGSYNCED。对于无效或不完整的安装,其状态为 NOT INSTALLEDNOT CONFIGURED。输出还包括报告的所有错误。

基于角色的访问权限控制 (RBAC) 和权限

Config Sync 包含具有高权限的工作负载。下表列出了这些工作负载的权限:

组件 命名空间 服务账号 权限 说明
ConfigManagement Operator config-management-system config-management-operator cluster-admin ConfigManagement Operator 会安装此表中的其他组件。其中一些组件需要具有 cluster-admin 权限,因此 ConfigManagement Operator 也需要这些权限。
Config Sync config-management-system 如需了解所需的权限,请参阅 Config Sync 权限

资源请求量

以下部分列出了 Config Sync 的资源请求。

下表列出了 Config Sync 组件的 Kubernetes 资源要求。如需了解详情,请参阅 Kubernetes 文档中的管理容器的资源

并非列出的所有组件都会进行创建。以下条件会导致调度各个组件:

  • 启用 Config Sync 后,系统会安装 config-management-operator
  • 启用 Config Sync 后,系统会安装 reconciler-manager
  • 启用偏移防范功能后,系统会安装 admission-webhook
  • 系统会为每个 RootSync 和 RepoSync 安装 reconciler
  • 启用 Config Sync 后,系统会安装 otel-collector

如需详细了解这些组件,请参阅 Config Sync 架构

1.18

部署名称 每个副本的 CPU 请求 (m) 每个副本的内存请求 (Mi)
config-management-operator 100 200
resource-group-controller-manager 110 300
admission-webhook1 10 100
otel-collector 200 400
reconciler-manager 20 150
reconciler(每个 RootSync 和 RepoSync 各一个) 如需了解详情,请参阅协调器部署

1 准入 webhook 具有两个副本,因此在计算资源请求总数时,如果您使用的是准入 webhook,则需要将这个值加倍。准入 webhook 默认处于停用状态。

1.17

部署名称 每个副本的 CPU 请求 (m) 每个副本的内存请求 (Mi)
config-management-operator 100 200
resource-group-controller-manager 110 300
admission-webhook1 10 100
otel-collector 200 400
reconciler-manager 20 150
reconciler(每个 RootSync 和 RepoSync 各一个) 如需了解详情,请参阅协调器部署

1 准入 webhook 具有两个副本,因此在计算资源请求总数时,如果您使用的是准入 webhook,则需要将这个值加倍。准入 webhook 默认处于停用状态。

1.16

部署名称 每个副本的 CPU 请求 (m) 每个副本的内存请求 (Mi)
config-management-operator 100 200
resource-group-controller-manager 110 300
admission-webhook1 10 100
otel-collector 200 400
reconciler-manager 20 150
reconciler(每个 RootSync 和 RepoSync 各一个) 如需了解详情,请参阅协调器部署

1 准入 webhook 具有两个副本,因此在计算资源请求总数时,如果您使用的是准入 webhook,则需要将这个值加倍。准入 webhook 默认处于停用状态。

协调器部署

对于每个 RootSyncRepoSync 对象,Config Sync 会创建一个独立的协调器部署来处理同步。协调器部署包含多个容器。如需详细了解这些容器,请参阅协调器容器

在 Config Sync 1.17.0 版及更高版本中,协调器的默认资源请求对于 Standard 集群和 Autopilot 集群有所不同。所有其他集群类型均使用 Standard 默认设置。

Standard 集群

1.18

容器名称 CPU 请求 (m) 内存请求 (Mi)
reconciler 50 200
otel-agent 10 100
hydration-controller(可选) 10 100
git-sync 10 16
gcenode-askpass-sidecar(可选) 10 20
helm-sync 75 128
oci-sync 25 32

1.17

容器名称 CPU 请求 (m) 内存请求 (Mi)
reconciler 50 200
otel-agent 10 100
hydration-controller(可选) 10 100
git-sync 10 16
gcenode-askpass-sidecar(可选) 10 20
helm-sync 75 128
oci-sync 25 32

1.16

容器名称 CPU 请求 (m) 内存请求 (Mi)
reconciler 50 200
otel-agent 10 100
hydration-controller(可选) 10 100
git-sync 10 200
gcenode-askpass-sidecar(可选) 10 20
helm-sync 50 256
oci-sync 10 200

Autopilot 集群

1.18

容器名称 CPU 请求和限制 (m) 内存请求和限制 (Mi)
reconciler 700 512
otel-agent 10 64
hydration-controller(可选) 200 256
git-sync 20 32
gcenode-askpass-sidecar(可选) 50 64
helm-sync 250 384
oci-sync 50 64

1.17

容器名称 CPU 请求和限制 (m) 内存请求和限制 (Mi)
reconciler 700 512
otel-agent 10 64
hydration-controller(可选) 200 256
git-sync 20 32
gcenode-askpass-sidecar(可选) 50 64
helm-sync 150 256
oci-sync 50 64

1.16

在 1.17.0 之前的 Config Sync 版本中,资源请求对于 Standard 和 Autopilot 是相同的。

如需了解如何替换默认的资源请求和限制,请参阅资源替换

捆绑的 Helm 和 Kustomize 版本

Config Sync 利用 Helm 和 Kustomize 可执行文件在后台渲染配置。下表列出了支持渲染功能的 Config Sync 版本以及捆绑的 Helm 和 Kustomize 版本。

Config Sync 版本 Helm 版本 Kustomize 版本
1.18.0 v3.14.3 v5.3.0
1.17.1 和 1.17.3 v3.13.3 v5.3.0
1.16.3 和 1.17.0 v3.13.1 v5.1.1
1.16.1 和 1.16.2 v3.12.3 v5.1.1
1.16.0 v3.12.2 v5.1.1
1.15.3 v3.12.2 v5.1.0
1.15.1 到 1.15.2 v3.11.3 v5.0.3
1.15.0 v3.11.3 v5.0.1
1.11.0 到 1.14.3 v3.6.3 v4.5.2

如需了解如何通过 Kustomize 呈现 Helm,请参阅使用 Kustomize 配置 Kubernetes。如需了解如何使用 Helm API,请参阅从 Artifact Registry 同步 Helm 图表

后续步骤