使用 Terraform 管理用户集群

本页面适用于平台管理员

本页面介绍了如何使用 Terraform 管理用户集群。

前提条件

您必须拥有有权访问管理员集群的帐号。此帐号必须具有正确的权限才能管理用户集群。此帐号需要平台管理员的部分访问权限,以及对 apiextensions.k8s.io API 组中 customresourcedefinitions 的“列出”权限。您需要使用此帐号配置 Terraform Kubernetes 提供商,以便管理用户集群相关资源。该帐号必须具有以下特定权限:

  • 对管理员集群中用户集群(例如 cluster-user-cluster2)的命名空间的完整访问权限
  • baremetal.cluster.gke.ioclustersnodepools 的完整访问权限
  • managementcenter.anthos.cloud.google.combootstrapservicebindingsconfigmanagementfeaturespecsconfigmanagementbindingsservicemeshfeaturespecsservicemeshbindings 的完整访问权限
  • apiextensions.k8s.iocustomresourcedefinitionslist 权限
  • 如果您需要安装 Anthos Config Management 和 Anthos Service Mesh,则还需要具有获取管理员集群中用户集群命名空间的 Secret 的权限,以便获取用于连接到用户集群的凭据。

下载 Terraform 脚本

从 Anthos Management Center 控制台的支持标签页下载 Terraform 脚本 tar 压缩文件。从该文件中解压缩脚本。

tar xvf terraform-scripts.tar.gz

启动 Terraform 并设置身份验证

您可以通过多种方式设置 Terraform Kubernetes 提供商以向管理员集群 API 进行身份验证。选择最适合您的使用场景的方式,如提供商设置中所述。如果管理员集群中没有足够的权限,请与您的基础架构运维者联系。

cd cluster
terraform init

将 # TODO 身份验证替换为提供商设置身份验证方法之一。

创建用户集群

  1. 指定 cluster/terraform.tfvars 中的所有变量。如果它没有 root 权限,请务必指定 login_user_name。例如:

    admin_cluster_endpoint = "https://10.200.0.100:443"
    cluster_name      = "user-cluster2"
    control_plane_nodes = [
      { "address" = "10.200.0.26" },
      { "address" = "10.200.0.21" },
      { "address" = "10.200.0.22" },
    ]
    control_plane_vip = "10.200.0.110"
    nodepool_nodes = [
      { "address" = "10.200.0.23" },
      { "address" = "10.200.0.25" },
      { "address" = "10.200.0.24" },
    ]
    address_pools = [
      {
        "addresses" = ["10.200.0.111-10.200.0.119"]
        "name"      = "pool1"
      },
    ]
    bootstrap_service            = ["test-bootstrapservice", "test-bootstrapservice-2"]
    anthos_baremetal_version     = "1.9.0"
    
  2. 应用更改:命令成功完成后,系统会创建用户集群。

    terraform apply
    

销毁用户集群

使用以下命令销毁用户集群:

terraform destroy

设置等待时间以控制销毁资源。您可能需要通过更新 wait_duration 变量来进行调整。等待时间的原因在于 Kubernetes 提供商缺少功能(请参阅此功能请求)。

如果用户集群创建因某些问题而处于待处理状态,请勿使用 terraform destroy。而应手动清理安装:

  1. 停止 terraform 命令。

  2. 从 Management Center Console 中删除用户集群

  3. 移除 terraform.tfstate 文件。

启用 Anthos Config Management 和 Anthos Service Mesh

如需启用 Anthos Config Management 和 Anthos Service Mesh,请完成以下步骤:

  1. 启动 Terraform 以处理 features Terraform 项目。

      cd features
      terraform init
    
  2. 为管理员集群设置身份验证。

  3. 将私钥放入 /etc/ssh-key/key 中的 git 代码库。

  4. activate_acmactivate_asm 设置为 true,并定义所有相关变量。例如:

    cluster_name                 = "user-cluster2"
    admin_cluster_endpoint       = "https://10.200.0.100:443"
    user_cluster_ca_certificate  = ""
    activate_acm                 = true
    version_acm                  = "1.7.1"
    enable_acm_policy_controller = true
    acm_git_repo = {
      git_repo_url    = "git@github.com:example/example.git"
      git_repo_branch = "main"
      git_policy_dir  = "."
      git_secret_type = "ssh"
    }
    activate_asm = true
    version_asm  = "1.9.6-asm.1"
    
  5. 应用更改。

    terraform apply
    
  6. (可选)根据需要调整 Anthos Service Mesh 的等待时间。您可以通过更新 wait_duration 变量来实现此目的。

停用 Anthos Config Management 和 Anthos Service Mesh

在删除 Anthos Config Management 之前,我们建议删除集群中由 Anthos Config Management 同步的所有资源。

tfstate 中删除 git-creds Secret 和 config-management-system。在删除 ConfigManagementBindingConfigManagementFeatureSpec 后,Anthos Config Management 运维者负责删除用户集群内的资源。Anthos Config Management 不会立即在管理中心显示为已卸载,该运维者可能需要 5-10 分钟才能删除所有内容。

terraform state rm kubernetes_namespace.config-management-system
terraform state rm kubernetes_secret.git-creds
terraform destroy

已知问题

  • 目前,您无法更新集群。启动更新时,由于问题 1378,提供商会尝试删除现有资源上的终结器。

  • 由于问题 1357,用户集群和 Anthos Service Mesh 上的 destroy 命令依赖于等待时间。建议您根据集群大小调整等待时间。

  • 集群在 Terraform 中显示就绪的速度会比在 Management Center 中显示快(被提供商支持 kubernetes_manifest 数据阻止)。

  • 使用 terraform destroy 删除 Anthos Config Management 需要先从 tfstate 中移除资源。如需了解详情,请参阅停用 Anthos Config Management 和 Anthos Service Mesh。Anthos Config Management 不会立即在管理中心显示为已卸载,该运维者可能需要 5-10 分钟才能删除所有内容。

  • terraform destroy 命令可以删除用户集群命名空间。平台管理员无权删除管理员集群中的命名空间。因此,该命令可能会失败。

限制

  • 利用当前代码可以创建单个用户集群。

  • 当前代码不包含 OIDC 的配置。本部分需要 Kubernetes 提供商具备针对 kubernetes_manifest 资源的修补功能。

后续步骤