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

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

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

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. 确保您拥有项目的以下一个或多个角色: GKE Hub Admin

    检查角色

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

      转到 IAM
    2. 选择项目。
    3. 主账号列中,找到您的电子邮件地址所在的行。

      如果您的电子邮件地址不在此列,则表示您没有任何角色。

    4. 在您的电子邮件地址所在的行对应的角色列中,检查角色列表是否包含所需的角色。

    授予角色

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

      转到 IAM
    2. 选择项目。
    3. 点击 授予访问权限
    4. 新的主账号字段中,输入您的电子邮件地址。
    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. 安装选项下,选择在各个集群上安装 Config Sync

  6. 可用集群表中,选择 cs-cluster,然后点击安装 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. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  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、命名空间和 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. 当系统提示您确认时,再次点击删除

后续步骤