本页面适用于平台管理员。
本页面介绍了如何使用 Terraform 管理用户集群。
前提条件
您必须拥有有权访问管理员集群的帐号。此帐号必须具有正确的权限才能管理用户集群。此帐号需要平台管理员的部分访问权限,以及对 apiextensions.k8s.io
API 组中 customresourcedefinitions
的“列出”权限。您需要使用此帐号配置 Terraform Kubernetes 提供商,以便管理用户集群相关资源。该帐号必须具有以下特定权限:
- 对管理员集群中用户集群(例如
cluster-user-cluster2
)的命名空间的完整访问权限 - 对
baremetal.cluster.gke.io
中clusters
和nodepools
的完整访问权限 - 对
managementcenter.anthos.cloud.google.com
中bootstrapservicebindings
、configmanagementfeaturespecs
、configmanagementbindings
、servicemeshfeaturespecs
、servicemeshbindings
的完整访问权限 - 对
apiextensions.k8s.io
中customresourcedefinitions
的list
权限 - 如果您需要安装 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 身份验证替换为提供商设置身份验证方法之一。
创建用户集群
指定
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"
应用更改:命令成功完成后,系统会创建用户集群。
terraform apply
销毁用户集群
使用以下命令销毁用户集群:
terraform destroy
设置等待时间以控制销毁资源。您可能需要通过更新 wait_duration
变量来进行调整。等待时间的原因在于 Kubernetes 提供商缺少功能(请参阅此功能请求)。
如果用户集群创建因某些问题而处于待处理状态,请勿使用 terraform destroy
。而应手动清理安装:
停止 terraform 命令。
从 Management Center Console 中删除用户集群
移除
terraform.tfstate
文件。
启用 Anthos Config Management 和 Anthos Service Mesh
如需启用 Anthos Config Management 和 Anthos Service Mesh,请完成以下步骤:
启动 Terraform 以处理
features
Terraform 项目。cd features terraform init
为管理员集群设置身份验证。
将私钥放入
/etc/ssh-key/key
中的 git 代码库。将
activate_acm
和activate_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"
应用更改。
terraform apply
(可选)根据需要调整 Anthos Service Mesh 的等待时间。您可以通过更新
wait_duration
变量来实现此目的。
停用 Anthos Config Management 和 Anthos Service Mesh
在删除 Anthos Config Management 之前,我们建议删除集群中由 Anthos Config Management 同步的所有资源。
从 tfstate
中删除 git-creds
Secret 和 config-management-system
。在删除 ConfigManagementBinding
和 ConfigManagementFeatureSpec
后,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 资源的修补功能。