本页面介绍如何为 Google Distributed Cloud 创建管理员集群。管理员集群管理运行工作负载的用户集群。如果您想使用拓扑网域,请参阅创建要与拓扑网域搭配使用的管理员集群。
本页面适用于设置、监控和管理技术基础设施的管理员、架构师和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
如需详细了解管理员集群,请参阅安装概览。
准备工作
确保您已设置并且可以登录管理员工作站,如创建管理员工作站中所述。
确保服务账号的 JSON 密钥文件位于管理员工作站上。
查看 IP 地址规划文档。确保您有足够的 IP 地址供三个控制平面节点和一个控制平面 VIP 使用。如果您计划创建任何 kubeception 用户集群,则必须有足够的 IP 地址供这些用户集群的控制平面节点使用。
查看负载均衡概览,并重新考虑有关要使用的负载均衡器类型的决定。对于手动负载均衡器,您必须先设置负载均衡器,然后才能创建管理员集群。
如果您使用
gkectl
创建管理员集群,请决定您要为 Google Distributed Cloud 组件使用公共注册表还是私有注册表。如需了解如何使用私有 Docker 注册表,请参阅privateRegistry
。Terraform 和 Google Cloud 控制台均不支持使用私有 Docker 注册表来存储系统组件。决定您要在管理员集群节点上运行的操作系统类型。
如果您的组织要求出站流量通过代理服务器,请务必将所需的 API 和 Artifact Registry 地址列入许可名单。
在 1.29 版及更高版本中,服务器端预检检查默认处于启用状态。服务器端预检检查需要额外的防火墙规则。在管理员集群的防火墙规则中,搜索“预检检查”,并确保已配置所有必需的防火墙规则。服务器端预检检查在引导集群上运行,而不是在管理员工作站上本地运行。
使用您选择的工具创建管理员集群
本部分提供使用 gkectl
、Terraform 和 Google Cloud 控制台创建管理员集群的步骤。如需了解如何选择工具以及某些工具的限制,请参阅选择用于管理集群生命周期的工具。
gkectl
在 1.32 版及更高版本中,默认情况下,使用 gkectl
创建的新集群会启用高级集群。请务必查看运行高级集群时的差异。如果您不想启用高级集群,则必须在配置文件中将 enableAdvancedCluster
设置为 false
。
过程概览
以下是创建管理员集群所涉及的主要步骤:
- 填写配置文件。
- 通过完成并验证管理员集群配置文件、凭据配置文件以及可能的 IP 地址块文件,指定新管理员集群的详细信息。
- 将操作系统映像导入 vSphere,并将容器映像推送到私有注册表(如果适用的话)。
- 运行
gkectl prepare
。
- 创建管理员集群。
- 使用
gkectl
按照已完成配置文件中所指定的创建新的管理员集群。Google Distributed Cloud 在创建管理员集群时,会部署一个 Kubernetes in Docker (kind) 集群,用于暂时托管创建管理员集群所需的 Kubernetes 控制器。此暂时性集群称为引导集群。用户集群由其管理员创建和升级,无需使用引导集群。
- 验证管理员集群是否正在运行。
- 使用
kubectl
查看集群节点。
此过程结束时,您将有一个正在运行的管理员集群,可用于创建和管理用户集群。
如果您使用 VPC Service Controls,在运行某些 gkectl
命令时可能会看到错误,例如 "Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
。为避免这些错误,请在命令中添加 --skip-validation-gcp
参数。
填写配置文件
确保您的管理员工作站具有所需的
gkectl
版本。通常,您使用的gkectl
版本应与创建集群时将使用的版本相同。您可以在集群配置文件中的gkeOnPremVersion
字段中指定集群版本。在创建集群期间,系统会强制执行以下版本规则:gkectl
次要版本不能低于集群的次要版本。例如,不允许使用 1.29 版gkectl
创建 1.30 版集群。补丁版本无关紧要。例如,您可以使用gkectl
版本 1.29.0-gke.1456 创建具有更高补丁版本的集群,例如 1.29.1000-gke.94。gkectl
次要版本最多只能比集群版本高两个次要版本。例如,如果您要创建 1.28 集群,则gkectl
版本可以是 1.29 或 1.30。但您不能使用gkectl
版本 1.31,因为它比集群版本高三个次要版本。
如果需要,请参阅下载
gkectl
以获取受支持的gkectl
版本。
如果您使用了 gkeadm
来创建管理员工作站,它会生成一个名为 admin-cluster.yaml
的配置文件。
如果您不是使用 gkeadm
来创建管理员工作站,请在管理员工作站上运行以下命令来生成 admin-cluster.yaml
:
gkectl create-config admin
此配置文件用于创建管理员集群。
通过扫描管理员集群配置文件文档熟悉该配置文件。建议您在单独的标签页或窗口中打开该文档,因为您在完成以下步骤时将参考它。
name
如果要为管理员集群指定名称,请填写 name
字段。
bundlePath
该软件包是一个包含集群组件的压缩文件。它包含在管理员工作站中。系统已为您填写此字段。
vCenter
此部分中的字段已填充您在创建管理员工作站时输入的值。
enableAdvancedCluster
在 1.31 版中,如果您要启用高级集群功能,请将 enableAdvancedCluster
设置为 true
。
请注意以下版本差异:
在 1.31 版中,高级集群功能处于预览阶段:
- 您只能在创建集群时为新的 1.31 版集群启用高级集群。
- 启用高级集群后,您将无法将集群升级到 1.32。请仅在测试环境中启用高级集群。
在 1.32 版中,高级集群功能为正式版。默认情况下,管理员集群会创建为高级集群。如果您要创建非高级集群,必须明确将
enableAdvancedCluster
设置为false
。
network
请填写 network.controlPlaneIPBlock
部分和 network.hostConfig
部分。此外,将 adminMaster.replicas
设置为 3
。
network.podCIDR 和 network.serviceCIDR 字段具有预填充的值,您可以保持不变,除非它们与已在您的网络中使用的地址冲突。Kubernetes 会使用这些范围将 IP 地址分配给集群中的 Pod 和 Service。
根据需要填写配置文件的 network 部分中的其余字段。
loadBalancer
为管理员集群的 Kubernetes API 服务器预留一个 VIP 地址。提供您的 VIP 作为 loadBalancer.vips.controlPlaneVIP
的值
如需了解详情,请参阅管理员集群子网中的 VIP。
确定要使用的负载均衡类型。以下是各个选项:
MetalLB 捆绑式负载均衡。将
loadBalancer.kind
设置为"MetalLB"
。手动负载均衡。将
loadBalancer.kind
设置为"ManualLB"
,并移除manualLB
部分。
如需详细了解负载均衡选项,请参阅负载均衡概览。
antiAffinityGroups
根据您的偏好将 antiAffinityGroups.enabled
设置为 true
或 false
。
使用此字段可指定您是否希望 Google Distributed Cloud 为管理员集群节点创建 VMware 分布式资源调度器 (DRS) 反亲和性规则,使其分布到数据中心内的至少三个物理主机上。
adminMaster
如果要为管理员集群的控制平面节点指定 CPU 和内存,请填写 adminMaster
部分中的 cpus
和 memoryMB
字段。
管理员集群必须有 3 个控制平面节点。将 adminMaster
部分中的 replicas
字段设置为 3
。
proxy
如果将拥有管理员集群节点的网络位于代理服务器后面,请填写 proxy
部分。
privateRegistry
确定 Google Distributed Cloud 组件的容器映像的存储位置。以下是各个选项:
Artifact Registry
您自己的私有 Docker 注册表。
如果要使用自己的私有注册表,请填写
privateRegistry
部分。
componentAccessServiceAccountKeyPath
Google Distributed Cloud 使用组件访问服务账号从 Artifact Registry 下载集群组件。此字段包含组件访问服务账号的 JSON 密钥文件的路径。
系统已为您填写此字段。
gkeConnect
通过填写 gkeConnect
部分,将管理员集群注册到 Google Cloud 舰队。如果您在配置文件中添加 stackdriver
和 cloudAuditLogging
部分,则 gkeConnect.projectID
中的 ID 必须与 stackdriver.projectID
和 cloudAuditLogging.projectID
中设置的 ID 相同。如果项目 ID 不同,集群创建将失败。
在 1.28 版及更高版本中,您可以选择在 gkeConnect.location
中指定 Fleet 服务和 Connect 服务运行的区域。如果您不添加此字段,则集群会使用这些服务的全球实例。
如果添加 gkeConnect.location
,则您指定的区域必须与 cloudAuditLogging.clusterLocation
、stackdriver.clusterLocation
和 gkeOnPremAPI.location
中配置的区域相同。如果区域不相同,集群创建将失败。
gkeOnPremAPI
如果在Google Cloud 项目中启用了 GKE On-Prem API,则该项目中的所有集群都会在 stackdriver.clusterLocation
中配置的区域中自动注册 GKE On-Prem API。
gkeOnPremAPI.location
区域必须与 cloudAuditLogging.clusterLocation
、gkeConnect.location
和 stackdriver.clusterLocation
中指定的区域相同。如果区域不相同,集群创建将失败。
如果您想要在 GKE On-Prem API 中注册项目中的所有集群,请务必执行准备工作中的步骤,以在项目中激活和使用 GKE On-Prem API。
如果您不想在 GKE On-Prem API 中注册集群,请添加此部分并将
gkeOnPremAPI.enabled
设置为false
。如果您不想注册项目中的任何集群,请在项目中停用gkeonprem.googleapis.com
(GKE On-Prem API 的服务名称)。如需查看相关说明,请参阅停用服务。
stackdriver
如果要为集群启用 Cloud Logging 和 Cloud Monitoring,请填写 stackdriver
部分。
默认情况下,此部分是必需的。也就是说,如果您不填写此部分,则必须在运行 gkectl create admin
时添加 --skip-validation-stackdriver
标志。
请注意以下要求:
如果您启用高级集群,则必须在
cloudAuditLogging.serviceAccountKeyPath
和stackdriver.serviceAccountKeyPath
中指定相同的路径。stackdriver.projectID
中的 ID 必须与gkeConnect.projectID
和cloudAuditLogging.projectID
中的 ID 相同。在
stackdriver.clusterLocation
中设置的 Google Cloud 区域必须与在cloudAuditLogging.clusterLocation
和gkeConnect.location
中设置的区域相同。此外,如果gkeOnPremAPI.enabled
为true
,则必须在gkeOnPremAPI.location
中设置同一区域。
如果项目 ID 和区域不相同,则集群创建会失败。
cloudAuditLogging
如果要将集群的 Kubernetes API 服务器中的审核日志与 Cloud Audit Logs 集成,请填写 cloudAuditLogging
部分。
请注意以下要求:
如果您启用高级集群,则必须在
cloudAuditLogging.serviceAccountKeyPath
和stackdriver.serviceAccountKeyPath
中指定相同的路径。cloudAuditLogging.projectID
中的 ID 必须与gkeConnect.projectID
和stackdriver.projectID
中的 ID 相同。在
cloudAuditLogging.clusterLocation
中设置的 Google Cloud 区域必须与在stackdriver.clusterLocation
和gkeConnect.location
中设置的区域相同(如果配置文件包含该字段)。此外,如果gkeOnPremAPI.enabled
为true
,则必须在gkeOnPremAPI.location
中设置同一区域。
如果项目 ID 和区域不相同,则集群创建会失败。
clusterBackup
如果您要启用管理员集群备份,请将 clusterBackup.datastore
设置为您要在其中保存集群备份的 vSphere 数据存储区。
如果您启用高级集群,请移除此部分。不支持将管理员集群备份到 vSphere 数据存储区。
autoRepair
如果您要为管理员集群启用自动节点修复功能,请将 autoRepair.enabled
设置为 true
。
secretsEncryption
如果要启用始终开启的 Secret 加密,请填写 secretsEncryption
部分。
如果您启用高级集群,请将 secretsEncryption.enabled
设置为 false
。不支持始终开启的 Secret 加密。
osImageType
决定您要用于管理员集群节点的操作系统映像类型,并相应地填写 osImageType
部分。
如果您启用高级集群,请将 osImageType
设置为 ubuntu_cgroupv2
或 ubuntu_containerd
。
已填写的配置文件的示例
以下是填写好的管理员集群配置文件的示例。该配置支持部分(但不是全部)可用功能。
vc-01-admin-cluster.yaml
apiVersion: v1 kind: AdminCluster name: "gke-admin-01" bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.28.0-gke.1-full.tgz" vCenter: address: "vc01.example" datacenter: "vc-01" cluster: "vc01-workloads-1" resourcePool: "vc-01-pool-1" datastore: "vc01-datastore-1" caCertPath: "/usr/local/google/home/me/certs/vc01-cert.pem"" credentials: fileRef: path: "credential.yaml" entry: "vCenter" network: hostConfig: dnsServers: - "203.0.113.1" - "198.51.100.1" ntpServers: - "216.239.35.4" serviceCIDR: "10.96.232.0/24" podCIDR: "192.168.0.0/16" vCenter: networkName: "vc01-net-1" controlPlaneIPBlock: netmask: "255.255.248.0" gateway: "21.0.143.254" ips: - ip: "21.0.140.226" hostname: "admin-cp-vm-1" - ip: "21.0.141.48" hostname: "admin-cp-vm-2" - ip: "21.0.141.65" hostname: "admin-cp-vm-3" loadBalancer: vips: controlPlaneVIP: "172.16.20.59" kind: "MetalLB" antiAffinityGroups: enabled: true adminMaster: cpus: 4 memoryMB: 16384 replicas: 3 componentAccessServiceAccountKeyPath: "sa-key.json" gkeConnect: projectID: "my-project-123" registerServiceAccountKeyPath: "connect-register-sa-2203040617.json" stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" enableVPC: false serviceAccountKeyPath: "log-mon-sa-2203040617.json" disableVsphereResourceMetrics: false clusterBackup: datastore: "vc-01-datastore-bu" autoRepair: enabled: true osImageType: "ubuntu_containerd"
验证配置文件
填写管理员集群配置文件后,请运行 gkectl check-config
以验证该文件是否有效:
gkectl check-config --config ADMIN_CLUSTER_CONFIG
将 ADMIN_CLUSTER_CONFIG 替换为管理员集群配置文件的路径。
如果该命令返回任何失败消息,请修复问题并再次验证文件。
如果您想跳过更耗时的验证,请传递 --fast
标志。如需跳过各项验证,请使用 --skip-validation-xxx
标志。如需详细了解 check-config
命令,请参阅运行预检检查。
获取操作系统映像
运行 gkectl prepare
以初始化您的 vSphere 环境:
gkectl prepare --config ADMIN_CLUSTER_CONFIG
gkectl prepare
命令可执行以下预备任务:
将操作系统映像导入 vSphere 并将其标记为虚拟机模板。
如果您使用的是私有 Docker 注册表,则会将容器映像推送到您的注册表。
(可选)验证容器映像的构建证明,从而确保这些映像已由 Google 构建和签名,并已准备好部署。
创建管理员集群
创建管理员集群:
gkectl create admin --config ADMIN_CLUSTER_CONFIG
如果您使用 VPC Service Controls,在运行某些 gkectl
命令时可能会看到错误,例如 "Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
。为避免这些错误,请在命令中添加 --skip-validation-gcp
参数。
发生故障后恢复管理员集群创建
如果管理员集群创建失败或被取消,您可以再次运行 create
命令:
gkectl create admin --config ADMIN_CLUSTER_CONFIG
找到管理员集群 kubeconfig 文件的位置
gkectl create admin
命令会在当前目录中创建一个名为 kubeconfig
的 kubeconfig 文件。您稍后需要此 kubeconfig 文件才能与管理员集群进行交互。
kubeconfig 文件包含您的管理员集群的名称。如需查看集群名称,您可以运行以下命令:
kubectl config get-clusters --kubeconfig ADMIN_CLUSTER_KUBECONFIG
输出会显示集群的名称。例如:
NAME gke-admin-tqk8x
如果愿意,您可以更改 kubeconfig 文件的名称和位置。
管理 checkpoint.yaml
文件
本部分仅适用于非高可用性管理员集群。创建高可用性管理员集群时不会使用 checkpoint.yaml
文件。
在您运行 gkectl create admin
命令创建管理员集群时,它在管理员集群数据磁盘所在的数据存储区文件夹中创建了一个检查点文件。默认情况下,此文件的名称为 DATA_DISK_NAME‑checkpoint.yaml
。如果 DATA_DISK_NAME 的长度大于或等于 245 个字符,则由于 vSphere 对文件名长度的限制,其名称为 DATA_DISK_NAME.yaml
。
此文件包含管理员集群状态和凭据,用于未来的升级。除非您按照删除管理员集群的流程操作,否则请勿删除此文件。
如果您已在 vCenter Server 实例中启用了虚拟机加密,则必须拥有 Cryptographic operations.Direct Access 特权才能创建或升级管理员集群。否则,检查点不会上传。如果您无法获取此权限,则可以在运行相关命令时使用隐藏的标志 --disable-checkpoint
禁止上传检查点文件。
在您运行 gkectl upgrade admin
命令或运行影响管理员集群的 gkectl update
命令时,checkpoint.yaml
文件会自动更新。
验证管理员集群正在运行
验证管理员集群是否正在运行:
kubectl get nodes --kubeconfig ADMIN_CLUSTER_KUBECONFIG
将 ADMIN_CLUSTER_KUBECONFIG 替换为管理员集群 kubeconfig 文件的路径。
输出会显示管理员集群节点。 例如:
admin-cp-vm-1 Ready control-plane,master ... admin-cp-vm-2 Ready control-plane,master ... admin-cp-vm-3 Ready control-plane,master ...
备份文件
我们建议您备份管理员集群 kubeconfig 文件。也就是说,将 kubeconfig 文件从管理员工作站复制到其他位置。因此,如果您失去对管理员工作站的访问权限,或者管理员工作站上的 kubeconfig 文件被意外删除,您仍然可以访问管理员集群。
我们还建议您备份管理员集群的 SSH 私钥。然后,如果您失去对管理员集群的访问权限,您仍然可以使用 SSH 连接到管理员集群节点。这样,您就可以排查和调查与管理员集群连接的问题。
将 SSH 密钥从管理员集群提取到名为 admin-cluster-ssh-key
的文件:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets -n kube-system sshkeys \ -o jsonpath='{.data.vsphere_tmp}' | base64 -d > admin-cluster-ssh-key
现在,您可以将 admin-cluster-ssh-key
备份到您选择的其他位置。、
RBAC 政策
当您在管理员集群配置文件中填写 gkeConnect
部分后,系统会在创建或更新集群期间将集群注册到您的舰队。为了启用舰队管理功能, Google Cloud 会部署 Connect Agent,并创建一个 Google 服务账号来代表集群注册到的项目。Connect Agent 会建立与该服务账号的连接,以处理向集群的 Kubernetes API 服务器发出的请求。这样,您就能够在 Google Cloud中访问集群和工作负载管理功能(包括访问Google Cloud 控制台),以便与集群进行交互。
管理员集群的 Kubernetes API 服务器必须能够对来自 Connect Agent 的请求进行授权。为确保这一点,需在服务账号上配置以下基于角色的访问控制 (RBAC) 政策:
模拟政策,用于授权 Connect Agent 代表服务账号向 Kubernetes API 服务器发送请求。
权限政策,用于指定允许对其他 Kubernetes 资源执行的操作。
您需要有服务账号和 RBAC 政策,才能在 Google Cloud 控制台中管理用户集群的生命周期。
Terraform
过程概览
在创建管理员集群之前,您需要在管理员工作站上运行 gkectl register bootstrap
命令。此命令会在管理员工作站上部署 Kubernetes in Docker (kind) 集群。此引导集群托管创建管理员集群所需的 Kubernetes 控制器。创建管理员集群时,引导集群上的控制器会预配节点、运行预检检查,并将管理员集群注册到舰队。成功创建管理员集群后,系统会自动删除引导集群。
以下是使用 Terraform 创建管理员集群的概要步骤:
- 填写配置文件。
- 使用 google_gkeonprem_vmware_admin_cluster 资源和下面的示例来创建
main.tf
配置文件。
- 创建
bootstrap
集群。 - 运行
gkectl register bootstrap
以创建引导集群。当该命令完成引导集群的创建后,输出会提示您完成管理员集群配置。该进程会继续运行,直到创建管理员集群为止。
- 创建
- 创建管理员集群。
- 在另一个终端窗口中或在有权访问 GKE On-Prem API 的另一台计算机上,运行
terraform
命令,以按照已完成的main.tf
配置文件中所指定的创建新的管理员集群。
填写配置文件
以下示例展示了如何使用 MetalLB 创建具有三个控制平面节点的高可用性 (HA) 管理员集群。在 1.28 及更高版本中,新管理员集群必须具有高可用性。鉴于此要求,您必须将 control_plane_node.replicas
设置为 3。
如需了解详情和其他示例,请参阅 google_gkeonprem_vmware_admin_cluster
参考文档。 如需了解如何使用私有注册表来存储系统映像,请参阅配置私有容器注册表。
填写以下示例中的占位变量,然后将其复制并粘贴到 main.tf
。如果您使用 gkeadm
创建了管理员工作站,请打开管理员工作站配置文件,以便将 vCenter
部分中的值复制到相应的占位变量中。
resource "google_gkeonprem_vmware_admin_cluster" "admin-cluster-metallb" { provider = google-beta name = "ADMIN_CLUSTER_NAME" project = "PROJECT_ID" location = "REGION" description = "DESCRIPTION" bootstrap_cluster_membership = "projects/PROJECT_ID/locations/REGION/memberships/bootstrap-ADMIN_CLUSTER_NAME" on_prem_version = "VERSION" image_type = "IMAGE_TYPE" vcenter { address = "VCENTER_ADDRESS" datacenter = "DATA_CENTER" cluster = "VCENTER_CLUSTER" resource_pool = "RESOURCE_POOL" datastore = "DATASTORE" ca_cert_data = "CA_CERT_DATA" } network_config { service_address_cidr_blocks = ["10.96.232.0/24"] pod_address_cidr_blocks = ["192.168.0.0/16"] vcenter_network = "NETWORK" dhcp_ip_config { enabled = true } host_config { dns_servers = ["DNS_SERVERS"] ntp_servers = ["NTP_SERVERS"] } ha_control_plane_config { control_plane_ip_block { gateway = "GATEWAY" netmask = "NETMASK" ips { hostname = "CONTROL_PLANE_HOST_1" ip = "CONTROL_PLANE_NODE_IP_1" } ips { hostname = "CONTROL_PLANE_HOST_2" ip = "CONTROL_PLANE_NODE_IP_2" } ips { hostname = "CONTROL_PLANE_HOST_3" ip = "CONTROL_PLANE_NODE_IP_3" } } } } control_plane_node { cpus = NUM_CPUS memory = MEMORY replicas = 3 } load_balancer { vip_config { control_plane_vip = "CONTROL_PLANE_VIP" } metal_lb_config { enabled = true } } }
替换以下内容:
ADMIN_CLUSTER_NAME
:管理员集群的名称。名称的长度不得超过 20 个字符。PROJECT_ID
: Google Cloud 项目 ID。REGION
:GKE On-Prem API (gkeonprem.googleapis.com
)、Fleet 服务 (gkehub.googleapis.com
) 和 Connect 服务 (gkeconnect.googleapis.com
) 在其中运行的 Google Cloud 区域。请指定us-west1
或其他受支持的区域。location
字段对应于gkectl register bootstrap
命令中的--location
标志。DESCRIPTION
:管理员集群的说明。VERSION
:集群的 Google Distributed Cloud 版本。仅在 1.28 版及更高版本中支持使用 Terraform 创建集群。您在此处指定的版本必须与您在gkectl register bootstrap
命令的--bundle-path
标志中指定的软件包版本一致。如需查看版本列表,请参阅 Google Distributed Cloud 版本。IMAGE_TYPE
:要在管理员集群节点上运行的操作系统映像的类型。指定以下值之一:“ubuntu_containerd
”“cos
”“ubuntu_cgv2
”或“cos_cgv2
”。VCENTER_ADDRESS
:vCenter Server 地址。管理员工作站配置文件:使用
vCenter.credentials.address
字段中的值。vcenter.address
字段对应于gkectl register bootstrap
命令中的--vcenter-address
标志。
DATA_CENTER
:vCenter 数据中心的名称。管理员工作站配置文件:使用
vCenter.datacenter
字段中的值。vcenter.datacenter
字段对应于gkectl register bootstrap
命令中的--vcenter-datacenter
标志。
VCENTER_CLUSTER
:vCenter 集群的名称。管理员工作站配置文件:使用
vCenter.cluster
字段中的值。vcenter.cluster
字段对应于gkectl register bootstrap
命令中的--vcenter-cluster
标志。
RESOURCE_POOL
:vCenter 资源池的名称或路径。管理员工作站配置文件:使用
vCenter.resourcePool
字段中的值。vcenter.resource_pool
字段对应于gkectl register bootstrap
命令中的--vcenter-resource-pool
标志。
DATASTORE
:vCenter 数据存储区的名称。您指定的值必须是名称,而不是路径。如果您需要输入路径,请添加以下字段:folder = "FOLDER"
管理员工作站配置文件:使用
vCenter.datastore
字段中的值。vcenter.datastore
字段对应于gkectl register bootstrap
命令中的--vcenter-datastore
标志。
如果您想为集群节点使用虚拟机存储政策,请移除
vcenter.datastore
字段并添加vcenter.storage_policy_name
。此外,将--vcenter-storage-policy
标志添加到gkectl register bootstrap
命令。您必须为vcenter.datastore
或vcenter.storage_policy_name
指定值,但不能同时为两者指定值。FOLDER
:集群虚拟机所在的 vCenter 文件夹的名称。如果您不使用文件夹,请移除此字段。管理员工作站配置文件:使用
vCenter.folder
字段中的值。vcenter.folder
字段对应于gkectl register bootstrap
命令中的--vcenter-folder
标志。
CA_CERT_DATA
:输入 PEM 格式的 vCenter CA 证书。如需获取 CA 证书数据,请执行以下操作:运行以下命令:
cat CA_CERT_PATH_LOCAL | tr '\n' '\\n'
将
CA_CERT_PATH_LOCAL
替换为 vCenter Server 的根 CA 证书的路径。如果您使用gkeadm
创建了管理员工作站,则可以使用管理员工作站配置文件中caCertPath
字段的值(即本地计算机上的路径)。gkeadm
将 CA 证书文件复制到管理员工作站。您必须在gkectl register bootstrap
命令的--vcenter-ca-cert-path
标志中指定管理员工作站路径。复制上述命令输出的证书,并将其粘贴到文本编辑器中。将所有反斜杠字符 (\) 实例替换为换行符 (\n)。
复制修改后的证书,并将其粘贴到
CA_CERT_DATA
占位变量中。
NETWORK
:输入 vCenter 网络的名称。管理员工作站配置文件:使用
vCenter.network
字段中的值。network_config.vcenter_network
字段对应于gkectl register bootstrap
命令中的--vcenter-network
标志。
GATEWAY
:包含控制平面集群节点的子网的默认网关的 IP 地址。NETMASK
:包含控制平面集群节点的子网的子网掩码。DNS_SERVERS
:DNS 服务器的 IP 地址。NTP_SERVERS
:时间 (NTP) 服务器的 IP 地址。在
control_plane_ip_block.ips
部分中,输入三个控制平面节点的 IP 地址和(可选)主机名。如果您未输入主机名,请从配置中移除hostname
字段。NUM_CPUS
:管理员集群中的每个控制平面节点的 vCPU 数量。不得少于 4 个。MEMORY
:管理员集群中每个控制平面节点的内存大小(以 MiB 为单位)。必须至少为 8192,但建议为 16384。CONTROL_PLANE_VIP
:您选择为管理员集群的 Kubernetes API 服务器在负载均衡器上配置的 IP 地址。
验证配置文件和方案
在 main.tf
所在的目录中,运行以下命令:
初始化 Terraform:
terraform init
Terraform 会安装所有需要的库,例如 Google Cloud 提供程序。根据需要修复
maint.tf
中的所有错误。创建 Terraform 方案:
terraform plan -out tfplan
检查配置,并根据需要进行更改。
在应用该方案之前,您必须先创建引导集群,如下一部分中所述。
创建引导集群
运行 gkectl register bootstrap
命令时,系统会提示您输入 vCenter 账号的用户名和密码。确保您有可用的凭证。如果您使用 gkeadm
创建了管理员工作站,则用户名和密码位于 credential.yaml
文件中。
使用 SSH 登录管理员工作站。
使用 Google Cloud CLI 进行身份验证:
gcloud auth login
运行以下命令以创建引导集群。许多标志值与
main.tf
字段中的值相同。不过请注意,该命令需要其他值,您必须在提供的占位变量中指定这些值。gkectl register bootstrap \ --target-cluster-name=ADMIN_CLUSTER_NAME \ --project-id=PROJECT_ID \ --location=REGION \ --vcenter-address=VCENTER_ADDRESS \ --vcenter-datacenter=DATA_CENTER \ --vcenter-cluster=VCENTER_CLUSTER \ --vcenter-resource-pool=RESOURCE_POOL \ --vcenter-datastore=DATASTORE \ --vcenter-network=NETWORK \ --vcenter-ca-cert-path=CA_CERT_PATH \ --bundle-path=BUNDLE_PATH \ --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \ --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \ --stackdriver-service-account-key-path=LOG_MON_SA_PATH \ --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH
将以下内容替换为管理员工作站路径:
CA_CERT_PATH
:vCenter Server 的根 CA 证书的路径。BUNDLE_PATH
:软件包文件的路径。如果您使用gkeadm
创建了管理员工作站,则软件包文件位于/var/lib/gke/bundles/
中。文件名取决于 Google Distributed Cloud 版本,例如gke-onprem-vsphere-1.31.0-gke.889-full.tgz
。COMPONENT_ACCESS_SA_PATH
:组件访问服务账号的密钥文件的路径。CONNECT_REGISTER_SA_PATH
:连接注册服务账号的密钥文件的路径。LOG_MON_SA_PATH
:日志记录监控服务账号的密钥文件的路径。CLOUD_AUDIT_SA_PATH
:审核日志记录服务账号的路径。如果您未创建审核日志记录服务账号,请指定日志记录监控服务账号的密钥文件路径。
根据需要修改命令,以添加以下标志:
- 如果您在
main.tf
中指定了文件夹,请添加以下标志:--vcenter-folder=FOLDER
- 如果您在
main.tf
中指定了虚拟机存储政策,请移除--vcenter-datastore
并添加以下标志:--vcenter-storage-policy-name=STORAGE_POLICY_NAME
- 如果将拥有管理员工作站的网络位于代理服务器后面,请添加以下标志:
--proxy-url=PROXY_URL
和--no-proxy=NO_PROXY
。将 PROXY_URL 替换为代理服务器的网址,将 NO_PROXY 替换为排除在代理之外的域名和 IP 地址的值(以英文逗号分隔)。
如果您添加了标志,请务必添加命令行续行反斜杠字符 (\)。
出现提示时,输入(或复制并粘贴)vCenter 用户名。系统不会将用户名回显到屏幕上。
出现提示时,输入(或复制并粘贴)vCenter 密码。密码不会回显到屏幕上。
该命令会运行多项验证。gkectl
成功创建引导集群后,您会看到如下所示的输出,为了便于阅读,已经过截断处理:
Running workstation validations - Validation Category: Workstation - [SUCCESS] Workstation OS - [SUCCESS] Workstation Hardware - [SUCCESS] Workstation Package - [SUCCESS] Workstation NTP - [SUCCESS] Workstation Docker ... All validation results were SUCCESS. Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz ... Successfully created and registered the bootstrap cluster ... Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -
该进程会继续运行,直到创建管理员集群为止。
如果您在创建管理员集群之前退出 gkectl register bootstrap
命令,管理员集群创建会失败,您需要使用以下命令删除引导集群:
gkectl delete bootstrap \ --target-cluster-name=ADMIN_CLUSTER_NAME \ --project-id=PROJECT_ID \ --location=REGION \ --register-service-account-key-path=CONNECT_REGISTER_SA_PATH
创建管理员集群
应用 Terraform 方案以创建管理员集群:
terraform apply "tfplan"
创建管理员集群大约需要 15 分钟或更长时间。您可以在 Google Cloud 控制台中的 GKE 集群页面上查看集群。
控制台
过程概览
在创建管理员集群之前,您需要在管理员工作站上运行 gkectl register bootstrap
命令。此命令会在管理员工作站上部署 Kubernetes in Docker (kind) 集群。此引导集群托管创建管理员集群所需的 Kubernetes 控制器。创建管理员集群时,引导集群上的控制器会预配节点、运行预检检查,并将管理员集群注册到舰队。成功创建管理员集群后,系统会自动删除引导集群。
以下是使用控制台创建管理员集群的概要步骤:
在控制台中,您需要输入
gkectl register bootstrap
所需的信息。控制台会显示gkectl register bootstrap
命令以及您输入的信息。显示的命令还包含您需要在运行该命令之前指定的路径标志。在管理员工作站上,运行
gkectl register bootstrap
以创建引导集群。当该命令完成引导集群的创建后,输出会提示您完成管理员集群配置。该进程会继续运行,直到创建管理员集群为止。返回到控制台,完成创建集群所需信息的输入。在集群创建期间,
gkectl register bootstrap
命令会输出进度信息,并在管理员工作站上写入日志。创建管理员集群后,引导集群会自动删除。
开始配置集群
在控制台中,前往在 VMware 上创建集群页面。
选择您要在其中创建集群的 Google Cloud 项目。
在下一部分中创建引导集群时,所选项目 ID 会显示在
gkectl register bootstrap
命令的--project-id
标志中。确保选中创建管理员集群。
点击下一部分:安装引导环境。
安装引导环境
在本部分中,您需要输入 gkectl register bootstrap
命令所需的信息。当您在界面字段中输入值时,控制台会将这些值复制到在页面底部的从管理员工作站引导环境部分中显示的 gkectl register bootstrap
命令的相应标志。
引导环境基本信息
输入管理员集群的名称。控制台使用集群名称作为页面底部显示的
gkectl register bootstrap
命令中--target-cluster-name
标志的值。名称的长度不得超过 20 个字符。在 Google Cloud API 位置字段中,从列表中选择一个 Google Cloud区域。此设置指定在其中运行以下 API 和服务的区域:
- GKE On-Prem API (
gkeonprem.googleapis.com
) - Fleet 服务 (
gkehub.googleapis.com
) - Connect 服务 (
gkeconnect.googleapis.com
)
此设置还可控制存储以下内容的区域:
- GKE On-Prem API 管理集群生命周期所需的集群元数据
- 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
- Cloud Audit Logs 创建的管理员审核日志
Google Cloud API 位置字段对应于
gkectl register bootstrap
命令中的--location
标志。- GKE On-Prem API (
在管理员集群版本字段中,输入用于创建集群的版本。您在此处选择的版本必须与您在
gkectl register bootstrap
命令的--bundle-path
标志中指定的软件包版本一致。
vCenter 配置
如果您使用 gkeadm
创建了管理员工作站,请打开管理员工作站配置文件,以便将 vCenter
部分中的值复制到控制台中的相应字段。请注意,生成的管理员集群配置文件也包含此信息。
本部分中的大多数字段都是不可变的。如果您需要了解某个字段是可变字段还是不可变字段,请参阅管理员集群配置文件参考文档中的 vCenter
部分。
在地址字段中,输入 vCenter Server 地址。
管理员工作站配置文件:使用
vCenter.credentials.address
字段中的值。地址字段对应于
gkectl register bootstrap
命令中的--vcenter-address
标志。
在数据中心字段中,输入 vCenter 数据中心的名称。
管理员工作站配置文件:使用
vCenter.datacenter
字段中的值。数据中心字段对应于
gkectl register bootstrap
命令中的--vcenter-datacenter
标志。
在集群名称字段中,输入 vCenter 集群的名称。
管理员工作站配置文件:使用
vCenter.cluster
字段中的值。集群名称字段对应于
gkectl register bootstrap
命令中的--vcenter-cluster
标志。
在资源池字段中,输入 vCenter 资源池的名称或路径。
管理员工作站配置文件:使用
vCenter.resourcePool
字段中的值。资源池字段对应于
gkectl register bootstrap
命令中的--vcenter-resource-pool
标志。
通过输入以下项之一来配置存储选项:
数据存储区字段:输入 vCenter 数据存储区的名称。您指定的值必须是名称,而不是路径。如果您需要输入路径,请在文件夹字段中输入。
管理员工作站配置文件:使用
vCenter.datastore
字段中的值。数据存储区字段对应于
gkectl register bootstrap
命令中的--vcenter-datastore
标志。
存储政策名称字段:输入集群节点的虚拟机存储政策的名称。如需了解详情,请参阅配置存储政策。
管理员工作站配置文件:使用
vCenter.storagePolicyName
字段中的值。存储政策名称字段对应于
gkectl register bootstrap
命令中的--vcenter-storage-policy
标志。
您必须在数据存储区字段或存储政策名称字段中输入值,但不能同时在这两个字段中输入值。
(可选)在文件夹字段中,输入集群虚拟机所在的 vCenter 文件夹的名称。
管理员工作站配置文件:使用
vCenter.folder
字段中的值。文件夹字段对应于
gkectl register bootstrap
命令中的--vcenter-folder
标志。
在网络字段中,输入 vCenter 网络的名称。
管理员工作站配置文件:使用
vCenter.network
字段中的值。网络字段对应于
gkectl register bootstrap
命令中的--vcenter-network
标志。
在 CA 证书路径字段中,输入 vCenter Server 的根 CA 证书的路径。
如果您使用
gkeadm
创建了管理员工作站,则gkeadm
会将您本地的 CA 证书文件复制到管理员工作站。CA 证书路径字段对应于
gkectl register bootstrap
命令中的--vcenter-ca-cert-path
。
获取 CA 证书
创建引导集群后,您需要在集群基本信息页面上的 CA 证书数据字段中提供 PEM 格式的 vCenter CA 证书。运行以下命令以显示该证书:
cat CA_CERT_PATH
将 CA_CERT_PATH
替换为 vCenter Server 的根 CA 证书的路径。如果您在本地运行该命令,请在管理员工作站配置文件的 vCenter.caCertPath
中使用该路径。
将整个证书复制到文本编辑器中,以便在创建引导集群后,随时将其粘贴到集群基本信息页面上的 CA 证书数据字段中。
从管理员工作站中引导环境
运行 gkectl register bootstrap
命令时,系统会提示您输入 vCenter 账号的用户名和密码。确保您有可用的凭证。如果您使用 gkeadm
创建了管理员工作站,则用户名和密码位于 credential.yaml
文件中。
滚动到从管理员工作站中引导环境部分,以显示
gkectl register bootstrap
命令。在前往管理员工作站创建引导集群期间,请勿关闭此页面。
将
gkectl register bootstrap
命令复制并粘贴到文本编辑器中,以便您可以为以下标志指定值:./gkectl register bootstrap \ ... --bundle-path=BUNDLE_PATH \ ... --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \ --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \ --stackdriver-service-account-key-path=LOG_MON_SA_PATH \ --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH
将以下内容替换为管理员工作站路径:
BUNDLE_PATH
:软件包文件的路径。如果您使用gkeadm
创建了管理员工作站,则软件包文件位于/var/lib/gke/bundles/
中。文件名取决于 Google Distributed Cloud 版本,例如gke-onprem-vsphere-1.31.0-gke.889-full.tgz
。COMPONENT_ACCESS_SA_PATH
:组件访问服务账号的密钥文件的路径。CONNECT_REGISTER_SA_PATH
:连接注册服务账号的密钥文件的路径。LOG_MON_SA_PATH
:日志记录监控服务账号的密钥文件的路径。CLOUD_AUDIT_SA_PATH
:审核日志记录服务账号的路径。如果您未创建审核日志记录服务账号,请指定日志记录监控服务账号的密钥文件路径。
此外,如果您使用
gkeadm
创建了管理员工作站,则表示gkectl
已下载到/usr/bin/
目录。在这种情况下,请从命令开头移除./
,因为gkectl
不在当前工作目录中。使用 SSH 连接到您的管理员工作站。
复制该命令并将其粘贴到管理员工作站上的终端窗口中。
出现提示时,输入(或复制并粘贴)vCenter 用户名。系统不会将用户名回显到屏幕上。
出现提示时,输入(或复制并粘贴)vCenter 密码。密码不会回显到屏幕上。
该命令会运行多项验证。gkectl
成功创建引导集群后,您会看到如下所示的输出,为了便于阅读,已经过截断处理:
Running workstation validations - Validation Category: Workstation - [SUCCESS] Workstation OS - [SUCCESS] Workstation Hardware - [SUCCESS] Workstation Package - [SUCCESS] Workstation NTP - [SUCCESS] Workstation Docker ... All validation results were SUCCESS. Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz ... Successfully created and registered the bootstrap cluster ... Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -
该进程会继续运行,直到创建管理员集群为止。
如果您在创建管理员集群之前退出 gkectl register bootstrap
命令,管理员集群创建会失败,您需要使用以下命令删除引导集群:
gkectl delete bootstrap \ --target-cluster-name=ADMIN_CLUSTER_NAME \ --project-id=PROJECT_ID \ --location=REGION \ --register-service-account-key-path=CONNECT_REGISTER_SA_PATH
完成管理员集群的配置
返回到控制台,然后执行以下步骤:
在安装引导环境页面上,点击检查连接。
成功后,控制台会显示
已建立连接。您必须先建立与引导集群的连接,然后才能继续操作。如果连接未建立,请检查您为
gkectl register bootstrap
命令指定的参数:确保
--target-cluster-name
的值与引导环境基本信息部分中显示的管理员集群名称相匹配。确保
--project-id
的值与您在控制台中选择的项目的 ID 匹配。
如果您需要更改引导集群名称、项目 ID 或其他标志值,请执行以下操作:
- 输入
Ctrl-C
退出gkectl register bootstrap
。 删除引导集群:
gkectl delete bootstrap \ --target-cluster-name=ADMIN_CLUSTER_NAME \ --project-id=PROJECT_ID \ --location=REGION \ --register-service-account-key-path=CONNECT_REGISTER_SA_PATH
重新运行
gkectl register bootstrap
命令。
点击下一部分:集群基本信息,开始配置管理员集群。
集群基本信息
在 CA 证书数据字段中,复制并粘贴前面在获取 CA 证书部分中所述的 PEM 格式的整个 vCenter CA 证书。
在授权部分中,输入要授予只读 Kubernetes
clusterrole/view
角色的用户的邮箱。请注意,邮箱会自动添加。应用的基于角色的访问控制 (RBAC) 政策可让用户通过 Connect 网关运行只读命令。点击下一部分:控制平面。
控制平面
查看控制平面部分中的默认设置,并根据需要进行更改。
在控制平面节点 IP 部分的以下字段中输入 IP 地址:
网关:集群节点所属子网的默认网关的 IP 地址。
网络掩码:集群节点所属子网的网络掩码。
IP 地址:输入三个控制平面节点的 IP 地址和(可选)主机名。
点击下一部分:网络。
网络
在本部分中,您将指定创建管理员集群所需的网络信息。
在 Service 和 Pod CIDR 部分中,接受 Kubernetes Service 和 Pod IP 地址范围的默认值,或输入其他 CIDR 地址范围。
Service CIDR:最小可能范围:
/24
。最大可能范围:/12
。Pod CIDR:最小可能范围:
/18
。最大可能范围:/8。
在主机配置部分中,指定集群节点虚拟机使用的 NTP 服务器、DNS 服务器和(可选)DNS 搜索网域。创建集群后,您将无法修改这些值。
点击下一部分:负载均衡器。
负载均衡器
在本部分中,您将选择要使用的负载均衡器类型。如需了解详情,请参阅负载均衡概览。
在负载均衡器类型列表中,选择一个负载均衡器:
与 MetalLB 捆绑:MetalLB 负载均衡器捆绑在一起,并且需要的手动配置比手动负载均衡少。MetalLB 组件在集群节点上运行,因此您无需为负载均衡器创建单独的虚拟机。
手动:您可以使用选择的任何负载均衡器,只要在创建集群之前进行设置即可。使用手动设置的任何负载均衡器时,您必须配置虚拟 IP (VIP)、节点地址和 nodePort 值之间的映射。
在控制平面 VIP 字段中,输入用于将流量发送到 Kubernetes API 服务器的 VIP。
点击验证并创建。
控制台会在验证设置并在数据中心内创建集群时显示状态消息。
如果配置出现问题,控制台将显示一条错误消息,该消息应该足够清晰,以便您修复配置问题并再次尝试创建集群。
有关集群创建过程的详细信息会输出到管理员工作站。如果预检检查通过,您会看到如下所示的内容:
[2023-03-22 23:12:47+0000] Waiting for cluster kubeconfig to become ready OK [2023-03-22 23:15:47+0000] Writing kubeconfig file [2023-03-22 23:15:47+0000] kubeconfig of cluster being created is present at gkectl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig [2023-03-22 23:15:47+0000] Please restrict access to this file as it contains authentication credentials of your cluster. [2023-03-22 23:15:47+0000] Waiting for cluster to become ready OK [2023-03-22 23:20:17+0000] Please run [2023-03-22 23:20:17+0000] kubectl --kubeconfig gkectl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig get nodes [2023-03-22 23:20:17+0000] to get cluster nodes status. [2023-03-22 23:20:17+0000] Waiting for node pools to become ready OK [2023-03-22 23:20:37+0000] Waiting for metrics to become ready in GCP OK [2023-03-22 23:25:38+0000] Waiting for cluster API provider to install in the created admin cluster OK [2023-03-22 23:25:48+0000] Moving admin cluster resources to the created admin cluster [2023-03-22 23:25:51+0000] Waiting for node update jobs to finish OK [2023-03-22 23:27:41+0000] Flushing logs... OK [2023-03-22 23:27:41+0000] Deleting membership... OK [2023-03-22 23:27:42+0000] Deleting bootstrap cluster.
连接到管理员集群
gkectl register bootstrap
命令会为管理员工作站上的管理员集群创建 kubeconfig
文件。kubeconfig
所在的目录和文件名基于管理员集群名称,如下所示:
gkectl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
您需要限制对此 kubeconfig
的访问权限,因为它包含集群的身份验证凭据。
此外,您还可以通过 Connect 网关运行只读 kubectl
命令。
在安装了 gcloud CLI 的计算机上运行以下命令,以获取可通过 Connect 网关访问集群的
kubeconfig
条目。gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME \ --project=PROJECT_ID
输出类似于以下内容:
Starting to build Gateway kubeconfig... Current project_id: PROJECT_ID A new kubeconfig entry "connectgateway_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.
您现在可以通过 Connect 网关运行只读
kubectl
命令:kubectl get pods -A
如果您需要管理员集群的完整管理权限,请参阅设置 Connect 网关。
问题排查
请参阅排查集群创建和升级问题。