本文档介绍如何为 GKE on VMware 创建用户集群。用户集群是您运行工作负载的位置。每个用户集群都与一个管理员集群相关联。
如需详细了解管理员集群和用户集群,请参阅安装概览。
过程概览
以下是创建用户集群涉及的主要步骤:
- 连接到管理员工作站
- 管理员工作站是一个具有创建用户集群所需的工具的虚拟机。
- 填写配置文件
- 通过完成用户集群配置文件、凭据配置文件以及可能的 IP 地址块文件,指定新集群的详细信息。
- (可选)创建 Seesaw 负载均衡器
- 如果您已选择使用 Seesaw 负载均衡器,请运行
gkectl create loadbalancer
。
- (可选)将操作系统映像导入 vSphere,并将容器映像推送到私有注册表(如果适用的话)。
- 运行
gkectl prepare
。
- 创建用户集群
- 运行
gkectl create cluster
以按照配置文件中所指定的内容创建集群。
- 验证用户集群是否正在运行
- 使用
kubectl
查看集群节点。
此过程结束时,您将有一个正在运行的用户集群,您可以在其中部署工作负载。
准备工作
查看 IP 地址规划文档。确保您有足够的可用 IP 地址,并重新考虑关于集群节点获取其 IP 地址的方式的决定:DHCP 或静态。如果您决定使用静态 IP 地址,则必须填写包含所选地址的 IP 地址块文件。
查看负载均衡概览,并重新考虑有关要使用的负载均衡器类型的决定。对于某些负载均衡器,您必须先设置负载均衡器,然后才能创建用户集群。
请继续查看 vcenter 部分。考虑是否要为管理员集群和用户集群使用不同的 vSphere 集群,以及是否要使用不同的数据中心。
查看 nodePools 部分。考虑您需要的节点池数量以及每个池中运行的操作系统。
1. 连接到管理员工作站
与管理员工作站建立 SSH 连接。
您应该还记得,gkeadm
在管理员工作站上激活了您的组件访问服务账号。
在管理员工作站的主目录中完成本主题中的所有其余步骤。
2. 填写配置文件
当 gkeadm
创建管理员工作站时,它生成了一个名为 user-cluster.yaml
的配置文件。此配置文件用于创建用户集群。
浏览用户集群配置文件文档,以熟悉配置文件。建议您在单独的标签页或窗口中打开该文档,因为您在完成以下步骤时将参考它。
name
将 name
字段设置为您为用户集群选择的名称。
gkeOnPremVersion
系统已为您填写此字段。它指定 GKE on VMware 的版本。例如 1.11.0-gke.543
。
vCenter
您在管理员集群配置文件的 vCenter
部分中设置的值是全局值。也就是说,这些值会应用于管理员集群及其关联的用户集群。
对于您创建的每个用户集群,您可以选择替换一些全局 vCenter
值。
如需替换任何全局 vCenter
值,请填写用户集群配置文件的 vCenter
部分中的相关字段。
具体而言,您可能希望为管理员集群和用户集群使用不同的 vSphere 集群,并且为管理员集群和用户集群使用不同的数据中心。
使用一个数据中心和一个 vSphere 集群
默认选项是将一个数据中心和一个 vSphere 集群用于管理员集群和任何用户集群。管理员集群配置文件中的值也用于用户集群。请勿在用户集群配置文件中设置任何 vCenter
值。
在单独的 vSphere 集群中创建用户集群
如果您想创建位于自己的 vSphere 集群中的用户集群,请在用户集群配置文件中为 vCenter.cluster
指定值。
如果您的管理员集群和用户集群位于不同的 vSphere 集群中,它们可以位于相同的数据中心中,也可以位于不同数据中心中。
创建具有单独的数据中心的用户集群
用户集群和管理员集群可以位于不同的数据中心中。在这种情况下,它们也位于不同的 vSphere 集群中。
如果您在用户集群配置文件中指定 vCenter.datacenter
,则还必须指定 vCenter.datastore
和 vCenter.networkName
,并且必须指定 vCenter.cluster
或 vCenter.resourcePool
。
如需为管理员集群和用户集群使用不同的数据中心,我们建议您为管理员集群数据中心中的每个用户集群控制平面创建一个单独的datastore,以便管理员集群控制平面和用户集群控制平面具有相互隔离的数据存储区故障域。虽然您可以将管理员集群数据存储区用于用户集群控制平面节点,但这会将用户集群控制平面节点和管理员集群置于同一数据存储区故障域中。
位于自己的数据中心中的用户集群的不同 vCenter 账号
用户集群可以使用与管理员集群不同的 vCenter 账号和 vCenter.credentials
。管理员集群的 vCenter 账号需要管理员集群数据中心访问权限,而用户集群的 vCenter 账号只需要用户集群数据中心的访问权限。
network
确定您要集群节点获取其 IP 地址的方式。选项包括:
从提前设置的 DHCP 服务器获取。将
network.ipMode.type
设置为"dhcp"
。从您提供的静态 IP 地址列表获取。将
network.ipMode.type
设置为"static"
,并创建一个提供静态 IP 地址的 IP 地址块文件。如需查看 IP 地址块文件的示例,请参阅已填写的配置文件的示例。
根据需要填写 network 部分中的其余字段:
如果您决定为用户集群节点使用静态 IP 地址,则必须填写
network.ipMode.ipBlockFilePath
字段和network.hostconfig
部分。network.hostconfig
部分包含有关集群节点使用的 NTP 服务器、DNS 服务器和 DNS 搜索网域的信息。如果您使用的是 Seesaw 负载均衡器,则即使您打算为集群节点使用 DHCP,也必须填写
network.hostconfig
部分。network.podCIDR 和 network.serviceCIDR 具有预填充的值,您可以保持不变,除非它们与已在您的网络中使用的地址冲突。Kubernetes 会使用这些范围将 IP 地址分配给集群中的 Pod 和 Service。
无论您是依赖 DHCP 服务器还是指定静态 IP 地址列表,都需要有足够的 IP 地址供用户集群使用。这包括用户集群中的节点以及管理员集群中运行用户集群控制平面的节点。如需了解所需的 IP 地址数量,请参阅规划 IP 地址。
具有单独 network.vCenter.networkName
值的用户集群的防火墙规则
在管理员配置文件中,管理员集群和用户集群可以使用不同的 network.vCenter.networkName
值来表示不同的 VLAN 和不同的数据中心。但是,必须允许以下跨 VLAN 通信。
- 用户节点可以访问用户集群控制平面 VIP 地址上的端口 443 和 8132,并从这两个端口获取返回数据包。
loadBalancer
为用户集群的 Kubernetes API 服务器预留一个 VIP。为用户集群的入站服务预留另一个 VIP。提供您的 VIP 作为 loadBalancer.vips.controlPlaneVIP
和 loadBalancer.vips.ingressVIP
的值。
如需了解详情,请参阅用户集群子网中的 VIP 和管理员集群子网中的 VIP。
确定要使用的负载均衡类型。以下是各个选项:
MetalLB 捆绑式负载均衡。将
loadBalancer.kind
设置为"MetalLB"
。此外,填写loadBalancer.metalLB.addressPools
部分,并针对至少一个节点池将enableLoadBalancer
设置为true
。如需了解详情,请参阅使用 MetalLB 进行捆绑式负载均衡。Seesaw 捆绑式负载均衡。将
loadBalancer.kind
设置为"Seesaw"
,然后填写loadBalancer.seesaw
部分。如需了解详情,请参阅使用 Seesaw 进行捆绑式负载均衡。使用 F5 BIG-IP 的集成式负载均衡。将
loadBalancer.kind
设置为"F5BigIP"
,然后填写f5BigIP
部分。如需了解详情,请参阅使用 F5 BIG-IP 进行负载均衡。手动负载均衡。将
loadBalancer.kind
设置为"ManualLB"
,然后填写manualLB
部分。如需了解详情,请参阅手动负载均衡。
如需详细了解负载均衡选项,请参阅负载均衡概览。
enableDataplaneV2
决定是否要为用户集群启用 Dataplane V2,并相应地设置 enableDataplaneV2。
enableWindowsDataplaneV2
如果您计划使用 Windows 节点池,请决定是否要启用 Windows Dataplane V2,并相应地设置 enableWindowsDataplaneV2。
advancedNetworking
如果您计划创建出站 NAT 网关,请将 advancedNetworking 设置为 true
。
multipleNetworkInterfaces
决定是否要为 Pod 配置多个网络接口,并相应地设置 multipleNetworkInterfaces。
storage
如果要停用 vSphere CSI 组件的部署,请将 storage.vSphereCSIDisabled 设置为 true
。
masterNode
用户集群的控制平面在管理员集群中的节点上运行。
在 masterNode
部分中,您可以指定用户集群的控制平面节点数。您还可以为控制平面节点指定数据存储区,以及是否要为节点启用自动调整大小功能。
nodePools
节点池是集群中全都具有相同配置的一组节点。例如,一个池中的节点可以运行 Windows,另一个池中的节点可以运行 Linux。
您必须通过填写 nodePools
部分来至少指定一个节点池。
antiAffinityGroups
将 antiAffinityGroups.enabled
设置为 true
或 false
。
此字段指定 GKE on VMware 是否为用户集群节点创建分布式资源调度器 (DRS) 反亲和性规则,使其至少分布到数据中心内的三个物理主机上。
stackdriver
如果要为集群启用 Cloud Logging 和 Cloud Monitoring,请填写 stackdriver
部分。
默认情况下,此部分是必填的。也就是说,如果您不填写此部分,则必须在运行 gkectl create cluster
时添加 --skip-validation-stackdriver
标志。
gkeConnect
用户集群必须注册到 Google Cloud 舰队。
填写 gkeConnect
部分以指定舰队宿主项目和关联的服务账号。
usageMetering
如果要为集群启用用量计量功能,请填写 usageMetering
部分。
cloudAuditLogging
如果要将集群的 Kubernetes API 服务器中的审核日志与 Cloud Audit Logs 集成,请填写 cloudAuditLogging
部分。
已填写的配置文件的示例
以下是已填写的 IP 地址块文件和已填写的用户集群配置文件的示例。该配置支持部分(但不是全部)可用功能。
vc-01-ipblock-user.yaml
blocks: - netmask: 255.255.252.0 gateway: 172.16.23.254 ips: - ip: 172.16.20.21 hostname: user-host1 - ip: 172.16.20.22 hostname: user-host2 - ip: 172.16.20.23 hostname: user-host3 - ip: 172.16.20.24 hostname: user-host4 - ip: 172.16.20.25 hostname: user-host5 - ip: 172.16.20.26 hostname: user-host6
vc-01-user-cluster.yaml
apiVersion: v1 kind: UserCluster name: "gke-user-01" gkeOnPremVersion: 1.11.0-gke.543 network: hostConfig: dnsServers: - "203.0.113.1" - "198.51.100.1" ntpServers: - "216.239.35.4" ipMode: type: dhcp ipBlockFilePath: "vc-01-ipblock-user.yaml" serviceCIDR: 10.96.0.0/20 podCIDR: 192.168.0.0/16 vCenter: networkName: "vc01-net-1" loadBalancer: vips: controlPlaneVIP: "172.16.20.32" ingressVIP: "172.16.21.30" kind: "MetalLB" metalLB: addressPools: - name: "gke-address-pool-01" addresses: - "172.16.21.30 - 172.16.21.39" enableDataplaneV2: true masterNode: cpus: 4 memoryMB: 8192 replicas: 1 nodePools: - name: "gke-node-pool-01" cpus: 4 memoryMB: 8192 replicas: 3 osImageType: "ubuntu_containerd" antiAffinityGroups: enabled: true 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" autoRepair: enabled: true
验证配置文件
填写用户集群配置文件后,请运行 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. (可选)为用户集群创建 Seesaw 负载均衡器
如果您已选择使用捆绑式 Seesaw 负载均衡器,请执行本部分中的步骤。否则,请跳过此部分。
为 Seesaw 负载均衡器创建并配置虚拟机:
gkectl create loadbalancer --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
4.(可选)将操作系统映像导入 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.14.0-gke.421-full.tgz
USER_CLUSTER_CONFIG:用户集群配置文件的路径
5. 创建用户集群
创建用户集群:
gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
找到用户集群 kubeconfig 文件的位置
gkectl create cluster
命令会在当前目录中创建一个名为 USER_CLUSTER_NAME-kubeconfig
的 kubeconfig 文件。您稍后需要此 kubeconfig 文件才能与用户集群进行互动。
kubeconfig 文件包含您的用户集群的名称。如需查看集群名称,您可以运行以下命令:
kubectl config get-clusters --kubeconfig USER_CLUSTER_KUBECONFIG
输出会显示集群的名称。例如:
NAME my-user-cluster
如果愿意,您可以更改 kubeconfig 文件的名称和位置。
6. 验证用户集群是否正在运行
验证用户集群是否正在运行:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG
将 USER_CLUSTER_KUBECONFIG 替换为用户集群 kubeconfig 文件的路径。
输出会显示用户集群节点。例如:
my-user-cluster-node-pool-69-d46d77885-7b7tx Ready ... my-user-cluster-node-pool-69-d46d77885-lsvzk Ready ... my-user-cluster-node-pool-69-d46d77885-sswjk Ready ...
问题排查
请参阅排查集群创建和升级问题。