快速入门:从代码库同步配置

在本教程中,您将创建一个 Google Kubernetes Engine (GKE) Enterprise 版本集群,并使用 Config Sync 同步到多代码库示例代码库中的配置。

假设您的合规团队负责确保组织中的所有人都遵循内部规则。为了强制执行这些规则,合规团队创建了配置,这些配置已添加到示例代码库中。组织中的每个集群都必须同步到该代码库,并且您需要负责创建和同步集群。

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Make sure that you have the following role or roles on the project: GKE Hub Admin

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      进入 IAM
    2. 选择项目。
    3. 点击 授予访问权限
    4. 新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。

    5. 选择角色列表中,选择一个角色。
    6. 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
    7. 点击 Save(保存)。

    创建集群

    在本部分中,您将创建一个集群,供本教程使用。在实际场景中,您可能会管理多个集群,但为了简化本教程,您只需创建和管理一个集群。

    如需创建集群,请完成以下步骤:

    1. 在 Google Cloud 控制台中,转到 Kubernetes Engine 页面。

      转到 Google Kubernetes Engine

    2. 如果您是首次使用 GKE,请点击启用以启用 Kubernetes Engine API。

    3. 点击 创建

    4. Autopilot 部分中,选择配置

    5. 集群基本信息部分的名称字段中输入 cs-cluster,并将其他所有字段保留为建议的默认值。

    6. 点击创建。您将转到 Kubernetes 集群页面。创建集群可能需要几分钟时间。 如果您在集群旁边的状态列中看到绿色对勾标记,则表示该集群已准备就绪。

    配置集群

    现在您已创建了一个集群,接下来可以配置 Config Sync 以同步到示例代码库的 config-sync-quickstart 目录中的配置。

    如需在 Google Cloud 控制台中配置 Config Sync,请完成以下步骤:

    1. 在 Google Cloud 控制台中,启用 GKE Hub API。

      转到 GKE Hub API

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

      转到“配置”

    3. 点击 安装 Config Sync

    4. 选择自动升级,使 Config Sync 可以自动升级版本。

    5. 安装选项下,选择 Install Config Sync on individual clusters(在个别集群上安装 Config Sync)。

    6. 可用集群表中,选择 cs-cluster,然后点击 Install Config Sync(安装 Config Sync)。在设置标签页中,您应该会在几分钟后看到 cs-cluster 的状态为已启用

    7. Config Sync 信息中心上,点击部署软件包

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

    9. 保留托管在 Git 上的软件包,然后点击继续

    10. 软件包名称字段中,输入 sample-repository

    11. 代码库网址字段中,输入 https://github.com/GoogleCloudPlatform/anthos-config-management-samples

    12. 路径字段中,输入 config-sync-quickstart/multirepo/root

    13. 其他所有字段保留默认值。

    14. 点击部署软件包

      几分钟后,您应该会在 cs-cluster同步状态列中看到已同步

    现在 Config Sync 已同步到代码库,因此它会持续协调集群的状态与代码库中的配置。

    探索 Config Sync 安装

    在以下部分中,您将使用 Cloud Shell 探索 cs-cluster 与其同步的代码库,并确认是否在部署该代码库中的配置。

    打开 Cloud Shell

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. 如需使用以下部分中的命令,请配置 kubectl 命令行访问权限:

      gcloud container clusters get-credentials cs-cluster \
          --zone ZONE \
          --project PROJECT_ID
      

      请替换以下内容:

      • ZONE:您在其中创建集群的可用区
      • PROJECT_ID:您的项目 ID

      输出如下所示:

      Fetching cluster endpoint and auth data.
      kubeconfig entry generated for cs-cluster.
      

      如果系统提示您授权,请点击授权

    检查您的集群和代码库

    config-sync-quickstart 目录包含 ClusterRole、CustomResourceDefinition、Rolebinding、Namespace 和 RepoSync 配置。它还包含用于监控的 Prometheus Operator 配置。Config Sync 配置为从代码库中读取内容后,系统会立即应用这些配置。

    由 Config Sync 管理的所有对象都将 app.kubernetes.io/managed-by 标签设置为 configmanagement.gke.io。您可以使用此标签查看代管式对象。

    如需列出由 Config Sync 管理的命名空间,请运行以下命令:

    kubectl get ns -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    输出类似于以下内容:

    NAME         STATUS   AGE
    gamestore    Active   58s
    monitoring   Active   58s
    

    您可以转到 GitHub 中代码库的 /config-sync-quickstart/multirepo/ 文件夹,探索引发系统创建这些命名空间的配置。

    您可以通过相同的方式检查其他对象,例如 ClusterRole、Reposync、CRD 和 Rolebinding。

    检查同步状态

    使用 Config Sync 时,您可以使用 nomos 命令行工具。此工具为您提供了适用于 Config Sync 的额外功能。

    在本部分中,您将使用 nomos status 命令检查 Config Sync 是否已将所有配置成功同步到您的集群:

    nomos status

    输出内容类似如下:

    *gke_PROJECT_ID_ZONE_cs-cluster
      --------------------
      <root>:root-sync                         https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-sync-quickstart/multirepo/root@main
      SYNCED @ 2023-02-03 16:58:42 +0000 UTC   1fbab5c90af9029b26451fec92e9900d8db23aee
      Managed resources:
         NAMESPACE    NAME                                                                                      STATUS    SOURCEHASH
                      clusterrole.rbac.authorization.k8s.io/namespace-reader                                    Current   1fbab5c
                      clusterrole.rbac.authorization.k8s.io/prometheus-acm                                      Current   1fbab5c
                      clusterrole.rbac.authorization.k8s.io/prometheus-operator                                 Current   1fbab5c
                      clusterrole.rbac.authorization.k8s.io/webstore-admin                                      Current   1fbab5c
                      clusterrolebinding.rbac.authorization.k8s.io/prometheus-acm                               Current   1fbab5c
                      clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator                          Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com   Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com         Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/anvils.acme.com                             Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com           Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com                Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com          Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com       Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com       Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com          Current   1fbab5c
                      customresourcedefinition.apiextensions.k8s.io/webstores.marketplace.com                   Current   1fbab5c
                      namespace/gamestore                                                                       Current   1fbab5c
                      namespace/monitoring                                                                      Current   1fbab5c
         gamestore    reposync.configsync.gke.io/repo-sync                                                      Current   1fbab5c
         gamestore    rolebinding.rbac.authorization.k8s.io/gamestore-admin                                     Current   1fbab5c
         gamestore    rolebinding.rbac.authorization.k8s.io/gamestore-webstore-admin                            Current   1fbab5c
         monitoring   deployment.apps/prometheus-operator                                                       Current   1fbab5c
         monitoring   prometheus.monitoring.coreos.com/acm                                                      Current   1fbab5c
         monitoring   service/prometheus-acm                                                                    Current   1fbab5c
         monitoring   service/prometheus-operator                                                               Current   1fbab5c
         monitoring   serviceaccount/prometheus-acm                                                             Current   1fbab5c
         monitoring   serviceaccount/prometheus-operator                                                        Current   1fbab5c
         monitoring   servicemonitor.monitoring.coreos.com/acm-service                                          Current   1fbab5c
      --------------------
      gamestore:repo-sync                      https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-sync-quickstart/multirepo/namespaces/gamestore@main
      SYNCED @ 2023-02-03 16:58:51 +0000 UTC   1fbab5c90af9029b26451fec92e9900d8db23aee
      Managed resources:
         NAMESPACE   NAME                                 STATUS    SOURCEHASH
         gamestore   configmap/store-inventory            Current   1fbab5c
         gamestore   webstore.marketplace.com/gameplace   Current   1fbab5c
    

    在此输出中,您可以看到已从两个代码库成功同步了 cs-cluster。此外,由于所有资源的状态均为 Current,因此资源的状态与期望状态匹配。

    清理

    1. 转到 Google Cloud 控制台中的 GKE 菜单。

      转到 GKE

    2. cs-cluster 旁边,点击 操作,然后点击 删除

    3. 当系统提示您确认时,再次点击删除

    后续步骤