本文档介绍如何设置极简 vSphere 和 Google Cloud 环境,以进行 Anthos clusters on VMware (GKE On-Prem) 的小型概念验证安装。
安装包括管理员工作站、管理员集群和用户集群。
准备工作
参阅 vSphere 支持的版本。
查看 vSphere 许可要求。对于此极简安装,vSphere 标准许可就足够了。
您需要一个运行的 vCenter Server 实例。
您需要一个具有足够权限的 vCenter 用户账号。记下此账号的用户名和密码。
CPU、RAM 和存储要求
对于此极简安装,您可以使用运行 ESXi 的单个物理主机。
以下是 ESXi 主机的最低资源要求:
- 8 个物理 CPU (2.7GHz),并启用了超线程
- 80 吉比字节 (GiB) RAM
最低存储要求为 470 GiB。
主机和数据存储区示例
以下是满足要求的 ESXi 主机和 vSphere 数据存储区的示例:
ESXi 主机配置:
- 制造商:Dell Inc.
- 物理 CPU:8 个 CPU (2.7 GHz)
- 处理器类型:Intel(R) Xeon(R) Platinum 8168 CPU (2.70 GHz)
- 处理器插座:2 个
- ESXi 版本:6.7U3
- vCenter Server 版本:6.7U3
- 超线程:已启用
数据存储区配置:
- 类型:VMFS 6.82
- 硬盘类型:SSD
- 供应商:DELL
- 驱动器类型:逻辑
- RAID 级别:RAID1
vSphere 对象
在 vSphere 环境中设置以下对象:
负载平衡
此极简安装中的集群使用 MetalLB 负载均衡器。此负载均衡器在集群节点上运行,因此无需额外的虚拟机即可实现负载均衡
规划您的 IP 地址
对于此小型安装,我们建议您将管理员工作站、管理员集群节点和用户集群节点放在 vSphere 网络的同一 VLAN 上。 例如,假设 172.16.20.0/24 范围内的所有 IP 地址都路由到一个特定 VLAN。此外,假设您的网络管理员说您可以将 172.16.20.49 - 172.16.20.72 用于虚拟机和虚拟 IP (VIP) 地址。
下图展示了具有管理员工作站、管理员集群和用户集群的 VLAN。请注意,VIP 未显示与集群中的任何特定节点相关联。这是因为 MetalLB 负载均衡器可以选择哪个节点公布单个 Service 的 VIP。例如,在用户集群中,一个工作器节点可以公布 172.16.20.63,而另一个工作器节点可以公布 172.16.20.64。
IP 地址示例:管理员工作站
对于管理员工作站,此示例使用网络管理员提供给您的地址范围中的第一个地址:172.16.20.49。
IP 地址示例:集群节点
下表举例说明了如何将 IP 地址用于集群节点。该表显示了两个额外的节点:admin-vm-5 和 user-vm-4。在集群升级、更新和自动修复期间需要额外的节点。如需了解详情,请参阅管理节点 IP 地址。
虚拟机主机名 | 说明 | IP 地址 |
---|---|---|
admin-vm-1 | 管理员集群的控制层面节点 | 172.16.20.50 |
admin-vm-2 | 管理员集群插件节点 | 172.16.20.51 |
admin-vm-3 | 管理员集群插件节点 | 172.16.20.52 |
admin-vm-4 | 用户集群的控制层面节点。 此节点位于管理员集群中。 |
172.16.20.53 |
admin-vm-5 | 172.16.20.54 | |
user-vm-1 | 用户集群工作器节点 | 172.16.20.55 |
user-vm-2 | 用户集群工作器节点 | 172.16.20.56 |
user-vm-3 | 用户集群工作器节点 | 172.16.20.57 |
user-vm-4 | 172.16.20.58 |
示例 IP 地址:管理员集群的 VIP 地址
下表举例说明了如何为管理员集群指定 VIP 地址:
VIP | 说明 | IP 地址 |
---|---|---|
管理员集群的 Kubernetes API 服务器的 VIP 地址 | 在负载均衡器上为管理员集群配置 | 172.16.20.59 |
管理员集群插件 VIP | 在负载均衡器上为管理员集群配置 | 172.16.20.60 |
示例 IP 地址:用户集群的 VIP 地址
下表举例说明了如何为用户集群指定 VIP。
请注意,用户集群的 Kubernetes API 服务器的 VIP 在管理员集群的负载均衡器上配置。这是因为用户集群的 Kubernetes API 服务器在管理员集群中的节点上运行。请注意,在集群配置文件中,您指定的字段用于 Kubernetes API 服务器的 VIP 称为 controlPlaneVIP
:
VIP | 说明 | IP 地址 |
---|---|---|
用户集群的 Kubernetes API 服务器的 VIP 地址 | 在负载均衡器上为管理员集群配置 | 172.16.20.61 |
Ingress VIP | 在负载均衡器上为用户集群配置 | 172.16.20.62 |
Service VIP | LoadBalancer 类型的 Service 的 10 个地址。根据需要在负载平衡器上为用户集群配置。 请注意,此范围包含 Ingress VIP。 这是 MetalLB 负载平衡器的要求。 |
172.16.20.62 - 172.16.20.71 |
Pod 和 Service 的 IP 地址
在创建集群之前,您必须指定用于 Pod IP 地址的 CIDR 范围以及用于 Kubernetes Service 的 ClusterIP
地址的另一个 CIDR 范围。
确定要用于 Pod 和 Service 的 CIDR 范围。您可以使用以下默认地址范围(除非您出于某些原因需要使用其他地址范围):
用途 | 默认 CIDR 范围 |
---|---|
管理员集群 Pod | 192.168.0.0/16 |
用户集群 Pod | 192.168.0.0/16 |
管理员集群 Service | 10.96.232.0/24 |
用户集群 Service | 10.96.0.0/20 |
默认值表明了以下几点:
多个集群的 Pod CIDR 范围可以相同。
任意一个集群的 Service CIDR 范围不得与任何其他集群的 Service CIDR 范围重叠。
通常,您需要的 Pod 多于 Service,因此对于一个给定集群,Pod CIDR 范围应该要大于 Service CIDR 范围。例如,用户集群的默认 Pod 范围有 2^(32-16) = 2^16 个地址,但用户集群的默认 Service 范围只有 2^(32-20) = 2^12 个地址。
避免重叠
您可能需要使用非默认 CIDR 范围以避免与网络上可访问的 IP 地址重叠。Service 和 pod 范围不得与您要从集群内部访问的任何集群外部地址重叠。
例如,假设您的 Service 范围为 10.96.232.0/24,您的 Pod 范围为 192.168.0.0/16。从 Pod 发送到上述任一范围中的地址的任何流量都将被视为集群内的流量,并且不会到达集群外部的任何目的地。
具体来说,Service 和 pod 范围不得与以下各项重叠:
任何集群中节点的 IP 地址
负载均衡器使用的 IP 地址
控制平面节点和负载均衡器使用的 VIP 地址
vCenter 服务器、DNS 服务器和 NTP 服务器的 IP 地址
我们建议您为 Pod 范围和 Service 范围使用 RFC 1918 定义的专用 IP 地址范围。
以下是建议使用 RFC 1918 地址的一个原因。假设您的 Pod 或 Service 范围包含外部 IP 地址。从 Pod 发送到其中一个外部地址的任何流量都将被视为集群内流量,并且不会到达外部目标。
DNS 服务器和默认网关
在创建管理员集群和用户集群之前,您必须知道以下服务器的 IP 地址:
可供管理员工作站和集群节点使用的 DNS 服务器
具有您的管理员工作站和集群节点的子网的默认网关 IP 地址。例如,假设管理员工作站、管理员集群节点和用户集群节点都位于 172.16.20.0/24 子网中。子网的默认网关地址可能是 172.16.20.1。
配置防火墙和代理
根据代理和防火墙规则配置防火墙和代理。
设置 Google Cloud 资源
选择现有 Google Cloud 项目或创建新项目。记下您的 Google Cloud 项目 ID。
在您的 Google Cloud 项目中,创建用于访问 Anthos Clusters on VMware 组件的服务账号。这称为“组件访问服务账号”:
gcloud iam service-accounts create component-access-sa \ --display-name "Component Access Service Account" \ --project PROJECT_ID
将 PROJECT_ID 替换为您的 Google Cloud 项目的 ID。
为组件访问服务账号创建 JSON 密钥:
gcloud iam service-accounts keys create component-access-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL
将 SERVICE_ACCOUNT_EMAIL 替换为组件访问服务账号的电子邮件地址。
向组件访问服务账号授予 IAM 角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/iam.roleViewer"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role "roles/iam.serviceAccountViewer"
如需详细了解组件访问服务账号以及如何授予 IAM 角色,请参阅服务账号和密钥。
启用 Google API
在您的 Google Cloud 项目中启用以下 Google API:
gcloud services enable --project PROJECT_ID \ anthos.googleapis.com \ anthosgke.googleapis.com \ anthosaudit.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ serviceusage.googleapis.com \ stackdriver.googleapis.com \ opsconfigmonitoring.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ iam.googleapis.com \ storage.googleapis.com