同步到只读代码库

本快速入门介绍了如何使用 foo-corp 示例代码库引导具有一组配置的集群,在新集群上开始使用 Anthos Config Management。在本快速入门中,您无需具备对该代码库的写入权限。假设您的组织中的合规性团队负责创建配置,并且每个集群都必须同步到代码库。

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册新帐号

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

    转到项目选择器页面

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Anthos API。

    启用 API

  5. 安装并初始化 Cloud SDK

集群设置

GKE 用户

  1. 创建集群

  2. 设置 kubectl 命令以向集群验证身份,然后使用以下命令创建 RoleBinding,将您自己设置为集群管理员。在显示 [MY-CLUSTER] 的位置使用您的集群名称,并在显示 [USER-ACCOUNT] 的位置使用您的 Cloud Billing 帐号的电子邮件地址。根据您在本地系统上配置 gcloud 命令的方式,您可能需要添加 --project--zone 字段。

    gcloud container clusters get-credentials [MY-CLUSTER]
    
    kubectl create clusterrolebinding cluster-admin-binding \
        --clusterrole cluster-admin --user [USER_ACCOUNT]
    

Anthos clusters on VMware 用戶

准备 Anthos Config Management

如需准备本快速入门所需的工具,请完成以下步骤:

  1. 如果您是首次使用 Anthos Config Management,请通过 Google Cloud Console 或使用 gcloud 命令行工具启用该功能。

    控制台

    如需启用 Anthos Config Management,请执行以下操作:

    1. 访问 Google Cloud Console 中的“Anthos 功能”页面。

      访问 Anthos 功能

    2. 在 Config Managemen 行中,点击启用

    3. 在确认窗口中,点击启用 Config Management

    gcloud

    如需启用 Anthos Config Management,请运行以下命令:

     gcloud alpha container hub config-management enable
    
  2. nomos 命令安装到本地系统上

  3. 如果您要使用 kubectl 安装 Config Sync,请将 Config Management Operator 部署到刚刚创建的集群上。

  4. 使用 Connect 将您的集群注册到 Anthos Environ

配置集群

您可以使用 Google Cloud Console、gcloud 命令行工具或 kubectl 配置您的集群。

控制台

如需在 Google Cloud Console 上配置 Anthos Config Management,请完成以下步骤:

  1. 访问 Google Cloud Console 中的 Anthos Config Management 菜单。

    访问 Anthos Config Management 菜单

  2. 选择已注册的集群,然后点击配置

  3. 针对 ACM 的 Git 代码库身份验证部分中,选择,因为此示例中的代码库是所有人都可读的。

  4. 点击继续

  5. 您的集群的 ACM 设置部分中,完成以下操作:

    1. 版本字段中,选择 Anthos Config Management 的任何版本。
    2. 选中启用 Config Sync 复选框。
    3. 在显示的下拉菜单中,完成以下操作:

      1. 网址字段中,添加 https://github.com/GoogleCloudPlatform/csp-config-management/
      2. 分支字段中,添加 1.0.0
      3. 由于我们使用默认值 HEAD,因此将标记/提交字段留空。
      4. 政策目录字段中,添加 foo-corp
      5. 将其他所有字段保留为默认值。
  6. 点击完成。您将返回到 Anthos Config Management 菜单。几分钟后,您应该会在配置的集群旁边的状态列中看到 Synced

gcloud

创建文件 config-management.yaml 并将以下 YAML 文件复制到其中。由于代码库是所有人都可读的,因此 secretType 设置为 none。如需了解各个字段,请参阅 Git 代码库的配置

  1. 创建文件 config-management.yaml 并将以下 YAML 文件复制到其中:

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
      namespace: config-management-system
    
    spec:
      git:
        syncRepo: https://github.com/GoogleCloudPlatform/csp-config-management/
        syncBranch: 1.0.0
        secretType: none
        policyDir: "foo-corp"
    
  2. 设置变量:

    export CONFIG_YAML=PATH_TO_CONFIG_YAML

  3. 应用 config-management.yaml 文件:

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=$CONFIG_YAML \
         --project=PROJECT_ID
    

    请替换以下内容:

    • CLUSTER_NAME:添加您要将此配置应用于的已注册集群。
    • PROJECT_ID:添加您的项目 ID。

kubectl

创建文件 config-management.yaml 并将以下 YAML 文件复制到其中。由于代码库是所有人都可读的,因此 secretType 设置为 none。如需了解各个字段,请参阅 Git 代码库的配置

apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
  name: config-management
spec:
  # clusterName is required and must be unique among all managed clusters
  clusterName: my-cluster
  git:
    syncRepo: https://github.com/GoogleCloudPlatform/csp-config-management/
    syncBranch: 1.0.0
    secretType: none
    policyDir: "foo-corp"

将配置应用到您的集群:

kubectl apply -f config-management.yaml

如果命令成功,则 Kubernetes 会更新集群上的 Anthos Config Management,以开始从代码库同步集群的配置。如需验证 Anthos Config Management 是否正在运行,请列出 config-management-system 命名空间中运行的所有 Pod:

kubectl get pods -n config-management-system

输出:

NAME                                   READY     STATUS    RESTARTS   AGE
git-importer-5f8bdb59bd-7nn5m          2/2       Running   0          2m
monitor-58c48fbc66-ggrmd               1/1       Running   0          2m
syncer-7bbfd7686b-dxb45                1/1       Running   0          2m

检查您的集群和代码库

foo-corp 代码库包含 cluster/namespaces/ 目录中的配置。将 Anthos Config Management 配置为从代码库中读取内容后,系统便会应用上述配置。

由 Anthos Config Management 管理的所有对象都将 app.kubernetes.io/managed-by 标签设置为 configmanagement.gke.io

列出由 Anthos Config Management 管理的命名空间:

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

输出:

NAME               STATUS   AGE
audit              Active   4m
shipping-dev       Active   4m
shipping-prod      Active   4m
shipping-staging   Active   4m

检查引发系统创建这些命名空间的配置,例如 namespaces/audit/namespace.yamlnamespaces/online/shipping-app-backend/shipping-dev/namespace.yaml

列出由 Anthos Config Management 管理的 ClusterRole:

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

输出:

NAME               AGE
namespace-reader   6m52s
pod-creator        6m52s

检查 ClusterRole 配置声明:

  • cluster/namespace-reader-clusterrole.yaml
  • cluster/pod-creator-clusterrole.yaml

您可以通过相同的方式检查其他对象,例如 Role 和 PodSecurityPolicy。

尝试手动修改代管对象

如果手动修改由 Anthos Config Management 管理的 Kubernetes 对象,系统会自动更新该对象的配置以与代码库中对象的配置匹配。如需对此进行测试,请删除 shipping-dev 命名空间。

kubectl delete namespace shipping-dev

如果您立即检查,命名空间可能会缺失,但在几秒钟内,它会重新出现。例如:

kubectl get ns shipping-dev

输出:

Error from server (NotFound): namespaces "shipping-dev" not found

几秒钟后:

kubectl get ns shipping-dev

输出:

NAME           STATUS   AGE
shipping-dev   Active   3s

清理

如要按照有关 Config Sync 编写配置的快速入门进行操作,请不要进行清理。本快速入门是该主题的前提条件,其中还包括有关清理的说明。

如果您不想参阅高级快速入门,则可以通过删除用于测试的集群进行清理。

后续步骤