设置极简基础架构

本文是相关指南的第一部分,将逐步介绍具有单个用户集群的 Google Distributed Cloud 的小型概念验证安装。

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

使用本指南设置的基础架构可能不适合您的实际生产需求和应用场景。如需详细了解生产安装,请参阅安装概览和指南。

准备工作

过程概览

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

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

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 地址

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 地址。
管理员集群和用户集群的 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 个地址。
根据需要在负载平衡器上为用户集群配置。
请注意,此范围包含 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 范围
管理员集群 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 范围和 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 项目,可以在创建和管理项目中找到更多信息。

  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 项目必须有四个服务账号,以供 Google Distributed Cloud 使用。在本练习中,系统会自动为您生成两个服务账号。但您必须手动创建其他两个服务账号:

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

审核日志记录服务账号

  1. 在 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。

  2. 获取新创建的审核日志记录服务账号的电子邮件地址:

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 为审核日志记录服务账号创建 JSON 密钥:

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

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

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

组件访问服务账号

  1. 在您的 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。

  2. 获取新创建的组件访问服务账号的电子邮件地址:

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 为组件访问服务账号创建 JSON 密钥:

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

    SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS 替换为您的组件访问服务账号的电子邮件地址。

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

  1. 在您的 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
  2. 如果这是您第一次在项目中启用 GKE On-Prem API (gkeonprem.googleapis.com),则需要初始化 API。为此,您可以调用 gcloud CLI 命令,以显示可用于创建用户集群的可用版本:

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

    后续步骤

创建基本集群