本文是相关指南的第一部分,逐步介绍了具有单个用户集群的 Google Distributed Cloud for VMware(纯软件)的小型概念验证安装。本页面适用于设置、监控和管理技术基础设施的管理员、架构师和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
本文档介绍了如何为此安装设置最小的 vSphere 和 Google Cloud 环境并规划 IP 地址,后续的创建基本集群介绍了如何创建管理员工作站、管理员集群和用户集群。
使用本指南设置的基础架构可能不适合您的实际生产需求和应用场景。如需详细了解生产安装,请参阅安装概览和指南。
准备工作
阅读 Google Distributed Cloud for VMware(纯软件)概览,其中简要介绍了您将在此设置中安装的每个组件。
参阅 vSphere 支持的版本。
查看 vSphere 许可要求。对于此极简安装,vSphere 标准许可就足够了。
您需要一个运行的 vCenter Server 实例。
您需要一个具有足够权限的 vCenter 用户账号。记下此账号的用户名和密码。
您应该熟悉一些基本的 Google Cloud 概念,包括项目、IAM 权限和服务账号。如果不熟悉,请参阅以下指南了解详情:
过程概览
以下是此设置涉及的主要步骤:
- 设置环境。确保您能够满足资源要求。我们提供了一个满足此安装的要求的 ESXi 主机和 vSphere 数据存储区的示例配置。
- 设置 vSphere 对象。Google Distributed Cloud 组件在 vSphere 对象层次结构中运行。
- 规划您的 IP 地址。除了管理员和用户访问部署的虚拟 IP 地址(VIP 地址)之外,Google Distributed Cloud 还要求您提供所有节点的 IP 地址。在此设置中,您将为集群节点使用静态 IP 地址。我们提供了一些示例,但建议您咨询网络管理员,以便为您自己的网络选择合适的地址。
- 配置防火墙和代理规则
- 设置 Google Cloud 资源,包括在设置和管理 Google Distributed Cloud 时使用的 Google Cloud 项目,以及拥有访问和下载 Google Distributed Cloud 组件软件所需权限的服务账号。
1. 设置您的环境
对于此极简安装,您可以使用运行 ESXi 的单个物理主机。
确保您的主机具有以下最低要求的 CPU、RAM 和存储容量:
- 8 个物理 CPU (2.7GHz),并启用了超线程
- 80 吉比字节 (GiB) RAM
- 470 GiB 存储空间
确保已安装 ESXi 7.0u2 或更高版本。
确保您使用的是 vCenter Server 7.0u2 或更高版本。
主机和数据存储区示例
以下是满足要求的 ESXi 主机和 vSphere 数据存储区的示例:
ESXi 主机配置:
- 制造商:Dell Inc.
- 物理 CPU:8 个 CPU (2.7 GHz)
- 处理器类型:Intel(R) Xeon(R) Platinum 8168 CPU (2.70 GHz)
- 处理器插座:2 个
- ESXi 版本:7.0u2 或更高版本
- vCenter Server 版本:7.0u2 或更高版本
- 超线程:已启用
数据存储区配置:
- 类型:VMFS 6.82
- 硬盘类型:SSD
- 供应商:DELL
- 驱动器类型:逻辑
- RAID 级别:RAID1
2. 设置 vSphere 对象
在 vSphere 环境中设置以下对象:
请记下 vSphere 数据中心、集群、数据存储区和网络名称,因为您在创建基本集群中设置管理员工作站时需要使用这些名称。
如果您已设置 vSAN 数据存储区,请使用 govc
在 datastore
目录中创建一个文件夹以用于 Google Distributed Cloud 的虚拟机磁盘 (VMDK):
govc datastore.mkdir -namespace=true data-disks
3. 规划您的 IP 地址
如 Google Distributed Cloud 概览中所述,Google Distributed Cloud 安装需要许多 IP 地址,包括:
- 所有节点的 IP 地址
- 用于访问控制平面组件(例如 Kubernetes API 服务器)和用户集群上运行的应用的虚拟 IP 地址 (VIP)
- Pod 和 Service 之间通信的 CIDR 范围
因此,设置 Google Distributed Cloud 的一个重要环节是规划 IP 地址,包括确保不会产生任何寻址冲突。即使是针对这个简单的安装,您也可能需要让网络管理员帮助您找到要配置的适当值。在本部分的其余地方,我们提供了在假设网络中适用于此安装的值的说明性示例 - 您的值将有所不同。
此极简安装中的集群使用捆绑式 MetalLB 负载均衡器。此负载均衡器在集群节点上运行,因此无需额外的虚拟机即可实现负载均衡。
借助 Google Distributed Cloud,您可以选择为集群节点提供静态 IP 地址,也可以使用 DHCP 服务器。在这个简单安装中,您需要使用静态 IP 地址。
VLAN 示例
对于此小型安装,我们建议您将管理员工作站、管理员集群节点和用户集群节点放在 vSphere 网络的同一 VLAN 上。 例如,假设 172.16.20.0/24 范围内的所有 IP 地址都路由到一个特定 VLAN。此外,假设您的网络管理员说您可以将 172.16.20.49 - 172.16.20.69 用于虚拟机和虚拟 IP (VIP) 地址。
下图展示了具有管理员工作站、管理员集群和用户集群的 VLAN。请注意,VIP 未显示与集群中的任何特定节点相关联。这是因为 MetalLB 负载均衡器可以选择哪个节点公布单个 Service 的 VIP。例如,在用户集群中,一个工作器节点可以公布 172.16.20.64,而另一个工作器节点可以公布 172.16.20.65。
IP 地址示例:管理员工作站
对于管理员工作站,此示例使用网络管理员提供给您的地址范围中的第一个地址:172.16.20.49。
IP 地址示例:集群节点
下表举例说明了如何将 IP 地址用于集群节点。请注意,该表显示了两个额外节点的地址:admin-vm-6 和 user-vm-5。在集群升级、更新和自动修复期间需要额外的节点。如需了解详情,请参阅管理节点 IP 地址。
虚拟机主机名 | 说明 | IP 地址 |
---|---|---|
admin-vm-1 | 管理员集群的控制平面节点。 | 172.16.20.50 |
admin-vm-2 | 管理员集群的控制平面节点。 | 172.16.20.51 |
admin-vm-3 | 管理员集群的控制平面节点。 | 172.16.20.52 |
user-vm-1 | 用户集群的控制层面节点。 | 172.16.20.53 |
user-vm-2 | 用户集群工作器节点 | 172.16.20.54 |
user-vm-3 | 用户集群工作器节点 | 172.16.20.55 |
user-vm-4 | 用户集群工作器节点 | 172.16.20.56 |
user-vm-5 | 172.16.20.57 |
示例 IP 地址:管理员集群的 VIP 地址
下表举例说明了如何为管理员集群指定控制平面 VIP。
VIP | 说明 | IP 地址 |
---|---|---|
管理员集群的 Kubernetes API 服务器的 VIP 地址 | 在负载均衡器上为管理员集群配置。 | 172.16.20.58 |
示例 IP 地址:用户集群的 VIP 地址
下表举例说明了如何为用户集群指定 VIP。
请注意,用户集群的 Kubernetes API 服务器的 VIP 地址和入站流量 VIP 地址与工作器节点和控制平面节点位于同一 VLAN。
VIP | 说明 | IP 地址 |
---|---|---|
用户集群的 Kubernetes API 服务器的 VIP 地址 | 在负载均衡器上为管理员集群配置。 | 172.16.20.59 |
Ingress VIP | 在负载均衡器上为用户集群配置。 | 172.16.20.60 |
Service VIP | LoadBalancer 类型的 Service 的 10 个地址。根据需要在负载平衡器上为用户集群配置。 请注意,此范围包含 Ingress VIP 地址。 这是 MetalLB 负载均衡器的要求。 |
172.16.20.60 - 172.16.20.69 |
Pod 和 Service 的 IP 地址
除了集群节点的 IP 地址以及用于访问部署的 IP 地址之外,您还需要指定每个集群内可用于集群内流量的地址范围。
为此,您需要指定用于 Pod IP 地址的 CIDR 范围,以及用于 Kubernetes Service 的 ClusterIP
地址的另一个 CIDR 范围。这些地址在集群配置过程中指定,如本指南的下一部分所示。
作为 IP 规划的一部分,请确定要用于 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 服务器
可供集群节点使用的 NTP 服务器
具有您的管理员工作站和集群节点的子网的默认网关 IP 地址。例如,假设管理员工作站、管理员集群节点和用户集群节点都位于 172.16.20.0/24 子网中。子网的默认网关地址可能是 172.16.20.1。
4. 配置防火墙和代理
按照代理和防火墙规则配置您的防火墙和代理,以允许必要的 Google Distributed Cloud 流量。您需要使用上一部分中确定的集群节点 IP 地址才能执行此任务。请注意,由于用户集群和管理员集群的 IP 地址未分配给特定节点,因此您必须确保所有相关防火墙规则适用于每个集群的所有 IP 地址。
5. 设置 Google Cloud 资源
Google Cloud 项目是创建、启用和使用所有 Google Cloud 服务(包括用于安装和管理 Google Distributed Cloud 的服务)的基础。如果您不熟悉如何使用 Google Cloud 项目,可以在创建和管理项目中找到更多信息。
选择现有 Google Cloud 项目或创建新项目。
记下 Google Cloud 项目 ID,因为以后需要它。
设置 Google Cloud CLI
Google Cloud CLI 是一个可用于处理项目的命令行工具。请按照安装 Google Cloud SDK 中的说明操作,确保您拥有最新的版本。
所需权限
如果您是项目所有者(例如,如果您自己创建了项目),那么您已拥有执行此简单安装其余操作所需的所有权限。如果您不是项目所有者,则您或您的项目管理员必须确保您的 Google 账号拥有必要的权限。
以下 IAM 角色可让您创建服务账号、为其分配 IAM 角色、启用 API,并确保 gkeadm
工具可以在此设置的第二部分为您创建和管理服务账号:
resourcemanager.projectIamAdmin
serviceusage.serviceUsageAdmin
iam.serviceAccountCreator
iam.serviceAccountKeyAdmin
如需详细了解自行授予 IAM 角色所需的权限,请参阅授予、更改和撤消对资源的访问权限。如果您没有这些权限,则组织中的其他人员必须为您授予这些角色。
要授予这些角色,请执行以下操作:
Linux 和 macOS
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/resourcemanager.projectIamAdmin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/serviceusage.serviceUsageAdmin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/iam.serviceAccountCreator" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:ACCOUNT" \ --role="roles/iam.serviceAccountKeyAdmin"
Windows
gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/resourcemanager.projectIamAdmin" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/serviceusage.serviceUsageAdmin" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/iam.serviceAccountCreator" gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="user:ACCOUNT" ^ --role="roles/iam.serviceAccountKeyAdmin"
请替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 IDACCOUNT
:您的 Google 账号的标识电子邮件地址
设置服务账号
您的 Google Cloud 项目必须有四个服务账号,以供 Google Distributed Cloud 使用。在本练习中,系统会自动为您生成两个服务账号。但您必须手动创建其他两个服务账号:
- 连接和注册服务账号(自动生成)
- 日志记录和监控服务账号(自动生成)
- 审核日志记录服务账号(手动创建)
- 组件访问服务账号(手动创建)
审核日志记录服务账号
在 Google Cloud 项目中,创建一个服务账号,供 Google Distributed Cloud 用于将集群中的 Kubernetes 审核日志发送到 Cloud Audit Logs。这称为审核日志记录服务账号。
gcloud iam service-accounts create audit-logging-sa \ --display-name "Audit Logging Service Account" \ --project PROJECT_ID
将
PROJECT_ID
替换为您的 Google Cloud 项目的 ID。获取新创建的审核日志记录服务账号的电子邮件地址:
gcloud iam service-accounts list \ --project PROJECT_ID
为审核日志记录服务账号创建 JSON 密钥:
gcloud iam service-accounts keys create audit-logging-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL_AUDIT_LOGGING
将
SERVICE_ACCOUNT_EMAIL_AUDIT_LOGGING
替换为审核日志记录服务账号的电子邮件地址。您无需向审核日志记录服务账号授予任何角色。
组件访问服务账号
在您的 Google Cloud 项目中,创建一个服务账号,Google Distributed Cloud 可以使用该账号从 Container Registry 代表您下载集群组件代码。这称为“组件访问服务账号”。
gcloud iam service-accounts create component-access-sa \ --display-name "Component Access Service Account" \ --project PROJECT_ID
将
PROJECT_ID
替换为您的 Google Cloud 项目的 ID。获取新创建的组件访问服务账号的电子邮件地址:
gcloud iam service-accounts list \ --project PROJECT_ID
为组件访问服务账号创建 JSON 密钥:
gcloud iam service-accounts keys create component-access-key.json \ --iam-account SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS
将
SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS
替换为您的组件访问服务账号的电子邮件地址。向您的组件访问服务账号添加以下 IAM 角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS" \ --role "roles/serviceusage.serviceUsageViewer" gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS" \ --role "roles/iam.roleViewer" gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS" \ --role "roles/iam.serviceAccountViewer"
启用 Google API
在您的 Google Cloud 项目中启用以下 Google API。这样,您就可以在项目中使用 Google Distributed Cloud 所需的所有 Google Cloud 服务。
gcloud services enable --project PROJECT_ID \ anthos.googleapis.com \ anthosgke.googleapis.com \ anthosaudit.googleapis.com \ cloudresourcemanager.googleapis.com \ connectgateway.googleapis.com \ container.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ gkeonprem.googleapis.com \ kubernetesmetadata.googleapis.com \ serviceusage.googleapis.com \ stackdriver.googleapis.com \ opsconfigmonitoring.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ iam.googleapis.com \ storage.googleapis.com
如果这是您第一次在项目中启用 GKE On-Prem API (
gkeonprem.googleapis.com
),则需要初始化 API。为此,您可以调用 gcloud CLI 命令,以显示可用于创建用户集群的可用版本:gcloud container vmware clusters query-version-config \ --project=PROJECT_ID \ --location="us-central1"
后续步骤