设置极简基础架构

这是指南的第一部分,该指南将引导您完成对具有单个用户集群的 GKE on VMware 的小型概念验证安装。

本文档介绍了如何为此安装设置最小的 vSphere 和 Google Cloud 环境并规划 IP 地址,后续的创建基本集群介绍了如何创建管理员工作站、管理员集群和用户集群。

您根据本指南设置的基础架构可能不适合您的实际生产需求和用例。如需详细了解生产环境中的安装,请参阅安装概览和指南。

准备工作

过程概览

以下是此设置涉及的主要步骤:

  1. 设置环境。确保您能够满足资源要求。我们提供了一个满足此安装的要求的 ESXi 主机和 vSphere 数据存储区的示例配置。
  2. 设置 vSphere 对象。GKE on VMware 组件在 vSphere 对象层次结构中运行。
  3. 规划您的 IP 地址。GKE on VMware 要求您为所有节点提供 IP 地址,此外还需要提供虚拟 IP 地址 (VIP) 以供管理员和用户访问您的部署。在此设置中,您将为集群节点使用静态 IP 地址。我们提供了一些示例,但建议您咨询网络管理员,以便为您自己的网络选择合适的地址。
  4. 配置防火墙和代理规则
  5. 设置 Google Cloud 资源,包括设置和管理 GKE on VMware 时使用的 Google Cloud 项目,以及一个拥有访问和下载 GKE on VMware 组件软件所需权限的服务帐号。

1. 设置您的环境

对于此极简安装,您可以使用运行 ESXi 的单个物理主机。

  1. 确保您的主机具有以下最小 CPU、RAM 和存储容量:

    • 8 个物理 CPU (2.7GHz),并启用了超线程
    • 80 吉比字节 (GiB) RAM
    • 470 GiB 存储空间
  2. 确保您已安装 ESXi 7.0u2 或更高版本。

  3. 确保您使用的是 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 数据存储区,请使用 govcdatastore 目录中创建一个文件夹,以用于 GKE on VMware 虚拟机磁盘 (VMDK):

govc datastore.mkdir -namespace=true data-disks

3. 规划您的 IP 地址

GKE on VMware 概览中所述,安装 GKE on VMware 需要多个 IP 地址,包括:

  • 所有节点的 IP 地址
  • 虚拟 IP 地址 (VIP),用于访问控制平面组件(例如 Kubernetes API 服务器)和用户集群上运行的应用
  • 用于在 Pod 和 Service 之间通信的 CIDR 范围

因此,设置 GKE on VMware 的一个重要环节就是规划您的 IP 地址,包括确保不会造成任何地址冲突。即使是针对这个简单的安装,您也可能需要让网络管理员帮助您找到要配置的适当值。在本部分的其余地方,我们提供了在假设网络中适用于此安装的值的说明性示例 - 您的值将有所不同。

  • 此极简安装中的集群使用捆绑式 MetalLB 负载均衡器。此负载均衡器在集群节点上运行,因此无需额外的虚拟机即可实现负载均衡。

  • GKE on VMware 允许您选择为集群节点提供静态 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 地址。
管理员集群和用户集群的 IP 地址(点击可放大)

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 个地址。
根据需要在负载均衡器上为用户集群配置。
请注意,此范围包括入站流量 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 范围
管理员集群 Pod192.168.0.0/16
用户集群 Pod192.168.0.0/16
管理员集群 Service10.96.232.0/24
用户集群 Service10.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 和服务范围使用 RFC 1918 定义的内部 IP 地址范围。

以下是建议使用 RFC 1918 地址的一个原因。假设您的 Pod 或 Service 范围包含外部 IP 地址。从 Pod 发送到其中一个外部地址的任何流量都将被视为集群内流量,并且不会到达外部目的地。

DNS 服务器和默认网关

