本文档介绍了如何创建启用了 Controlplane V2 的用户集群。
使用控制平面 V2 时,用户集群的控制平面会在用户集群本身的一个或多个节点上运行。Controlplane V2 是创建集群的默认和推荐设置。
过程概览
以下是创建用户集群涉及的主要步骤:
- 连接到管理员工作站
- 管理员工作站是一个具有创建用户集群所需的工具的虚拟机。
- 填写配置文件
- 通过完成用户集群配置文件、凭据配置文件以及可能的 IP 地址块文件,指定新集群的详细信息。
- (可选)将操作系统映像导入 vSphere,并将容器映像推送到
- 私有注册表(如果适用)。
- 运行
gkectl prepare
。
- 创建用户集群
- 运行
gkectl create cluster
以按照配置文件中所指定的内容创建集群。
- 验证用户集群是否正在运行
- 使用
kubectl
查看集群节点。
此过程结束时,您将有一个正在运行的用户集群,您可以在其中部署工作负载。
准备工作
查看 IP 地址规划文档。确保您有足够的可用 IP 地址,并重新考虑关于集群节点获取其 IP 地址的方式的决定:DHCP 或静态。如果您决定使用静态 IP 地址,则必须填写包含所选地址的 IP 地址块文件。
查看负载均衡概览,并重新考虑有关要使用的负载均衡器类型的决定。您可以使用捆绑式 MetalLB 负载均衡器,也可以手动配置您选择的负载均衡器。对于手动负载均衡,您必须先设置负载均衡器,然后才能创建用户集群。
请继续查看 vCenter 部分。考虑是否要为管理员集群和用户集群使用不同的 vSphere 集群,以及是否要使用不同的数据中心。此外,请考虑是否要使用单独的 vCenter Server 实例。
查看 nodePools 部分。考虑您需要的节点池数量以及每个池中运行的操作系统。
1. 连接到管理员工作站
与管理员工作站建立 SSH 连接。
您应该还记得,gkeadm
在管理员工作站上激活了您的组件访问服务账号。
在管理员工作站的主目录中完成本主题中的所有其余步骤。
2. 填写配置文件
当 gkeadm
创建管理员工作站时,它生成了一个名为 user-cluster.yaml
的配置文件。此配置文件用于创建用户集群。
浏览用户集群配置文件文档,以熟悉配置文件。建议您在单独的标签页或窗口中打开该文档,因为您在完成以下步骤时将参考它。
name
将 name
字段设置为您为用户集群选择的名称。
gkeOnPremVersion
系统已为您填写此字段。它指定 GKE on VMware 的版本。例如 1.15.0-gke.581
。
enableControlplaneV2
将 enableControlplaneV2
设置为 true
。
enableDataplaneV2
将 enableDataplaneV2 设置为 true
。
vCenter
您在管理员集群配置文件的 vCenter
部分中设置的值是全局值。也就是说,这些值会应用于管理员集群及其关联的用户集群。
对于您创建的每个用户集群,您可以选择替换一些全局 vCenter
值。
如需替换任何全局 vCenter
值,请填写用户集群配置文件的 vCenter
部分中的相关字段。
具体而言,您可能希望为管理员集群和用户集群使用不同的 vSphere 集群,并且为管理员集群和用户集群使用不同的数据中心。
使用一个数据中心和一个 vSphere 集群
默认选项为管理员集群和用户集群使用一个数据中心和一个 vSphere 集群。如果选择此选项,请勿在用户集群配置文件中设置任何 vCenter
值。vCenter
值将从管理员集群继承。
使用单独的 vSphere 集群
如果您想创建位于自己的 vSphere 集群中的用户集群,请在用户集群配置文件中为 vCenter.cluster
指定值。
如果您的管理员集群和用户集群位于不同的 vSphere 集群中,它们可以位于相同的数据中心中,也可以位于不同数据中心中。
使用单独的 vSphere 数据中心
用户集群和管理员集群可以位于不同的数据中心中。在这种情况下,它们也位于不同的 vSphere 集群中。
如果您在用户集群配置文件中指定 vCenter.datacenter
,则还必须指定 vCenter.datastore
和 vCenter.networkName
,并且必须指定 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
部分中,您可以指定用户集群所需的控制平面节点数量:1 个或 3 个。您还可以为控制平面节点指定数据存储区,以及是否要为控制平面节点启用自动调整大小功能。
回想一下,您在 network.controlPlaneIPBlock
部分中为控制平面节点指定了 IP 地址。
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 地址块文件和用户集群配置文件的示例:
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.15.0-gke.581 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" 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 地址。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.14.0-gke.421-full.tgz
USER_CLUSTER_CONFIG:用户集群配置文件的路径
4.创建用户集群
创建用户集群:
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 文件的名称和位置。
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
升级用户集群
按照升级 Anthos Clusters on VMware 中的说明进行操作。
删除集群
如需删除启用了控制平面 V2 的用户集群,请按照删除用户集群中的说明操作。
删除启用了控制平面 V2 的用户集群时,系统会自动删除数据磁盘。
问题排查
请参阅排查集群创建和升级问题。