在 Google Distributed Cloud 中,您的工作负载在一个或多个用户集群上运行。本文档介绍如何创建用户集群。 本页面适用于设置、监控和管理技术基础设施的管理员、架构师和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
您可以使用多种工具来创建用户集群:
gkectl
- Google Cloud 控制台
Google Cloud CLI
- Terraform
其中三个工具(控制台、gcloud CLI 和 Terraform)是 GKE On-Prem API 的客户端。
如需了解您想要使用的工具,请参阅选择用于管理集群生命周期的工具。
准备工作
如果您尚未设置 Google Cloud 资源,请按照以下文档中的说明进行设置:
设置舰队宿主项目时,请牢记您选择的工具,因为如果您选择了一个 GKE On-Prem API 客户端,则还必须启用其他 API。如需查看 API 列表,请参阅在舰队宿主项目中启用 API。
确定要安装的用户集群的版本。创建用户集群时,您通常会安装与管理员集群版本匹配的版本。不过,您可以安装更高的补丁版本。在 1.28 版及更高版本中,用户集群的次要版本最多可以比管理员集群高 2 个。
我们强烈建议您启用 Controlplane V2。启用 Controlplane V2 后,用户集群的控制平面在用户集群本身中的一个或多个节点上运行。如果您打算安装 1.30 版或更高版本,则必须使用 Controlplane V2。另一种方法是创建使用 kubeception 的用户集群。在 kubeception 情况下,用户集群的控制平面在管理员集群中的一个或多个节点上运行。
查看 IP 地址规划文档,并确保您有足够的可用 IP 地址。
查看负载均衡概览,并重新考虑有关要使用的负载均衡器类型的决定。您可以使用捆绑式 MetalLB 负载均衡器,也可以手动配置您选择的负载均衡器。对于手动负载均衡,您必须先设置负载均衡器,然后才能创建用户集群。
考虑您需要的节点池数量以及每个池中运行的操作系统。
考虑是否要为管理员集群和用户集群使用不同的 vSphere 集群,以及是否要使用不同的数据中心。还要考虑是否要使用不同的 vCenter Server 实例。
在 1.29 版及更高版本中,服务器端预检检查默认处于启用状态。服务器端预检检查需要额外的防火墙规则。在管理员集群的防火墙规则中,搜索“预检检查”,并确保已配置所有必需的防火墙规则。
使用服务器端预检检查时,当您使用
gkectl
创建用户集群时,预检检查会在管理员集群上运行,而不是在管理员工作站上本地运行。如果您使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 创建用户集群,服务器端预检查也会运行。
创建用户集群
gkectl
过程概览
以下是使用 gkectl
创建用户集群涉及的主要步骤:
- 连接到管理员工作站
- 管理员工作站是一个具有创建用户集群所需的工具的机器。
- 填写配置文件
- 通过完成用户集群配置文件、凭据配置文件以及可能的 IP 地址块文件,指定新集群的详细信息。
- (可选)将操作系统映像导入 vSphere,并将容器映像推送到私有注册表(如果适用的话)。
- 运行
gkectl prepare
。
- 创建用户集群
- 运行
gkectl create cluster
以按照配置文件中所指定的内容创建集群。
- 验证用户集群是否正在运行
- 使用
kubectl
查看集群节点。
此过程结束时,您将有一个正在运行的用户集群,您可以在其中部署工作负载。
如果您使用 VPC Service Controls,在运行某些 gkectl
命令(例如 "Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
)时可能会看到错误。为避免这些错误,请将 --skip-validation-gcp
参数添加到您的命令中。
填写配置文件
在管理员工作站上执行以下步骤。
当 gkeadm
创建管理员工作站时,它生成了一个名为 user-cluster.yaml
的配置文件。此配置文件用于创建用户集群。
浏览用户集群配置文件文档,以熟悉配置文件。建议您在单独的标签页或窗口中打开该文档,因为您在完成以下步骤时将参考它。
name
将 name
字段设置为您为用户集群选择的名称。
gkeOnPremVersion
系统已为您填写此字段。它指定 Google Distributed Cloud 的版本。例如 1.30.100-gke.96
。
enableControlplaneV2
如需创建启用了 Controlplane V2 的用户集群,请将 enableControlplaneV2
设置为 true
。
启用 Controlplane V2 后,用户集群的控制平面在用户集群本身的节点上运行。我们强烈建议您启用 Controlplane V2。
kubeception
如果将此字段设置为 false
,则集群将使用 kubecetption。使用 kubeception 时,用户集群的控制平面在管理员集群中的节点上运行。
对于 kubeception 集群:
将
enableControlplaneV2
设置为false
。请勿填写
controlPlaneIPBlock
部分。在管理员集群的 IP 地址块文件中指定用户集群的控制平面节点的 IP 地址。
enableDataplaneV2
将 enableDataplaneV2 设置为 true
。
vCenter
您在管理员集群配置文件的 vCenter
部分中设置的值是全局值。也就是说,这些值会应用于管理员集群及其关联的用户集群。
对于您创建的每个用户集群,您可以选择替换一些全局 vCenter
值。
如需替换任何全局 vCenter
值,请填充用户集群配置文件的 vCenter
部分中的相关字段。
具体而言,您可能希望为管理员集群和用户集群使用不同的 vSphere 集群,并且为管理员集群和用户集群使用不同的数据中心。
使用一个数据中心和一个 vSphere 集群
默认选项是将一个数据中心和一个 vSphere 集群用于管理员集群和用户集群。对于此选项,请勿在用户集群配置文件中设置任何 vCenter
值。vCenter
值将从管理员集群继承。
使用单独的 vSphere 集群
如果您想创建位于自己的 vSphere 集群中的用户集群,请在用户集群配置文件中为 vCenter.cluster
指定值。
如果您的管理员集群和用户集群位于不同的 vSphere 集群中,它们可以位于相同的数据中心中,也可以位于不同数据中心中。
使用单独的 vSphere 数据中心
用户集群和管理员集群可以位于不同的数据中心中。在这种情况下,它们也位于不同的 vSphere 集群中。
如果您在用户集群配置文件中指定 vCenter.datacenter
,则还必须指定:
vCenter.networkName
vCenter.datastore
或vCenter.storagePolicyName
。vCenter.cluster
或vCenter.resourcePool
。
使用单独的 vCenter 账号
用户集群可以使用与管理员集群不同的 vCenter 账号和 vCenter.credentials
。管理员集群的 vCenter 账号需要管理员集群数据中心访问权限,而用户集群的 vCenter 账号只需要用户集群数据中心的访问权限。
使用单独的 vCenter Server 实例
在某些情况下,最好是创建使用自己的 vCenter Server 实例的用户集群。也就是说,管理员集群和关联的用户集群使用不同的 vCenter Server 实例。
例如,在边缘位置,您可能需要一台物理机器运行 vCenter Server,一台或多台物理机器运行 ESXi。然后,您可以使用本地 vCenter Server 实例创建 vSphere 对象层次结构,包括数据中心、集群、资源池、数据存储区和文件夹。
填写用户集群配置文件的整个 vCenter
部分。具体而言,请为 vCenter.address
指定一个与您在管理员集群配置文件中指定的 vCenter Server 地址不同的值。例如:
vCenter: address: "vc-edge.example" datacenter: "vc-edge" cluster: "vc-edge-workloads" resourcePool: "vc-edge-pool datastore: "vc-edge-datastore caCertPath: "/usr/local/google/home/me/certs/edge-cacert.pem" credentials: fileRef: path: "credential.yaml" entry: "vCenter-edge" folder: "edge-vm-folder"
此外,请填写 network.vCenter.networkName
字段。
network
确定您要工作器节点获取其 IP 地址的方式。选项包括:
从提前设置的 DHCP 服务器获取。将
network.ipMode.type
设置为"dhcp"
。从您提供的静态 IP 地址列表获取。将
network.ipMode.type
设置为"static"
,并创建一个提供静态 IP 地址的 IP 地址块文件。如需查看 IP 地址块文件的示例,请参阅已填写的配置文件的示例。
如果您决定为工作器节点使用静态 IP 地址,请填写 network.ipMode.ipBlockFilePath
字段。
用户集群的控制平面节点必须从您提供的静态地址列表中获取其 IP 地址。即使工作器节点从 DHCP 服务器获取其地址,情况也是如此。如需为控制平面节点指定静态 IP 地址,请填写 network.controlPlaneIPBlock
部分。如果您需要高可用性 (HA) 用户集群,请指定三个 IP 地址。否则,请指定一个 IP 地址。
通过填写 hostConfig
部分来指定 DNS 和 NTP 服务器。这些 DNS 和 NTP 服务器用于控制平面节点。如果您为工作器节点使用静态 IP 地址,那么这些 DNS 和 NTP 服务器也适用于工作器节点。
network.podCIDR 和 network.serviceCIDR 具有预填充的值,您可以保持不变,除非它们与已在您的网络中使用的地址冲突。Kubernetes 会使用这些范围将 IP 地址分配给集群中的 Pod 和 Service。
无论您是依赖 DHCP 服务器还是指定静态 IP 地址列表,都需要有足够的 IP 地址供用户集群使用。如需了解所需的 IP 地址数量,请参阅规划 IP 地址。
loadBalancer
为用户集群的 Kubernetes API 服务器预留一个 VIP。为用户集群的入站服务预留另一个 VIP。提供您的 VIP 作为 loadBalancer.vips.controlPlaneVIP
和 loadBalancer.vips.ingressVIP
的值。
确定要使用的负载均衡类型。以下是各个选项:
MetalLB 捆绑式负载均衡。将
loadBalancer.kind
设置为"MetalLB"
。此外,填写loadBalancer.metalLB.addressPools
部分,并针对至少一个节点池将enableLoadBalancer
设置为true
。如需了解详情,请参阅使用 MetalLB 进行捆绑式负载均衡。手动负载均衡。将
loadBalancer.kind
设置为"ManualLB"
,然后填写manualLB
部分。如需了解详情,请参阅手动负载均衡。
如需详细了解负载均衡选项,请参阅负载均衡概览。
advancedNetworking
如果您计划创建出站 NAT 网关,请将 advancedNetworking 设置为 true
。
multipleNetworkInterfaces
决定是否要为 Pod 配置多个网络接口,并相应地设置 multipleNetworkInterfaces。
storage
如果要停用 vSphere CSI 组件的部署,请将 storage.vSphereCSIDisabled 设置为 true
。
masterNode
在 masterNode
部分中,您可以指定用户集群的控制平面节点数:一个或三个。您还可以为控制平面节点指定数据存储区,以及是否要为控制平面节点启用自动调整大小功能。
回想一下,您在 network.controlPlaneIPBlock
部分中为控制平面节点指定了 IP 地址。
nodePools
节点池是集群中全都具有相同配置的一组节点。例如,一个池中的节点可以运行 Windows,另一个池中的节点可以运行 Linux。
您必须通过填写 nodePools
部分来至少指定一个节点池。
antiAffinityGroups
将 antiAffinityGroups.enabled
设置为 true
或 false
。
此字段指定 Google Distributed Cloud 是否为工作器节点创建分布式资源调度器 (DRS) 反亲和性规则,使其分布到至少三个物理主机上。
stackdriver
如果要为集群启用 Cloud Logging 和 Cloud Monitoring,请填写 stackdriver
部分。
默认情况下,此部分是必填的。也就是说,如果您不填写此部分,则必须在运行 gkectl create cluster
时添加 --skip-validation-stackdriver
标志。
对于新集群,请注意以下要求:
stackdriver.projectID
中的 ID 必须与gkeConnect.projectID
和cloudAuditLogging.projectID
中的 ID 相同。在
stackdriver.clusterLocation
中设置的 Google Cloud 区域必须与在cloudAuditLogging.clusterLocation
和gkeConnect.location
中设置的区域相同(如果您的配置文件中包含该字段)。此外,如果gkeOnPremAPI.enabled
为true
,则必须在gkeOnPremAPI.location
中设置同一区域。
如果项目 ID 和区域不相同,则集群创建会失败。
gkeConnect
用户集群必须注册到 Google Cloud 舰队。
填写 gkeConnect
部分以指定舰队宿主项目和关联的服务账号。 gkeConnect.projectID
中的 ID 必须与 stackdriver.projectID
和 cloudAuditLogging.projectID
中设置的 ID 相同。如果项目 ID 不同,则集群创建会失败。
在 1.28 及更高版本中,您可以选择性地指定舰队和 Connect 服务在 gkeConnect.location
中运行的区域。如果您未添加此字段,集群将使用这些服务的全局实例。
如果您在配置文件中添加 gkeConnect.location
,则您指定的区域必须与 cloudAuditLogging.clusterLocation
、stackdriver.clusterLocation
和 gkeOnPremAPI.location
中配置的区域相同。如果区域不相同,集群创建将失败。
gkeOnPremAPI
在 1.16 及更高版本中,如果在 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 的服务名称)。如需查看相关说明,请参阅停用服务。
usageMetering
如果要为集群启用用量计量功能,请填写 usageMetering
部分。
cloudAuditLogging
如果要将集群的 Kubernetes API 服务器中的审核日志与 Cloud Audit Logs 集成,请填写 cloudAuditLogging
部分。
请注意新集群的以下要求:
cloudAuditLogging.projectID
中的 ID 必须与gkeConnect.projectID
和stackdriver.projectID
中的 ID 相同。cloudAuditLogging.clusterLocation
中的区域必须与gkeConnect.location
(如果您的配置文件中包含此字段)和stackdriver.clusterLocation
中设置的区域相同。此外,如果gkeOnPremAPI.enabled
为true
,则必须在gkeOnPremAPI.location
中设置同一区域。
如果项目 ID 和区域不相同,则集群创建会失败。
已填写的配置文件的示例
以下是 IP 地址块文件和用户集群配置文件的示例:
user-ipblock.yaml
blocks: - netmask: 255.255.255.0 gateway: 172.16.21.1 ips: - ip: 172.16.21.2 hostname: worker-vm-1 - ip: 172.16.21.3 hostname: worker-vm-2 - ip: 172.16.21.4 hostname: worker-vm-3 - ip: 172.16.21.5 hostname: worker-vm-4
user-cluster.yaml
cat user-cluster.yaml apiVersion: v1 kind: UserCluster name: "my-user-cluster" gkeOnPremVersion: 1.30.100-gke.96 enableControlplaneV2: true enableDataplaneV2: true network: hostConfig: dnsServers: - "203.0.113.2" - "198.51.100.2" ntpServers: - "216.239.35.4" ipMode: type: "static" ipBlockFilePath: "user-ipblock.yaml" serviceCIDR: 10.96.0.0/20 podCIDR: 192.168.0.0/16 controlPlaneIPBlock: netmask: "255.255.255.0" gateway: "172.16.21.1" ips: - ip: "172.16.21.6" hostname: "cp-vm-1" - ip: "172.16.21.7" hostname: "cp-vm-2" - ip: "172.16.21.8" hostname: "cp-vm-3" loadBalancer: vips: controlPlaneVIP: "172.16.21.40" ingressVIP: "172.16.21.30" kind: MetalLB metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.21.30-172.16.21.39" masterNode: cpus: 4 memoryMB: 8192 replicas: 3 nodePools: - name: "worker-node-pool" cpus: 4 memoryMB: 8192 replicas: 3 enableLoadBalancer: true antiAffinityGroups: enabled: true gkeConnect: projectID: "my-project-123" location: "us-central1" registerServiceAccountKeyPath: "connect-register-sa-2203040617.json" stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" enableVPC: false serviceAccountKeyPath: "log-mon-sa-2203040617.json" autoRepair: enabled: true
以下是在上述示例中要理解的要点:
工作器节点的静态 IP 地址在 IP 地址块文件中指定。即使只有三个工作器节点,IP 块文件也具有四个地址。在集群升级、更新和自动修复期间需要额外的 IP 地址。
DNS 和 NTP 服务器在
hostConfig
部分中指定。在此示例中,这些 DNS 和 NTP 服务器用于控制平面节点和工作器节点。这是因为工作器节点具有静态 IP 地址。如果工作器节点从 DHCP 服务器获取其 IP 地址,则这些 DNS 和 NTP 服务器仅适用于控制平面节点。三个控制平面节点的静态 IP 地址在用户集群配置文件的
network.controlPlaneIPBlock
部分中指定。此块中不需要额外的 IP 地址。Controlplane V2 已启用。
masterNode.replicas
字段设置为3
,因此集群将具有高可用性控制平面。控制平面 VIP 地址和入站流量 VIP 地址与工作器节点和控制平面节点位于同一 VLAN。
为 LoadBalancer 类型的 Service 预留的 VIP 在用户集群配置文件的
loadBalancer.metalLB.addressPools
部分中指定。这些 VIP 地址与工作器节点和控制平面节点位于同一 VLAN。 此部分中指定的一组 VIP 必须包含入站流量 VIP,不得包含控制平面 VIP。用户集群配置文件不包含
vCenter
部分。因此,用户集群使用的 vSphere 资源与管理员集群相同。
验证配置文件
填写用户集群配置文件后,请运行 gkectl check-config
以验证文件有效:
gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
请替换以下内容:
ADMIN_CLUSTER_KUBECONFIG 是管理员集群的 kubeconfig 文件的路径
USER_CLUSTER_CONFIG:用户集群配置文件的路径
如果该命令返回任何失败消息,请修复问题并再次验证文件。
如果您想跳过更耗时的验证,请传递 --fast
标志。如需跳过各项验证,请使用 --skip-validation-xxx
标志。如需详细了解 check-config
命令,请参阅运行预检检查。
3. (可选)将操作系统映像导入 vSphere,并将容器映像推送到私有注册表
如果存在以下任一情况,请运行 gkectl prepare
:
您的用户集群所在的 vSphere 数据中心与管理员集群不同。
您的用户集群具有的 vCenter Server 与管理员集群不同。
您的用户集群使用的私有注册表与管理员集群使用的私有容器注册表不同。
gkectl prepare --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --bundle-path BUNDLE \ --user-cluster-config USER_CLUSTER_CONFIG
请替换以下内容:
ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径
BUNDLE:软件包文件的路径。此文件位于
/var/lib/gke/bundles/
中的管理员工作站上。例如:/var/lib/gke/bundles/gke-onprem-vsphere-1.30.100-gke.96-full.tgz
USER_CLUSTER_CONFIG:用户集群配置文件的路径
4. 创建用户集群
创建用户集群:
gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
如果您使用 VPC Service Controls,则在运行某些 gkectl
命令(例如 "Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
)时可能会看到错误。为避免这些错误,请将 --skip-validation-gcp
参数添加到您的命令中。
找到用户集群 kubeconfig 文件的位置
gkectl create cluster
命令会在当前目录中创建一个名为 USER_CLUSTER_NAME-kubeconfig
的 kubeconfig 文件。您稍后需要此 kubeconfig 文件才能与用户集群进行互动。
kubeconfig 文件包含您的用户集群的名称。如需查看集群名称,您可以运行以下命令:
kubectl config get-clusters --kubeconfig USER_CLUSTER_KUBECONFIG
输出会显示集群的名称。例如:
NAME my-user-cluster
如果愿意,您可以更改 kubeconfig 文件的名称和位置。
5. 验证用户集群正在运行
验证用户集群是否正在运行:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG
将 USER_CLUSTER_KUBECONFIG 替换为用户集群 kubeconfig 文件的路径。
输出会显示用户集群节点。例如:
cp-vm-1 Ready control-plane,master 18m cp-vm-2 Ready control-plane,master 18m cp-vm-3 Ready control-plane,master 18m worker-vm-1 Ready 6m7s worker-vm-2 Ready 6m6s worker-vm-3 Ready 6m14s
控制台
开始使用
在 Google Cloud 控制台中,前往 Create a Google Distributed Cloud cluster 页面。
选择您要供创建集群的 Google Cloud 项目。所选项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。
集群基本信息
输入有关集群的基本信息。
输入用户集群的名称。
在管理员集群下,从列表中选择管理员集群。如果您在创建管理员集群时未指定其名称,则系统会生成
gke-admin-[HASH]
格式的名称。如果您无法识别管理员集群名称,请在管理员工作站上运行以下命令:KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG kubectl get OnPremAdminCluster -n kube-system -o=jsonpath='{.items[0].metadata.name}'
如果要使用的管理员集群未显示,请参阅问题排查部分集群基本信息下拉列表中未显示管理员集群。
在 GCP 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 中的集群。
- GKE On-Prem API (
为您的用户集群选择 Google Distributed Cloud 版本。
作为集群创建者,您将获得集群的集群管理员权限。(可选)在授权部分的集群管理员用户字段中,输入将管理集群的其他用户的电子邮件地址。
创建集群时,GKE On-Prem API 将 Kubernetes 基于角色的访问控制 (RBAC) 政策应用于集群,以授予您和其他管理用户 Kubernetes
clusterrole/cluster-admin
角色,该角色提供对集群中所有名称空间中的每个资源的完全访问权限。点击下一步以前往控制平面部分。
控制平面
控制平面部分中的所有字段均设置为默认值。查看默认值,并根据需要进行更改。
在控制平面节点 vCPU 字段中,输入用户集群的每个控制平面节点的 vCPU 数量(最少 4 个)。
在控制平面节点内存字段中,输入用户集群的每个控制平面的内存大小(以 MiB 为单位,最少 8192 MiB 且必须是 4 的倍数)。
在控制平面节点下,选择用户集群的控制平面节点数。例如,您可以为开发环境选择 1 个控制平面节点,为高可用性 (HA) 生产环境选择 3 个控制平面节点。
(可选)选择自动调整节点大小。调整大小是指自动调整分配给节点的 vCPU 和内存资源。启用后,用户集群控制平面节点会根据用户集群中的工作器节点数量调整大小。因此,当您向用户集群添加更多工作器节点时,控制平面节点的大小会增加。
(可选)选择启用控制平面 v2。启用 Controlplane V2 表示用户集群的控制平面在用户集群本身(而非管理员集群)中的一个或多个节点上运行(称为 kubeception)。
选择启用控制平面 v2 时,系统会显示控制平面节点 IP 部分。输入网关的 IP 地址、子网掩码以及控制平面节点的 IP 地址。
启用 Controlplane V2 时,vCPU 和内存字段适用于用户集群中的控制平面节点。节点数由您输入的 IP 地址数量决定。未启用 Controlplane V2 时,vCPU、内存和控制平面节点字段适用于管理员集群中的节点。请确保为管理员集群预留足够的 IP 地址。
点击下一步以前往网络部分。
网络
在本部分中,您将指定集群的节点、Pod 和 Service 的 IP 地址。用户集群需要为每个节点分配一个 IP 地址,并为集群升级、更新和自动修复期间所需的临时节点额外分配一个 IP 地址。如需了解详情,请参阅用户集群需要多少个 IP 地址?。
在节点 IP 部分中,为用户集群选择 IP 模式。从下列选项中选择一项:
DHCP:如果您希望集群节点从 DHCP 服务器获取其 IP 地址,请选择 DHCP。
静态:如果您要为集群节点提供静态 IP 地址,或者要设置手动负载均衡,请选择静态。
如果您选择了 DHCP,请跳到下一步,以指定 Service 和 Pod CIDR。在静态 IP 地址模式部分,请提供以下信息:
输入用户集群的网关的 IP 地址。
输入用户集群节点的子网掩码。
在 IP 地址部分中,输入用户集群中节点的 IP 地址和(可选)主机名。您可以输入单个 IP v4 地址(例如 192.0.2.1)或 IPv4 CIDR 地址块(例如 192.0.2.0/24)。
如果您输入 CIDR 地址块,请不要输入主机名。
如果您输入单个 IP 地址,则可以选择输入主机名。如果您未输入主机名,Google Distributed Cloud 会使用 vSphere 中的虚拟机名称作为主机名。
根据需要点击 + 添加 IP 地址以输入更多 IP 地址。
在 Service CIDR 和 Pod CIDR 部分中,控制台为 Kubernetes Service 和 Pod 提供以下地址范围:
- Service CIDR:10.96.0.0/20
- Pod CIDR:192.168.0.0/16
如果您希望输入自己的地址范围,请参阅 Pod 和 Service 的 IP 地址以了解最佳实践。
如果您选择了静态 IP 模式或启用控制平面 v2,请在主机配置部分中指定以下信息:
- 输入 DNS 服务器的 IP 地址。
- 输入 NTP 服务器的 IP 地址。
- (可选)输入 DNS 搜索网域。
点击下一步以前往负载均衡器部分。
负载均衡器
选择要为集群设置的负载均衡器。 如需了解详情,请参阅负载均衡器概览。
从列表中选择负载均衡器类型。
与 MetalLBLB 捆绑
配置使用 MetalLB 进行捆绑式负载均衡。只有在管理员集群使用 SeeSaw 或 MetalLB 的情况下,您才能对用户集群使用 MetalLB。此方案需要的配置最低。MetalLB 直接在集群节点上运行,不需要额外的虚拟机。如需详细了解使用 MetalLB 的优势及其与其他负载均衡方案的比较情况,请参阅使用 MetalLB 进行捆绑负载均衡。在地址池部分中,至少配置一个地址池,如下所示:
输入地址池的名称。
以 CIDR 表示法输入包含 Ingress VIP 的 IP 地址范围(例如, 192.0.2.0/26),或以范围表示法输入包含 Ingress VIP 的 IP 地址范围(例如 192.0.2.64-192.0.2.72)。如需指定池中的单个 IP 地址,请使用 /32(采用 CIDR 表示法,例如, 192.0.2.1/32)。
如果
LoadBalancer
类型的 Service 的 IP 地址与 Ingress VIP 不在同一 IP 地址范围内,请点击 + 添加 IP 地址范围,然后输入其他地址范围。各个池中的 IP 地址不能重叠,并且必须与集群节点位于同一子网。
在 IP 地址分配下,选择以下选项之一:
自动:如果您希望 MetalLB 控制器自动将地址池中的 IP 地址分配给
LoadBalancer
类型的 Service,请选择此选项。手动:如果您打算使用池中的地址手动为
LoadBalancer
类型的 Service 指定地址,请选择此选项。
如果您希望 MetalLB 控制器不使用池中以 .0 或 .255 结尾的地址,请点击避免使用有问题的 IP 地址。这样可以避免有问题的用户设备错误地丢弃发送到这些特殊 IP 地址的流量。
完成后,请点击完成。
如果需要,请点击添加地址池。
在虚拟 IP 部分中,输入以下内容:
控制平面 VIP:用于发送到用户集群 Kubernetes API 服务器的流量的目标 IP 地址。用户集群的 Kubernetes API 服务器在管理员集群中的节点上运行。此 IP 地址必须与管理员集群节点位于同一 L2 网域中。请勿在地址池部分中添加此地址。
Ingress VIP:要在负载均衡器上为 Ingress 代理配置的 IP 地址。您必须将其添加到地址池部分中的地址池。
点击继续。
F5 BIG-IP
只有在管理员集群使用 F5 BIG-IP 时,您才能为用户集群使用 F5 BIG-IP。务必先安装并配置 F5 BIG-IP ADC,然后再将其与 Google Distributed Cloud 集成。F5 用户名和密码继承自管理员集群。
在虚拟 IP 部分中,输入以下内容:
控制平面 VIP:用于发送到 Kubernetes API 服务器的流量的目的地 IP 地址。
Ingress VIP:要在负载均衡器上为 Ingress 代理配置的 IP 地址。
在地址字段中,输入 F5 BIG-IP 负载均衡器的地址。
在分区字段中,输入您为用户集群创建的 BIG-IP 分区的名称。
在 SNAT 池名称字段中,输入 SNAT 池的名称(如果适用)。
点击继续。
手动
只有在管理员集群使用手动负载均衡器时,您才能为用户集群使用手动负载均衡器。在 Google Distributed Cloud 中,Kubernetes API 服务器和入口代理均由LoadBalancer
类型的 Kubernetes Service 公开。为这些 Service 自行选择 30000 到 32767 范围内的 nodePort
值。对于 Ingress 代理,请选择一个适用于 HTTP 和 HTTPS 流量的 nodePort
值。如需了解详情,请参阅启用手动负载均衡模式。
在虚拟 IP 部分中,输入以下内容:
控制平面 VIP:用于发送到 Kubernetes API 服务器的流量的目的地 IP 地址。
Ingress VIP:要在负载均衡器上为 Ingress 代理配置的 IP 地址。
在控制方案节点端口字段中,输入 Kubernetes API 服务器的
nodePort
值。在 Ingress HTTP 节点端口字段中,输入流向 Ingress 代理的 HTTP 流量的
nodePort
值。在 Ingress HTTPS 节点端口字段中,输入流向 Ingress 代理的 HTTPS 流量的
nodePort
值。在 Konnectivity 服务器节点端口 字段中,输入 Konnectivity 服务器的
nodePort
值。点击继续。
功能
本部分展示在集群上启用的功能和操作。
以下各项会自动启用且无法停用:
系统服务的 Cloud Logging
系统服务的 Cloud Monitoring
以下各项默认处于启用状态,但您可以将其停用:
启用 vSphere CSI 驱动程序:也称为 vSphere 容器存储插件。容器存储接口 (CSI) 驱动程序运行在 vSphere 中部署的 Kubernetes 集群中,用于在 vSphere 存储上预配永久性卷。如需了解详情,请参阅使用 vSphere 容器存储接口驱动程序。
启用反亲和性群组:系统会自动为您的用户集群节点创建 VMware 分布式资源调度器 (DRS) 反亲和性规则,使其分布到数据中心内的至少 3 个物理主机上。确保您的 vSphere 环境符合要求。
点击下一步以配置节点池
节点池
创建的集群将至少包含一个节点池。节点池是用于在此集群中创建的一组工作器节点的模板。如需了解详情,请参阅创建和管理节点池。
在节点池默认设置 (Node pool defaults) 部分中,完成以下操作:
- 输入节点池名称或接受“default-pool”作为名称。
- 输入池中每个节点的 vCPUs 数量(每个用户集群工作器最少 4 个)。
- 输入池中每个节点的内存大小(以兆字节 (MiB) 为单位,每个用户集群工作器节点最少 8192 MiB,并且必须是 4 的倍数)。
- 在节点字段中,输入池中的节点数(最少 3 个)。如果您在网络部分中为节点 IP 输入了静态 IP 地址,请确保输入的 IP 地址足以容纳这些用户集群节点。
- 选择操作系统映像类型:Ubuntu、Ubuntu Containerd 或 COS。
- 输入启动磁盘大小(以吉比字节 (GiB) 为单位,最少为 40 GiB)。
- 如果您使用 MetalLB 作为负载均衡器,则必须在至少一个节点池中启用 MetalLB。使将此节点池用于 MetalLB 负载均衡保持选中状态,或添加其他节点池用于 MetalLB。
在节点池元数据(可选)部分中,如果您要添加 Kubernetes 标签和污点,请执行以下操作:
- 点击 + 添加 Kubernetes 标签。输入标签的键和值。根据需要重复上述步骤。
- 点击 + 添加污点。输入污点的键、值和效果。根据需要重复上述步骤。
点击验证并完成以创建用户集群。创建用户集群需要 15 分钟或更长时间。控制台会在验证设置并在数据中心内创建集群时显示状态消息。
如果验证设置时出现错误,控制台将显示一条错误消息,该消息应足够明确,便于您解决配置问题并再次尝试创建集群。
如需详细了解可能的错误以及解决方法,请参阅排查在 Google Cloud 控制台中创建用户集群的问题。
gcloud CLI
您可以使用以下命令创建用户集群:
gcloud container vmware clusters create
创建集群后,您需要使用以下命令创建至少一个节点池:
gcloud container vmware node-pools create
创建集群和节点池的大多数标志都对应于用户集群配置文件中的字段。为帮助您开始使用,您可以在示例部分中测试完整命令。
收集信息
收集创建集群所需的一些信息。
获取管理员集群的名称和舰队成员资格位置:
gcloud container fleet memberships list \ --project=FLEET_HOST_PROJECT_ID
将
FLEET_HOST_PROJECT_ID
替换为管理员集群注册到的项目的 ID。输出类似于以下内容:
NAME EXTERNAL_ID LOCATION admin-cluster-1 bb7803b4-8438-4b22-859f-4559b4b29072 global admin-cluster-2 ee16ee2b-6ec0-49fc-9413-3c89cbc70854 global admin-cluster-3 fc2b7ef5-39ff-4b63-b919-04c5adc67be4 us-west1
该位置指定了 Fleet 服务和 Connect 服务的运行位置。在 1.28 版之前创建的管理员集群由全球 Fleet 服务和 Connect 服务管理。在 1.28 版及更高版本中,您可以在创建管理员集群时指定
global
或 Google Cloud 区域。您可以在后续示例命令的--admin-cluster-membership-location
标志中指定区域。获取可用版本的列表:
gcloud container vmware clusters query-version-config \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION
替换以下内容:
ADMIN_CLUSTER_NAME
:管理员集群的名称。FLEET_HOST_PROJECT_ID
:管理员集群注册到的项目的 ID。ADMIN_CLUSTER_REGION
:管理员集群的舰队成员资格区域。这可以是 global 或 Google Cloud 区域。使用gcloud container fleet memberships list
输出中的管理员集群的位置。REGION
:您在创建用户集群时使用的 Google Cloud 区域。这是 GKE On-Prem API 在其中运行并存储其元数据的区域。如果管理员集群已在 GKE On-Prem API 中注册,请使用与管理员集群相同的区域。如需查找管理员集群的区域,请运行以下命令:
gcloud container vmware admin-clusters list \ --project=FLEET_HOST_PROJECT_ID \ --location=-
如果管理员集群未在 GKE On-Prem API 中注册,请指定
us-west1
或其他受支持的区域。如果您随后在 GKE On-Prem API 中注册管理员集群,请使用用户集群所在的区域。
gcloud container vmware clusters query-version-config
命令的输出类似于以下内容:versions: - isInstalled: true version: 1.28.800-gke.109 - version: 1.29.0-gke.1456 - version: 1.29.100-gke.248 - version: 1.29.200-gke.245 - version: 1.29.300-gke.184
该命令还会输出可用于用户集群创建或升级的版本说明。可用于创建用户集群的版本带有
isInstalled: true
注解,这意味着管理员集群具有管理该版本的用户集群所需的特定于版本的组件。如果您要使用管理员集群上安装的版本,请跳到示例部分以创建用户集群。
安装更高版本
管理员集群可以管理不同版本的用户集群。query-version-config
命令的输出会列出您在创建集群时可以使用的其他版本。如果您要创建比管理员集群版本更高的用户集群,则需要下载并部署管理员集群管理该版本的用户集群所需的组件,如下所示:
gcloud container vmware admin-clusters update ADMIN_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --required-platform-version=VERSION
将 VERSION
替换为 query-version-config
命令的输出中列出的某个版本。
此命令会将您在 --required-platform-version
中指定版本的组件下载到管理员集群,然后部署组件。现在,您可以使用指定的版本创建用户集群。
如果您重新运行 gcloud container vmware clusters query-version-config
,则您指定的版本带有 isInstalled: true
注解。
示例
以下示例展示了如何创建具有不同负载均衡器且启用了 Controlplane V2 的用户集群。使用 Controlplane V2 时,用户集群的控制平面在用户集群本身中的一个或多个节点上运行。我们建议您启用 Controlplane V2,在 1.30 版及更高版本中,新用户集群必须启用 Controlplane V2。如需了解可用的负载均衡选项,请参阅负载均衡器概览。
大多数示例使用默认值来配置控制平面节点。如果要更改任何默认值,请添加控制平面标志部分中所述的标志。如果需要,您还可以更改一些 vSphere 设置。
在运行 gcloud
命令以创建集群之前,您可以添加 --validate-only
以验证您在 gcloud
命令的标志中指定的配置。准备好创建集群后,请移除此标志并运行该命令。
如果 gcloud container vmware clusters create
命令运行大约一分钟或更长时间后收到错误,请运行以下命令,检查集群是否已部分创建:
gcloud container vmware clusters list \ --project=FLEET_HOST_PROJECT_ID \ --location=-
如果输出中未列出集群,请修复错误并重新运行 gcloud container vmware clusters create
。
如果输出中列出了集群,请使用以下命令删除集群:
gcloud container vmware clusters delete USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --force \ --allow-missing
然后修复错误并重新运行 gcloud container vmware clusters create
。
集群运行后,您必须先添加节点池,然后才能部署工作负载,如创建节点池部分中所述。
MetalLB 和 DHCP
此示例展示了如何创建具有捆绑式 MetalLB 负载均衡器的用户集群,并使用 DHCP 服务器获取集群工作器节点的 IP 地址。只有在管理员集群使用 MetalLB 时,您才能为用户集群使用 MetalLB。此负载均衡方案只需进行极少的配置。MetalLB 直接在集群节点上运行,不需要额外的虚拟机。如需详细了解使用 MetalLB 的优势及其与其他负载均衡方案的比较情况,请参阅使用 MetalLB 进行捆绑式负载均衡。
示例命令会创建具有以下特征的用户集群,您可以根据环境的需要修改这些特征。
标志 | 说明 |
---|---|
--admin-users |
向您和另一个用户授予对集群的完整管理权限。 |
--enable-control-plane-v2 |
启用 Controlplane V2,1.30 版及更高版本建议并要求启用。 |
--control-plane-ip-block |
一个用于控制平面节点的 IP 地址。如需创建高可用性 (HA) 用户集群,请指定三个 IP 地址并添加 --replicas=3 标志。 |
--metal-lb-config-address-pools |
两个用于 MetalLB 负载均衡器的地址池。您至少需要一个地址池,并且可根据需要指定更多地址池。为方便起见,该示例包含一个名称为“ingress-vip-pool”的地址池,以提醒您入站流量 VIP 的 IP 地址必须属于某个地址池。您可以通过将 /32 附加到单个 IP 地址,为该 IP 地址指定 CIDR。 |
gcloud container vmware clusters create USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION \ --version=VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --admin-users=ANOTHER_EMAIL_ADDRESS \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --metal-lb-config-address-pools='pool=NAME,avoid-buggy-ips=AVOID_BUGGY_IPS,manual-assign=MANUAL_ASSIGN,addresses=IP_ADDRESS_RANGE_1' \ --metal-lb-config-address-pools='pool=ingress-vip-pool,avoid-buggy-ips=False,manual-assign=True,addresses=INGRESS_VIP/32' \ --enable-control-plane-v2 \ --dns-servers=DNS_SERVER_1 \ --ntp-servers=NTP_SERVER_1 \ --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1 CP_HOST_1' \ --control-plane-vip=CONTROL_PLANE_VIP \ --ingress-vip=INGRESS_VIP \ --enable-dhcp
替换以下内容:
-
USER_CLUSTER_NAME
:您为用户集群选择的名称。创建集群后,此名称便无法更改。 该名称必须:- 最多包含 40 个字符
- 只能包含小写字母数字字符或连字符 (
-
) - 以字母字符开头
- 以字母数字字符结尾
-
FLEET_HOST_PROJECT_ID
:您要在其中创建集群的项目的 ID。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。 -
ADMIN_CLUSTER_NAME
:管理用户集群的管理员集群的名称。在--admin-cluster-membership
标志中,您可以使用完整指定的集群名称,其格式如下:projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME
或者,您可以将
--admin-cluster-membership
设置为管理员集群的名称,如示例命令所示。如果仅使用管理员集群的名称,请使用--admin-cluster-membership-project
设置管理员集群的项目 ID,并使用--admin-cluster-membership-location
设置位置。管理集群的位置是global
或 Google Cloud 区域。如果您需要查找区域,请运行gcloud container fleet memberships list
。 -
REGION
:GKE On-Prem API (gkeonprem.googleapis.com
)、Fleet 服务 (gkehub.googleapis.com
) 和 Connect 服务 (gkeconnect.googleapis.com
) 运行的 Google Cloud 区域。请指定us-west1
或其他受支持的区域。创建集群后,此区域便无法更改。此设置指定存储以下内容的区域:- GKE On-Prem API 管理集群生命周期所需的用户集群元数据
- 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
- Cloud Audit Logs 创建的管理员审核日志
集群名称、项目和位置共同在 Google Cloud 中唯一标识集群。
-
VERSION
:用户集群的 Google Distributed Cloud 版本。 -
YOUR_EMAIL_ADDRESS
和ANOTHER_EMAIL_ADDRESS
:如果您没有添加--admin-users
标志,作为集群创建者,默认情况下您将获得集群管理员权限。但是,如果您添加--admin-users
以将其他用户指定为管理员,则会替换默认值,并且需要同时添加您的电子邮件地址和另一个管理员的电子邮件地址。例如,如需添加两个管理员:--admin-users=sara@example.com \ --admin-users=amal@example.com
创建集群时,GKE On-Prem API 将 Kubernetes 基于角色的访问控制 (RBAC) 政策应用于集群,以授予您和其他管理用户 Kubernetes
clusterrole/cluster-admin
角色,该角色提供对集群中所有名称空间中的每个资源的完全访问权限。
-
SERVICE_CIDR_BLOCK
:用于集群中 Service 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /24。示例:
--service-address-cidr-blocks=10.96.0.0/20
-
POD_CIDR_BLOCK
:用于集群中 Pod 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /18。示例:
--pod-address-cidr-blocks=192.168.0.0/16
-
--metal-lb-config-address-pools
:添加此标志可指定 MetalLB 负载均衡器要使用的地址池的配置。该标志的值采用以下格式:--metal-lb-config-address-pool 'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
该值的各部分分别以关键字
pool
、avoid-buggy-ip
、manual-assign
和addresses
开头。每个细分之间用英文逗号分隔。-
pool
:您为池选择的名称。 -
avoid-buggy-ips
1:如果将该部分设置为True
,则 MetalLB 控制器不会将以 .0 或 .255 结尾的 IP 地址分配给 Service。这样可以避免有问题的用户设备错误地丢弃发送到这些特殊 IP 地址的流量。如果未指定,则默认为False
。 -
manual-assign
:如果您不希望 MetalLB 控制器自动将此池中的 IP 地址分配给 Service,请将该部分设置为True
。之后,开发者便可以创建LoadBalancer
类型的 Service 并手动指定池中的一个地址。如果未指定,则将manual-assign
设置为False
。 -
在
addresses
列表中:每个地址都必须是采用 CIDR 表示法或带连字符的范围格式的范围。如需指定池中的单个 IP 地址(例如对于入站流量 VIP),请使用 /32(采用 CIDR 表示法,例如192.0.2.1/32
)。
请注意以下几点:
- 用英文单引号将整个值括起来。
- 不允许使用空格。
- 用英文分号分隔每个 IP 地址范围。
例如:
--metal-lb-config-address-pool 'pool=pool1,avoid-buggy-ips=True,manual-assign=True,addresses=10.251.134.80/32;192.168.1.0/26;192.168.1.2-192.168.1.3'
-
-
CONTROL_PLANE_VIP
:您已选择在负载均衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。示例:
--control-plane-vip=203.0.113.3
-
INGRESS_VIP
:您选择在负载均衡器上为 Ingress 代理配置的 IP 地址。示例:
--ingress-vip=10.251.134.80
Ingress VIP 的 IP 地址必须属于某一个 MetalLB 地址池。
--enable-dhcp
:如果您希望集群节点从您提供的 DHCP 服务器中获取其 IP 地址,请添加--enable-dhcp
。如果您要为集群节点提供静态 IP 地址,或者您要设置手动负载均衡,请勿添加此标志。
MetalLB 和静态 IP
此示例展示了如何创建具有捆绑式 MetalLB 负载均衡器的用户集群,并为集群工作器节点分配静态 IP 地址。只有在管理员集群使用 MetalLB 时,您才能为用户集群使用 MetalLB。此负载均衡方案只需进行极少的配置。MetalLB 直接在集群节点上运行,不需要额外的虚拟机。如需详细了解使用 MetalLB 的优势及其与其他负载均衡方案的比较情况,请参阅使用 MetalLB 进行捆绑式负载均衡。
示例命令会创建具有以下特征的用户集群,您可以根据环境的需要修改这些特征。
标志 | 说明 |
---|---|
--admin-users |
向您和另一个用户授予对集群的完整管理权限。 |
--enable-control-plane-v2 |
启用 Controlplane V2,1.30 版及更高版本建议并要求启用。 |
--control-plane-ip-block |
一个用于控制平面节点的 IP 地址。如需创建高可用性 (HA) 用户集群,请指定三个 IP 地址并添加 --replicas=3 标志。 |
--metal-lb-config-address-pools |
两个用于 MetalLB 负载均衡器的地址池。您至少需要一个地址池,并且可根据需要指定更多地址池。为方便起见,该示例包含一个名称为“ingress-vip-pool”的地址池,以提醒您入站流量 VIP 的 IP 地址必须属于某个地址池。您可以通过将 /32 附加到单个 IP 地址,为该 IP 地址指定 CIDR。 |
--static-ip-config-ip-blocks |
四个用于集群中工作器节点的 IP 地址。其中包括可能在升级和更新期间使用的额外节点的地址。您可以根据需要指定更多 IP 地址。主机名是可选的。 |
gcloud container vmware clusters create USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION \ --version=VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --admin-users=ANOTHER_EMAIL_ADDRESS \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --metal-lb-config-address-pools='pool=NAME,avoid-buggy-ips=AVOID_BUGGY_IPS,manual-assign=MANUAL_ASSIGN,addresses=IP_ADDRESS_RANGE_1' \ --metal-lb-config-address-pools='pool=ingress-vip-pool,avoid-buggy-ips=False,manual-assign=True,addresses=INGRESS_VIP/32' \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1 CP_HOST_1' \ --control-plane-vip=CONTROL_PLANE_VIP \ --ingress-vip=INGRESS_VIP \ --static-ip-config-ip-blocks='gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1 HOST_1;IP_ADDRESS_2 HOST_2;IP_ADDRESS_3 HOST_3;IP_ADDRESS_4 HOST_4' \ --dns-servers=DNS_SERVER_1 \ --ntp-servers=NTP_SERVER_1
替换以下内容:
-
USER_CLUSTER_NAME
:您为用户集群选择的名称。创建集群后,此名称便无法更改。 该名称必须:- 最多包含 40 个字符
- 只能包含小写字母数字字符或连字符 (
-
) - 以字母字符开头
- 以字母数字字符结尾
-
FLEET_HOST_PROJECT_ID
:您要在其中创建集群的项目的 ID。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。 -
ADMIN_CLUSTER_NAME
:管理用户集群的管理员集群的名称。在--admin-cluster-membership
标志中,您可以使用完整指定的集群名称,其格式如下:projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME
或者,您可以将
--admin-cluster-membership
设置为管理员集群的名称,如示例命令所示。如果仅使用管理员集群的名称,请使用--admin-cluster-membership-project
设置管理员集群的项目 ID,并使用--admin-cluster-membership-location
设置位置。管理集群的位置是global
或 Google Cloud 区域。如果您需要查找区域,请运行gcloud container fleet memberships list
。 -
REGION
:GKE On-Prem API (gkeonprem.googleapis.com
)、Fleet 服务 (gkehub.googleapis.com
) 和 Connect 服务 (gkeconnect.googleapis.com
) 运行的 Google Cloud 区域。请指定us-west1
或其他受支持的区域。创建集群后,此区域便无法更改。此设置指定存储以下内容的区域:- GKE On-Prem API 管理集群生命周期所需的用户集群元数据
- 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
- Cloud Audit Logs 创建的管理员审核日志
集群名称、项目和位置共同在 Google Cloud 中唯一标识集群。
-
VERSION
:用户集群的 Google Distributed Cloud 版本。 -
YOUR_EMAIL_ADDRESS
和ANOTHER_EMAIL_ADDRESS
:如果您没有添加--admin-users
标志,作为集群创建者,默认情况下您将获得集群管理员权限。但是,如果您添加--admin-users
以将其他用户指定为管理员,则会替换默认值,并且需要同时添加您的电子邮件地址和另一个管理员的电子邮件地址。例如,如需添加两个管理员:--admin-users=sara@example.com \ --admin-users=amal@example.com
创建集群时,GKE On-Prem API 将 Kubernetes 基于角色的访问控制 (RBAC) 政策应用于集群,以授予您和其他管理用户 Kubernetes
clusterrole/cluster-admin
角色,该角色提供对集群中所有名称空间中的每个资源的完全访问权限。
-
SERVICE_CIDR_BLOCK
:用于集群中 Service 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /24。示例:
--service-address-cidr-blocks=10.96.0.0/20
-
POD_CIDR_BLOCK
:用于集群中 Pod 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /18。示例:
--pod-address-cidr-blocks=192.168.0.0/16
-
--metal-lb-config-address-pools
:添加此标志可指定 MetalLB 负载均衡器要使用的地址池的配置。该标志的值采用以下格式:--metal-lb-config-address-pool 'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
该值的各部分分别以关键字
pool
、avoid-buggy-ip
、manual-assign
和addresses
开头。每个细分之间用英文逗号分隔。-
pool
:您为池选择的名称。 -
avoid-buggy-ips
1:如果将该部分设置为True
,则 MetalLB 控制器不会将以 .0 或 .255 结尾的 IP 地址分配给 Service。这样可以避免有问题的用户设备错误地丢弃发送到这些特殊 IP 地址的流量。如果未指定,则默认为False
。 -
manual-assign
:如果您不希望 MetalLB 控制器自动将此池中的 IP 地址分配给 Service,请将该部分设置为True
。之后,开发者便可以创建LoadBalancer
类型的 Service 并手动指定池中的一个地址。如果未指定,则将manual-assign
设置为False
。 -
在
addresses
列表中:每个地址都必须是采用 CIDR 表示法或带连字符的范围格式的范围。如需指定池中的单个 IP 地址(例如对于入站流量 VIP),请使用 /32(采用 CIDR 表示法,例如192.0.2.1/32
)。
请注意以下几点:
- 用英文单引号将整个值括起来。
- 不允许使用空格。
- 用英文分号分隔每个 IP 地址范围。
例如:
--metal-lb-config-address-pool 'pool=pool1,avoid-buggy-ips=True,manual-assign=True,addresses=10.251.134.80/32;192.168.1.0/26;192.168.1.2-192.168.1.3'
-
-
CONTROL_PLANE_VIP
:您已选择在负载均衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。示例:
--control-plane-vip=203.0.113.3
-
INGRESS_VIP
:您选择在负载均衡器上为 Ingress 代理配置的 IP 地址。示例:
--ingress-vip=10.251.134.80
Ingress VIP 的 IP 地址必须属于某一个 MetalLB 地址池。
-
--static-ip-config-ip-blocks
:指定用户集群中工作器节点的默认网关、子网掩码和静态 IP 地址列表。该标志的值采用以下格式:--static-ip-config-ip-blocks 'gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...'
该值的各部分分别以关键字
gateway
、netmask
和ips
开头。用逗号分隔各个部分。请注意以下几点:
- 用英文单引号将整个值括起来。
- 除了在 IP 地址和主机名之间,其他地方不允许使用空格。
在 IP 地址列表中:
- 您可以指定单个 IP 地址或 IP 地址的 CIDR 地址块。
- 用分号分隔每个 IP 地址或 CIDR 块。
- 对于单个 IP 地址,您可以选择在 IP 地址后指定主机名。用空格分隔 IP 地址和主机名。如果您未指定主机名,则 Google Distributed Cloud 会使用 vSphere 中的虚拟机名称作为主机名。
- 如果您指定 CIDR 块,请不要为主机名指定值。
例如:
--static-ip-config-ip-blocks 'gateway=172.16.23.254,netmask=255.255.252.0,ips=172.16.20.10;172.16.20.11 host2;172.16.20.12/30'
-
DNS_SERVER
:虚拟机的 DNS 服务器的 IP 地址列表(以英文逗号分隔)。 -
DNS_SEARCH_DOMAIN
:供主机使用的 DNS 搜索网域列表(以英文逗号分隔)。这些搜索域会用作网域搜索列表的一部分。例如:
--dns-search-domains example.com,examplepetstore.com
-
NTP_SERVER
:供虚拟机使用的时间服务器的 IP 地址列表(以英文逗号分隔)。
手动 LB 和静态 IP
此示例展示了如何创建具有手动负载均衡器的用户集群,并为集群工作器节点分配静态 IP 地址。只有在管理员集群使用手动负载均衡器时,您才能为用户集群使用手动负载均衡器。在 Google Distributed Cloud 中,Kubernetes API 服务器、入站流量代理和用于日志汇总的附加服务均由 LoadBalancer
类型的 Kubernetes Service 公开。为这些 Service 自行选择 30000 到 32767 范围内的 nodePort
值。对于入站流量代理,请选择一个适用于 HTTP 和 HTTPS 流量的 nodePort
值。如需了解详情,请参阅启用手动负载均衡模式。
示例命令会创建具有以下特征的用户集群,您可以根据环境的需要修改这些特征。
标志 | 说明 |
---|---|
--admin-users |
向您和另一个用户授予对集群的完整管理权限。 |
--enable-control-plane-v2 |
启用 Controlplane V2,1.30 版及更高版本建议并要求启用。 |
--control-plane-ip-block |
一个用于控制平面节点的 IP 地址。如需创建高可用性 (HA) 用户集群,请指定三个 IP 地址并添加 --replicas=3 标志。 |
--static-ip-config-ip-blocks |
四个用于集群中工作器节点的 IP 地址。其中包括可能在升级和更新期间使用的额外节点的地址。您可以根据需要指定更多 IP 地址。主机名是可选的。 |
gcloud container vmware clusters create USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION \ --version=VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --admin-users=ANOTHER_EMAIL_ADDRESS \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1 CP_HOST_1' \ --control-plane-vip=CONTROL_PLANE_VIP \ --ingress-vip=INGRESS_VIP \ --ingress-http-node-port=INGRESS_HTTP_NODE_PORT \ --ingress-https-node-port=INGRESS_HTTPS_NODE_PORT \ --static-ip-config-ip-blocks='gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1 HOST_1;IP_ADDRESS_2 HOST_2;IP_ADDRESS_3 HOST_3;IP_ADDRESS_4 HOST_4' \ --dns-servers=DNS_SERVER_1 \ --ntp-servers=NTP_SERVER_1
替换以下内容:
-
USER_CLUSTER_NAME
:您为用户集群选择的名称。创建集群后,此名称便无法更改。 该名称必须:- 最多包含 40 个字符
- 只能包含小写字母数字字符或连字符 (
-
) - 以字母字符开头
- 以字母数字字符结尾
-
FLEET_HOST_PROJECT_ID
:您要在其中创建集群的项目的 ID。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。 -
ADMIN_CLUSTER_NAME
:管理用户集群的管理员集群的名称。在--admin-cluster-membership
标志中,您可以使用完整指定的集群名称,其格式如下:projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME
或者,您可以将
--admin-cluster-membership
设置为管理员集群的名称,如示例命令所示。如果仅使用管理员集群的名称,请使用--admin-cluster-membership-project
设置管理员集群的项目 ID,并使用--admin-cluster-membership-location
设置位置。管理集群的位置是global
或 Google Cloud 区域。如果您需要查找区域,请运行gcloud container fleet memberships list
。 -
REGION
:GKE On-Prem API (gkeonprem.googleapis.com
)、Fleet 服务 (gkehub.googleapis.com
) 和 Connect 服务 (gkeconnect.googleapis.com
) 运行的 Google Cloud 区域。请指定us-west1
或其他受支持的区域。创建集群后,此区域便无法更改。此设置指定存储以下内容的区域:- GKE On-Prem API 管理集群生命周期所需的用户集群元数据
- 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
- Cloud Audit Logs 创建的管理员审核日志
集群名称、项目和位置共同在 Google Cloud 中唯一标识集群。
-
VERSION
:用户集群的 Google Distributed Cloud 版本。 -
YOUR_EMAIL_ADDRESS
和ANOTHER_EMAIL_ADDRESS
:如果您没有添加--admin-users
标志,作为集群创建者,默认情况下您将获得集群管理员权限。但是,如果您添加--admin-users
以将其他用户指定为管理员,则会替换默认值,并且需要同时添加您的电子邮件地址和另一个管理员的电子邮件地址。例如,如需添加两个管理员:--admin-users=sara@example.com \ --admin-users=amal@example.com
创建集群时,GKE On-Prem API 将 Kubernetes 基于角色的访问控制 (RBAC) 政策应用于集群,以授予您和其他管理用户 Kubernetes
clusterrole/cluster-admin
角色,该角色提供对集群中所有名称空间中的每个资源的完全访问权限。
-
SERVICE_CIDR_BLOCK
:用于集群中 Service 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /24。示例:
--service-address-cidr-blocks=10.96.0.0/20
-
POD_CIDR_BLOCK
:用于集群中 Pod 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /18。示例:
--pod-address-cidr-blocks=192.168.0.0/16
CONTROL_PLANE_VIP
:您已选择在负载均衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。示例:
--control-plane-vip=203.0.113.3
INGRESS_VIP
:您选择在负载均衡器上为入站流量代理配置的 IP 地址。示例:
--ingress-vip=203.0.113.4
INGRESS_HTTP_NODE_PORT
:流向 Ingress 代理的 HTTP 流量的nodePort
值(例如30243
)。INGRESS_HTTPS_NODE_PORT
:流向 Ingress 代理的 HTTPS 流量的nodePort
值(例如30879
)。
-
--static-ip-config-ip-blocks
:指定用户集群中工作器节点的默认网关、子网掩码和静态 IP 地址列表。该标志的值采用以下格式:--static-ip-config-ip-blocks 'gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...'
该值的各部分分别以关键字
gateway
、netmask
和ips
开头。用逗号分隔各个部分。请注意以下几点:
- 用英文单引号将整个值括起来。
- 除了在 IP 地址和主机名之间,其他地方不允许使用空格。
在 IP 地址列表中:
- 您可以指定单个 IP 地址或 IP 地址的 CIDR 地址块。
- 用分号分隔每个 IP 地址或 CIDR 块。
- 对于单个 IP 地址,您可以选择在 IP 地址后指定主机名。用空格分隔 IP 地址和主机名。如果您未指定主机名,则 Google Distributed Cloud 会使用 vSphere 中的虚拟机名称作为主机名。
- 如果您指定 CIDR 块,请不要为主机名指定值。
例如:
--static-ip-config-ip-blocks 'gateway=172.16.23.254,netmask=255.255.252.0,ips=172.16.20.10;172.16.20.11 host2;172.16.20.12/30'
-
DNS_SERVER
:虚拟机的 DNS 服务器的 IP 地址列表(以英文逗号分隔)。 -
DNS_SEARCH_DOMAIN
:供主机使用的 DNS 搜索网域列表(以英文逗号分隔)。这些搜索域会用作网域搜索列表的一部分。例如:
--dns-search-domains example.com,examplepetstore.com
-
NTP_SERVER
:供虚拟机使用的时间服务器的 IP 地址列表(以英文逗号分隔)。
控制平面标志
如果您要为控制平面配置使用非默认值,请添加以下一个或多个标志:
--cpus=vCPUS
:用户集群的每个控制平面节点的 vCPU 数量(最少 4 个)。如果未指定,则默认值为 4 个 vCPU。--memory=MEMORY
:用户集群的每个控制平面的内存大小(以兆比字节 (MiB) 为单位)。最小值为 8192,并且必须是 4 的倍数。如果未指定,则默认值为 8192。--replicas=NODES
:您的用户集群的控制平面节点数量。例如,您可以为开发环境选择 1 个控制平面节点,为高可用性 (HA) 生产环境选择 3 个控制平面节点。--enable-auto-resize
:如果要为用户集群启用控制平面节点的自动调整大小功能,请添加--enable-auto-resize
。调整大小是指自动调整分配给节点的 vCPU 和内存资源。启用后,用户集群控制平面节点会根据用户集群中的工作器节点数量调整大小。因此,当您向用户集群添加更多工作器节点时,控制平面节点的大小会增加。--enable-control-plane-v2
:如需启用 Controlplane V2(建议启用),请添加此标志。启用 Controlplane V2 后,用户集群的控制平面在用户集群本身中的一个或多个节点上运行。在 1.30 版及更高版本中,必须使用 Controlplane V2。如果启用 Controlplane V2,则还必须指定以下标志:
--dns-servers=DNS_SERVER_1,...
:虚拟机的 DNS 服务器的 IP 地址列表(以英文逗号分隔)。--ntp-servers=NTP_SERVER_1,...
:供虚拟机使用的时间服务器的 IP 地址列表(以英文逗号分隔)。--control-plane-ip-block
,其格式如下:--control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1;CP_IP_ADDRESS_2 CP_HOST_2'
该值的各部分以关键字
gateway
、netmask
和ips
开头。用逗号分隔各个部分。请注意以下几点:
- 用英文单引号将整个值括起来。
除了在 IP 地址和主机名之间,其他地方不允许使用空格。
在 IP 地址列表中:
您可以指定单个 IP 地址或 IP 地址的 CIDR 块。
用分号分隔每个 IP 地址或 CIDR 块。
对于单个 IP 地址,您可以选择在 IP 地址后指定主机名。用空格分隔 IP 地址和主机名。
如果您指定 CIDR 块,请不要为主机名指定值。
例如:
--control-plane-ip-block 'gateway=192.168.0.1,netmask=255.0.0.0,ips=192.168.1.1;192.168.1.2 hostname-2;192.168.2.2/28`
可选:
--dns-search-domains=DNS_SEARCH_DOMAIN_1,...
:供主机使用的 DNS 搜索网域列表(以英文逗号分隔)。这些网域会用作网域搜索列表的一部分。例如:
--dns-search-domains example.com,examplepetstore.com
如需查看标志及其说明的完整列表,请参阅 gcloud CLI 参考文档。
vSphere 标志
如果需要,请指定以下可选标志:
--disable-aag-config
:如果您不添加此标志,则系统会自动为用户集群的节点创建 VMware 分布式资源调度器 (DRS) 反亲和性规则,使其分布在数据中心的至少 3 个物理主机上。确保您的 vSphere 环境符合要求。如果您的集群不符合要求,请添加此标志。--disable-vsphere-csi
:如果您不添加此标志,则 vSphere 容器存储接口 (CSI) 组件会部署在用户集群中。CSI 驱动程序运行在 vSphere 中部署的原生 Kubernetes 集群中,用于在 vSphere 存储上预配永久性卷。如需了解详情,请参阅使用 vSphere 容器存储接口驱动程序。 如果您不想部署 CSI 组件,请添加此标志。如需查看标志及其说明的完整列表,请参阅 gcloud CLI 参考文档。
跟踪集群创建进度
cluster create 命令的输出类似于以下内容:
Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
在示例输出中,字符串
operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179
是长时间运行的操作的OPERATION_ID
。您可以使用以下命令了解该操作的状态:gcloud container vmware operations describe OPERATION_ID \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION
如需了解详情,请参阅 gcloud container vmware operations。
创建用户集群需要 15 分钟或更长时间。您可以在 Google Cloud 控制台中的 GKE 集群页面上查看集群。
创建节点池
创建集群后,您至少需要创建一个节点池才能部署工作负载。
gcloud container vmware node-pools create NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --image-type=IMAGE_TYPE \ --boot-disk-size=BOOT_DISK_SIZE \ --cpus=vCPUS \ --memory=MEMORY \ --replicas=NODES \ --enable-load-balancer
请替换以下内容:
NODE_POOL_NAME
:您为节点池选择的名称。该名称必须:- 最多包含 40 个字符
- 只能包含小写字母数字字符或连字符 (
-
) - 以字母字符开头
- 以字母数字字符结尾
USER_CLUSTER_NAME
:新创建的用户集群的名称。FLEET_HOST_PROJECT_ID
:集群在其中注册的项目的 ID。REGION
:您在创建集群时指定的 Google Cloud 区域。IMAGE_TYPE
:要在节点池中的虚拟机上运行的操作系统映像类型。设置为以下其中一项:ubuntu_containerd
或cos
。BOOT_DISK_SIZE
:池中每个节点的启动磁盘的大小(以吉比字节 [GiB] 为单位)。最小值为 40 GiB。vCPUs
:节点池中每个节点的 vCPU 数量。最小值为 4。MEMORY
:池中每个节点的内存大小(以兆比字节 [MiB] 为单位)。每个用户集群工作器节点至少需要 8192 MiB,并且该值必须是 4 的倍数。NODES
:节点池中的节点数。最小值为 3。如果您使用 MetalLB 作为负载均衡器,则可以选择添加
--enable-load-balancer
(如果您想允许 MetalLB speaker 在池中的节点上运行)。必须至少在一个节点池中启用 MetalLB。如果不添加此标志,则必须创建另一个用于 MetalLB 的节点池。如需了解可选标志,请参阅添加节点池和 gcloud CLI 参考文档。
gcloud 命令示例
MetalLB 和 DHCP
gcloud container vmware clusters create user-cluster-1 \ --project=example-project-12345 \ --location=us-west1 \ --admin-cluster-membership=projects/example-project-12345/locations/us-west1/memberships/admin-cluster-1 \ --version=1.30.0-gke.1930 \ --admin-users=sara@example.com \ --admin-users=amal@example.com \ --enable-dhcp \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --metal-lb-config-address-pools='pool=lb-pool-1,manual-assign=False,avoid-buggy-ips=True,addresses=192.0.2.0/26;pool=lb-ingress-vip-pool,manual-assign=True,addresses=198.51.100.1/32' \ --enable-control-plane-v2 \ --control-plane-vip=203.0.113.1 \ --ingress-vip=198.51.100.1
如需了解 --metal-lb-config-address-pools
标志,请参阅负载均衡器。
MetalLB 和静态 IP
gcloud container vmware clusters create user-cluster-3 \ --project=example-project-12345 \ --location=europe-west1 \ --admin-cluster-membership=projects/example-project-12345/locations/global/memberships/admin-cluster-1 \ --version=1.30.0-gke.1930 \ --admin-users=sara@example.com \ --admin-users=amal@example.com \ --static-ip-config-ip-blocks='gateway=192.0.2.254,netmask=255.255.255.0,ips=192.0.2.10 user-vm-1;192.0.2.11 user-vm-2' \ --static-ip-config-ip-blocks='gateway=192.0.2.254,netmask=255.255.255.0,ips=192.0.2.12 user-vm-3;192.0.2.13 extra-vm' \ --dns-servers=203.0.113.1,203.0.113.2 \ --dns-search-domains=example.com,altostrat.com \ --ntp-servers=203.0.113.3,203.0.113.4 \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=192.0.2.254,netmask=255.255.255.0,ips=198.51.100.1 cp-vm-1;198.51.100.2 cp-vm-2;198.51.100.3 cp-vm-3' \ --replicas=3 \ --metal-lb-config-address-pools='pool=lb-pool-1,manual-assign=False,avoid-buggy-ips=True,addresses=192.0.2.0/26;lb-ingress-vip-pool,manual-assign=True,addresses=198.51.100.1/32' \ --control-plane-vip=172.16.20.61 \ --ingress-vip=172.16.20.62
手动 LB 和静态 IP
gcloud container vmware clusters create user-cluster-4 \ --project=example-project-12345 \ --location=asia-east1 \ --admin-cluster-membership=projects/example-project-12345/locations/asia-east1/memberships/admin-cluster-1 \ --version=1.30.0-gke.1930 \ --admin-users=sara@example.com \ --admin-users=amal@example.com \ --static-ip-config-ip-blocks='gateway=192.0.2.254,netmask=255.255.255.0,ips=192.0.2.10 user-vm-1;192.0.2.11 user-vm-2';ips=192.0.2.12 user-vm-3;192.0.2.13 extra-vm'\ --dns-servers=203.0.113.1,203.0.113.2 \ --ntp-servers=203.0.113.3,203.0.113.4 \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=192.0.2.254,netmask=255.255.255.0,ips=198.51.100.1 cp-vm-1;198.51.100.2 cp-vm-2;198.51.100.3 cp-vm-3' \ --replicas=3 \ --control-plane-vip=192.0.2.60 \ --ingress-vip=192.0.2.50 \ --ingress-http-node-port=30243 \ --ingress-https-node-port=30879
Terraform
准备工作
获取管理员集群的名称和舰队成员资格位置:
gcloud container fleet memberships list \ --project=FLEET_HOST_PROJECT_ID
将
FLEET_HOST_PROJECT_ID
替换为管理员集群注册到的项目的 ID。输出类似于以下内容:
NAME EXTERNAL_ID LOCATION admin-cluster-1 bb7803b4-8438-4b22-859f-4559b4b29072 global admin-cluster-2 ee16ee2b-6ec0-49fc-9413-3c89cbc70854 global admin-cluster-3 fc2b7ef5-39ff-4b63-b919-04c5adc67be4 us-west1
该位置指定了 Fleet 服务和 Connect 服务的运行位置。1.28 版之前创建的管理员集群由全球级舰队和 Connect 服务管理。在 1.28 及更高版本中,您可以在创建集群时指定
global
或 Google Cloud 区域。获取可用版本的列表:
gcloud container vmware clusters query-version-config \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION
替换以下内容:
ADMIN_CLUSTER_NAME
:管理员集群的名称。FLEET_HOST_PROJECT_ID
:管理员集群注册到的项目的 ID。ADMIN_CLUSTER_REGION
:管理员集群的舰队成员资格区域。这可以是 global 或 Google Cloud 区域。使用gcloud container fleet memberships list
输出中的管理员集群的位置。REGION
:您将在创建集群时使用的 Google Cloud 区域。这是 GKE On-Prem API 以及 Fleet 和 Connect 服务运行的区域。请指定us-west1
或其他受支持的区域。
此命令的输出类似如下所示:
versions: - isInstalled: true version: 1.14.3-gke.25 - version: 1.14.4-gke.54 - version: 1.15.0-gke.581
可用于创建用户集群的版本带有
isInstalled=true
注解,这意味着管理员集群具有管理该版本的用户集群所需的特定于版本的组件。如果您要使用其他可用版本创建用户集群,请参阅安装比管理员集群版本更高的版本。
示例
您可以使用以下基本配置示例,创建具有捆绑式 MetalLB 负载均衡器的用户集群和一个节点池。
如需了解详情和其他示例,请参阅 google_gkeonprem_vmware_cluster
参考文档。
在 terraform.tfvars
中设置变量
此示例提供了一个要传入到 main.tf
的示例变量文件,介绍了如何配置捆绑式 MetalLB 负载均衡器并允许集群节点从您提供的 DHCP 服务器获取其 IP 地址。
克隆
anthos-samples
代码库并切换到 Terraform 示例所在的目录:git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/anthos-onprem-terraform/avmw_user_cluster_metallb
复制
terraform.tfvars.sample
文件:cp terraform.tfvars.sample terraform.tfvars
修改
terraform.tfvars
中的参数值。以下列表介绍了这些变量:
project_id
:项目 ID,您将在此项目中创建集群。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。region
:GKE On-Prem API(gkeonprem.googleapis.com
)、舰队服务(gkehub.googleapis.com
)和 Connect 服务(gkeconnect.googleapis.com
)运行时所在的 Google Cloud 区域。请指定us-west1
或其他受支持的区域。admin_cluster_name
:管理用户集群的管理员集群的名称。 该示例假定管理员集群使用全球作为区域。如果您有一个区域级管理集群:- 使用文本编辑器打开
main.tf
。 - 搜索
admin_cluster_membership
,如下所示:
admin_cluster_membership = "projects/${var.project_id}/locations/global/memberships/${var.admin_cluster_name}"
- 将
global
更改为管理员集群使用的区域,然后保存文件。
- 使用文本编辑器打开
on_prem_version
:用户集群的 Google Distributed Cloud 版本。通常,您需要指定与管理员集群相同的版本。如需指定更高版本,请安装比管理员集群版本更高的版本。如果您不知道管理员集群版本,请运行gcloud container vmware clusters query-version-config
,这是安装比管理员集群版本更高的版本中的第一步。admin_user_emails
:将被授予集群管理员权限的用户的电子邮件地址列表。如果您打算管理集群,请务必添加您的电子邮件地址。创建集群后,GKE On-Prem API 会将 Kubernetes 基于角色的访问控制 (RBAC) 政策应用于集群,以授予管理员用户 Kubernetes
clusterrole/cluster-admin
角色,该角色提供对集群的所有命名空间中的每个资源的完整访问权限。此角色还可让用户使用其 Google 身份登录控制台。cluster_name
:您为用户集群选择的名称。创建集群后,此名称便无法更改。该名称必须:- 最多包含 40 个字符
- 只能包含小写字母数字字符或连字符 (
-
) - 以字母字符开头
- 以字母数字字符结尾
control_plane_node_cpus
:用户集群的每个控制平面节点的 vCPU 数量。最少 4 个 vCPU。control_plane_node_memory
:用户集群的每个控制平面的内存大小(以兆比字节 (MiB) 为单位)。最小值为 8192,并且必须是 4 的倍数。control_plane_node_replicas
:用户集群的控制平面节点数量。例如,您可以为开发环境选择 1 个控制平面节点,为高可用性 (HA) 生产环境选择 3 个控制平面节点。control_plane_vip
:您已选择在负载均衡器上为用户集群的 Kubernetes API 服务器配置的虚拟 IP 地址 (VIP)。ingress_vip
:您已选择在负载均衡器上为 Ingress 代理配置的 IP 地址。lb_address_pools
:定义 MetalLB 负载均衡器要使用的地址池的映射列表。入站流量 VIP 必须在其中一个池内。指定以下内容:name
:池的名称。addresses
:采用 CIDR 表示法或带连字符的范围格式的地址范围。如需指定池中的单个 IP 地址(例如对于入站流量 VIP),请使用 /32(采用 CIDR 表示法,例如192.0.2.1/32
)。
将示例 IP 地址替换为您的值,并根据需要添加其他地址池。
将更改保存在
terraform.tfvars
中。 如果您不想对main.tf
进行任何可选更改,请跳到后面的创建集群和一个节点池部分。
可选:在 main.tf
中配置集群设置
本部分介绍了您可以在 main.tf
中进行的一些可选配置更改。在进行更改之前,请创建 main.tf
的备份:
cp main.tf main.tf.bak
工作器节点 IP 寻址模式
默认情况下,main.tf
将集群配置为使用您提供的 DHCP 服务器,为集群的工作器节点分配 IP 地址。DHCP 通过在 network_config
块中添加 dhcp_config
映射进行配置。如果您要为工作器节点提供静态 IP 地址,请对 main.tf
进行以下更改:
替换
network_config
块并添加static_ip_config
块。例如:network_config { service_address_cidr_blocks = ["10.96.0.0/12"] pod_address_cidr_blocks = ["192.168.0.0/16"] host_config { dns_servers = ["10.254.41.1"] ntp_servers = ["216.239.35.8"] } static_ip_config { ip_blocks { netmask = "255.255.252.0" gateway = "10.251.31.254" ips { ip = "10.251.30.153" hostname = "vm-1" } ips { ip = "10.251.31.206" hostname = "vm-2" } ips { ip = "10.251.31.193" hostname = "vm-3" } ips { ip = "10.251.30.230" hostname = "vm-4" } } } }
将以下各项替换为您的值:
service_address_cidr_blocks
:用于集群中 Service 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /24。pod_address_cidr_blocks
:用于集群中 Pod 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /18。dns_servers
:虚拟机的 DNS 服务器的 IP 地址列表。ntp_servers
:供虚拟机使用的时间服务器的 IP 地址列表。在
static_ip_config
块中,将netmask
和gateway
的值替换为您的网络地址。将ip
和hostname
替换为工作器节点的 IP 地址和主机名。
配置 Controlplane V2
默认情况下,main.tf
会将用户集群的控制平面配置为在管理员集群的一个或多个节点上运行(称为 kubeception 模型)。如果您愿意,可以启用 Controlplane V2。启用 Controlplane V2 后,用户集群的控制平面在用户集群本身中的一个或多个节点上运行。如需配置 Controlplane V2,请对 main.tf
进行以下更改:
在包含
admin_cluster_membership
的行后添加以下行:enable_control_plane_v2 = "true"
将
control_plane_v2_config
映射添加到network_config
块,例如:control_plane_v2_config { control_plane_ip_block { netmask = "255.255.252.0" gateway = "10.250.71.254" ips { ip = "10.250.68.54" hostname = "cpv2-vm1" } ips { ip = "10.250.68.128" hostname = "cpv2-vm2" } ips { ip = "10.250.71.50" hostname = "cpv2-vm3" } } }
将
netmask
和gateway
的值替换为网络中的 IP 地址。将ip
和hostname
替换为控制平面节点的 IP 地址。
创建集群和一个节点池
初始化并创建 Terraform 方案:
terraform init
Terraform 会安装任何所需的库,例如 Google Cloud 提供程序。
检查配置,并根据需要进行更改:
terraform plan
应用 Terraform 方案以创建用户集群:
terraform apply
创建用户集群大约需要 15 分钟或更长时间,另外需要 15 分钟来创建节点池。您可以在 Google Cloud 控制台中的 GKE 集群页面上查看集群。
问题排查
请参阅排查集群创建和升级问题。