在创建管理员集群和用户集群之前,您还必须知道以下服务器的 IP 地址:

  • 可供管理员工作站和集群节点使用的 DNS 服务器

  • 集群节点可以使用的 NTP 服务器

  • 具有您的管理员工作站和集群节点的子网的默认网关 IP 地址。例如,假设管理员工作站、管理员集群节点和用户集群节点都位于 172.16.20.0/24 子网中。子网的默认网关地址可能是 172.16.20.1。

4.配置防火墙和代理

按照代理和防火墙规则,将您的防火墙和代理配置为允许必要的 GKE on VMware 流量。您需要使用上一部分中确定的集群节点 IP 地址才能执行此任务。请注意,由于用户集群和管理员集群的 IP 地址未分配给特定节点,因此您必须确保所有相关防火墙规则适用于每个集群的所有 IP 地址。

5. 设置 Google Cloud 资源

Google Cloud 项目为创建、启用和使用所有 Google Cloud 服务(包括用于安装和管理 GKE on VMware 的服务)奠定了基础。如果您不熟悉如何使用 Google Cloud 项目,可以在创建和管理项目中找到更多信息。

  1. 选择现有的 Google Cloud 项目,或创建一个新项目。

  2. 记下 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 项目的 ID
  • ACCOUNT:您的 Google 帐号的标识电子邮件地址

设置服务账号

您的 Google Cloud 项目必须具有四个服务帐号,供 GKE on VMware 使用。在本练习中,系统将自动为您生成其中的两个服务帐号。但您必须手动创建另外两个服务帐号:

  • 连接和注册服务帐号(自动生成)
  • 日志记录和监控服务帐号(自动生成)
  • 审核日志记录服务帐号(手动创建)
  • 组件访问权限服务帐号(手动创建)

审核日志记录服务账号

  1. 在 Google Cloud 项目中,创建一个服务帐号,GKE on VMware 可以使用该帐号将集群的 Kubernetes 审核日志发送到 Cloud Audit Logs。这称为您的审核日志记录服务帐号

    gcloud iam service-accounts create audit-logging-sa \
      --project PROJECT_ID
    
  2. 为您的审核日志记录服务帐号创建 JSON 密钥:

    gcloud iam service-accounts keys create audit-logging-key.json \
      --iam-account SERVICE_ACCOUNT_EMAIL
    

SERVICE_ACCOUNT_EMAIL 替换为审核日志记录服务账号的电子邮件地址。

您无需向审核日志记录服务帐号授予任何角色。

组件访问服务账号

  1. 在 Google Cloud 项目中,创建一个服务帐号,GKE on VMware 可以使用该帐号代表您从 Container Registry 下载集群组件代码。这称为您的组件访问服务帐号

    gcloud iam service-accounts create component-access-sa \
      --display-name "Component Access Service Account" \
      --project PROJECT_ID
    

    PROJECT_ID 替换为您的 Google Cloud 项目的 ID。

  2. 为组件访问服务账号创建 JSON 密钥:

    gcloud iam service-accounts keys create component-access-key.json \
       --iam-account SERVICE_ACCOUNT_EMAIL
    

    SERVICE_ACCOUNT_EMAIL 替换为您的服务帐号的唯一标识电子邮件地址。

  3. 向您的组件访问服务账号添加以下 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"
    

启用 Google API

  1. 在您的 Google Cloud 项目中启用以下 Google API。这样,您就可以在项目中使用 GKE on VMware 所需的所有 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 \
        serviceusage.googleapis.com \
        stackdriver.googleapis.com \
        opsconfigmonitoring.googleapis.com \
        monitoring.googleapis.com \
        logging.googleapis.com \
        iam.googleapis.com \
        storage.googleapis.com
  2. 如果这是您第一次在项目中启用 GKE On-Prem API (gkeonprem.googleapis.com),您需要初始化 API。为此,您可以调用 gcloud CLI 命令,以显示可用于创建用户集群的可用版本:

    gcloud container vmware clusters query-version-config \
        --project=PROJECT_ID \
        --location="us-central1"
    

    后续步骤

创建基本集群