规划在硬件上进行基本安装

本页面是相关指南的第一部分,逐步介绍了如何使用 Google Distributed Cloud 软件(以前称为 Google Distributed Cloud)在裸金属硬件上创建 GKE 集群的小型概念验证安装。本文档介绍如何设置满足最低要求的硬件环境并规划您的 IP 地址。后续的创建基本集群部分将介绍如何创建管理员集群和用户集群。

本页面适用于负责设置、监控和管理底层技术基础架构生命周期的管理员、架构师和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务

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

准备工作

  1. 请阅读 Google Distributed Cloud 简介
  2. 熟悉一些基本的 Google Cloud 概念,包括项目IAM 权限服务账号
  3. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. 记下 Google Cloud 项目 ID,因为以后需要它。

过程概览

要进行满足最低要求的基础架构设置,需完成以下主要步骤:

  1. 设置管理员工作站。为本地管理任务设置 Linux 管理员工作站。它可以是能管理多个集群的现有机器或专用机器。

  2. 设置集群节点机器。设置至少三台节点机器,分别用于:一个管理员集群节点、一个用户集群控制平面节点和一个用户集群工作器节点。

  3. 规划您的网络。规划节点机器的 IP 地址、虚拟 IP 地址 (VIP) 以及 Service 和 Pod 的 CIDR 范围。

  4. 查看所需的 Google Cloud 资源。如需创建集群,您的 Google Cloud 项目需要使用特定的 Google API 和服务账号。

1. 设置管理员工作站

管理员工作站托管用于创建和处理集群的各种工具和配置文件。

硬件要求

管理员工作站需要大量计算能力、内存和存储空间来运行工具以及存储与集群创建和管理相关的资源。

请确保您的管理员工作站满足以下硬件要求:

  • 至少 2 个 CPU 核心
  • 至少 4 GiB 的 RAM
  • 至少 128 GiB 存储空间

操作系统要求

为了运行 bmctl 并创建集群,管理员工作站具有与节点相同的操作系统 (OS) 要求。每台机器都必须运行受支持的 Ubuntu 版本

配置操作系统和软件

您需要在管理员工作站上进行如下安装和配置:

  • 配置 Ubuntu

  • 安装 gcloud CLI

  • 安装 kubectl

  • 安装 bmctl

配置操作系统

运行以下命令以更新防火墙设置、安装和配置 Docker,并确保每台机器均使用时间同步:

  1. 停用 Uncomplicated Firewall (UFW) 并验证其状态:

    sudo ufw disable
    sudo ufw status
    
  2. 移除任何之前版本的 Docker、更新软件包管理器,然后安装最新版本的 Docker:

    sudo apt-get remove docker docker-engine docker.io containerd runc
    sudo apt-get update
    sudo apt-get install \
      apt-transport-https \
      ca-certificates \
      curl \
      gnupg-agent \
      software-properties-common \
      docker.io
    
  3. 验证您现在运行的是 19.03 或更高版本的 Docker:

    sudo docker version
    

    客户端和服务器版本应均为 19.03 或更高版本,如以下示例响应中所示:

    Client:
     Version:           20.10.21
     API version:       1.41
     Go version:        go1.18.1
     ...
    
    Server:
     Engine:
      Version:          20.10.21
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.18.1
      ...
    
  4. 创建 docker 群组。

    sudo groupadd docker
    
  5. 将您自己添加到 Docker 群组:

    sudo usermod -aG docker $USER
    
  6. 运行以下命令来使对群组所做的更改生效:

    newgrp docker
    
  7. 运行以下命令来验证系统时钟已同步:

    timedatectl
    

    timedatectl 的输出应包含以下状态:

    System clock synchronized: yes
    

安装 Google Cloud CLI

如需在 Ubuntu 上安装 Google Cloud CLI,请按照此安装指南中的说明操作。

在管理员工作站上执行以下步骤以配置 gcloud CLI:

  1. 登录以设置 gcloud CLI account 属性:

    gcloud auth login
    
  2. 设置 gcloud CLI project 属性:

    gcloud config set project PROJECT_ID
    

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

  3. 验证您的 accountproject 属性是否设置正确:

    gcloud config list
    

    输出会显示 accountproject 属性的值。例如:

    [core]
    account = my-name@google.com
    disable_usage_reporting = False
    project = my-project-1234
    Your active configuration is: [default]
    

安装 kubectl

如需安装 kubectl,请执行以下步骤:

  1. 在管理员工作站上运行以下命令:

    gcloud components install kubectl
    

安装 bmctl

bmctl 是 Google Distributed Cloud 的专有命令行工具,可用于集群的创建和管理。

如需在管理员工作站上安装 bmctl,请执行以下步骤:

  1. 创建一个 baremetal 目录并将其添加到您的路径中。如果您当前在主目录,则运行以下命令即可:

    mkdir baremetal
    export PATH="$HOME/baremetal:$PATH"
    
  2. 运行以下命令来下载最新版本的 bmctl 二进制文件并使其可供执行:

    gcloud storage cp gs://anthos-baremetal-release/bmctl/1.30.100-gke.96/linux-amd64/bmctl .
    chmod +x ./bmctl
    
  3. 验证 bmctl 是否已安装并执行:

    bmctl version
    

    响应内容应如下所示:

    [2023-05-12 17:36:16+0000] bmctl version: 1.14.2-gke.11, git commit: 4ff1347446a93925a079000b50437d4ecebcdf3a, build date: Mon Feb 27 14:07:30 PST 2023

连接

管理员工作站需要访问 Google Cloud 和所有集群节点。

Google Cloud 访问权限

管理员工作站访问 Google Cloud 以下载并安装工具和映像、处理授权请求、创建服务账号、管理日志记录和监控等。如果没有 Google Cloud 访问权限,您将无法创建集群。

从管理员工作站访问

如需从管理员工作站创建和管理集群,您需要以下对节点机器的访问权限:

  • 第 3 层连接所有集群节点机器。
  • 控制平面 VIP 访问权限。
  • root具有无密码 sudo 权限的用户身份对所有集群节点机器进行无密码 SSH 访问。

以下部分介绍了如何在管理员工作站和节点机器上设置 SSH。

2. 设置集群节点机器

对于采用单个非高可用性管理员集群和单个非高可用性用户集群的极简安装,您需要三台机器:

  • 一台机器用于具有一个控制平面节点的管理员集群。

  • 另外两台机器用于具有一个控制平面节点和一个工作器节点的用户集群。

硬件要求

每台节点机器必须满足以下硬件要求:

  • 至少 2 个 CPU 核心
  • 至少 4 GiB 的 RAM
  • 至少 128 GiB 存储空间

操作系统要求

每台节点机器都必须运行受支持的 Ubuntu 版本

配置 Ubuntu

按照与管理员工作站相关说明中介绍的相同步骤在每个节点上配置 Ubuntu。

设置对节点的 SSH 访问

管理员工作站需要对所有集群节点机器拥有无需密码的 SSH 访问权限。您可以以 root 身份或以具有无密码 sudo 权限的用户身份设置 SSH。

下面是为 Google Distributed Cloud 设置 SSH 的简要步骤:

  1. 在所有机器上安装和配置 SSH

  2. 创建 SSH 密钥并将公钥复制到每个节点机器

  3. 在节点机器上停用密码身份验证

  4. 验证管理员工作站与节点机器之间的 SSH 访问

在所有机器上安装和配置 SSH

Google Distributed Cloud 要求在管理员工作站与集群节点之间采用无需密码的 SSH 通信。必须在管理员工作站和每个节点机器上执行以下步骤。

如需在运行 Ubuntu 的机器上配置 SSH,请执行以下步骤:

  1. 如果您还没有在运行的 SSH 服务器,请立即安装一个:

    sudo apt update
    sudo apt install openssh-server
    sudo systemctl status ssh
    
  2. 如需启用 root SSH 密码身份验证,请取消对 /etc/ssh/sshd_config 文件中的 PermitRootLoginPasswordAuthentication 行的注释或者添加这两行,并将值设置为 yes

    # Authentication:
    
    #LoginGraceTime 2m
    PermitRootLogin yes
    #StrictModes yes
    #MaxAuthTries 6
    #MaxSessions 10
    ...
    PasswordAuthentication yes
    
  3. 设置 root 密码:

    sudo passwd root
    
  4. 如需应用 SSH 配置更改,请重启 SSH 服务:

    sudo systemctl restart ssh.service
    
  5. 重启计算机。

  6. 通过与其他机器建立 SSH 连接来验证 SSH 能否正常工作。

创建 SSH 密钥并将公钥复制到每个节点机器

如需在管理员工作站与节点之间建立安全的无密码连接,可以在管理员工作站上创建一个 SSH 密钥并与节点共享公钥。

  1. 在管理员工作站上,生成私钥/公钥对。不要为键设置密码。

    ssh-keygen -t rsa
    
  2. 在管理员工作站上,将生成的公钥复制到您的每台节点机器:

    ssh-copy-id -i PUBLIC_KEY root@CLUSTER_NODE_IP
    

    请替换以下内容:

    • PUBLIC_KEY:包含 SSH 公钥的文件的路径。默认情况下,该路径为 /home/USERNAME/.ssh/id_rsa.pub
    • CLUSTER_NODE_IP:节点机器的 IP 地址
在节点机器上停用密码身份验证

到这里,您将不再需要启用密码身份验证。

对于每个节点机器:

  1. 打开 /etc/ssh/sshd_config,然后将 PasswordAuthentication 设置为 no 并保存文件。

  2. 重启 SSH 服务。

    sudo systemctl restart ssh.service
    
验证管理员工作站与节点机器之间的 SSH 访问

正确配置 SSH 后,您将可以从管理员工作站(以根用户身份)建立与节点机器的 SSH 连接,而无需输入密码。

如需验证公钥身份验证在管理员工作站与集群节点之间是否有效,请执行以下操作:

  1. 在管理员工作站上,为每个节点机器运行以下命令:

    ssh -o IdentitiesOnly=yes -i PRIVATE_KEY root@CLUSTER_NODE_IP
    

    请替换以下内容:

    • PRIVATE_KEY:包含 SSH 私钥的文件的路径。默认情况下,该路径为 /home/USERNAME/.ssh/id_rsa
    • CLUSTER_NODE_IP:节点机器的 IP 地址

3. 规划您的网络

安装集群时,请务必规划好您的 IP 地址,包括确保不会造成任何寻址冲突。即使是针对这个简单的安装,您也可能需要让网络管理员帮助您找到合适的地址。对于极简管理员集群和用户集群安装,如果不将 Pod 和 Service CIDR 计入在内,您需要至少 15 个唯一的 IP 地址。

为以下集群组件规划并指定 IP 地址:

  • 集群节点:您需要为每个节点机器指定 IP 地址
  • 虚拟 IP 地址 (VIP):您需要 VIP 才能访问 Kubernetes API 服务器、Ingress 代理和 LoadBalancer 类型的 Service
  • Pod 和 Service:您需要一定的 CIDR 地址范围来容纳在集群上运行的每个 Pod 和 Service

在本部分的其余地方,我们提供了在假设网络中适用于此安装的值的说明性示例 - 您的值将有所不同。

对于此小型安装,请将管理员工作站、管理员集群节点和用户集群节点放在同一第 2 层网域中。例如,假设 172.16.20.0/24 范围内的所有 IP 地址都路由到特定的第 2 层网域。此外,假设您的网络管理员告知您可以将 172.16.20.10 - 172.16.20.12 用于节点机器地址,将 172.16.0.13 - 172.16.20.24 用于 VIP 地址。

下图展示了包含管理员工作站、管理员集群和用户集群的第 2 层网域:

管理员集群和用户集群的 IP 地址。
管理员集群和用户集群的 IP 地址(点击可放大)

集群节点 IP 地址示例

下表举例说明了如何将 IP 地址用于集群节点:

机器 说明 IP 地址
管理员集群控制平面节点 用作管理员集群的控制平面节点的物理机器 172.16.20.10
用户集群控制平面节点 用作用户集群的控制平面节点的物理机器 172.16.20.11
用户集群工作器节点 用于运行用户工作负载的物理机器 172.16.20.12

虚拟 IP 地址 (VIP) 示例

下表举例说明了如何为集群指定 VIP 地址:

VIP 说明 IP 地址
管理员集群控制平面虚拟 IP 地址 管理员集群控制平面虚拟 IP 地址(管理员集群 Kubernetes API 服务器) 172.16.20.13
用户集群控制平面虚拟 IP 地址 用户集群控制平面虚拟 IP 地址(用户集群 Kubernetes API 服务器) 172.16.20.14
入站流量虚拟 IP 地址 入站流量虚拟 IP(包含在 MetalLB 地址池范围内) 172.16.20.15
服务 VIP 地址 10 个用作 LoadBalancer 类型的 Service 的外部 IP 地址。这些地址将根据需要在用户集群节点上进行分配。

此范围包括 Ingress VIP。这一 IP 地址重叠行为是 MetalLB(即默认的捆绑式负载均衡器)的一项要求。

172.16.20.15 - 172.16.20.24

Pod 和 Service 的 IP 地址

除了您为集群节点和 VIP 地址指定的 IP 地址之外,您还需要为 Pod 和 Service 指定地址。您可以指定一个用于 Pod IP 地址的 CIDR 范围,以及用于 Kubernetes Service 的 ClusterIP 地址的另一个 CIDR 范围。使用 RFC 1918 中所述的专用地址空间中的 IP 地址。这些地址在集群配置过程中指定,如本指南的下一部分所示。

作为 IP 规划的一部分,请确定要用于 Pod 和 Service 的 CIDR 范围。除非您有其他原因,否则请使用下面建议的范围:

用途 预填充的 CIDR 范围
管理员集群 Pod 192.168.0.0/16
管理员集群 Service 10.96.0.0/20
用户集群 Pod 192.168.0.0/16
用户集群 Service 10.96.0.0/20

建议范围表明了以下几点:

  • 在默认的孤岛模式网络模型中,多个集群的 Pod CIDR 范围可以相同。

  • 多个集群的 Service CIDR 范围可以相同。

  • 通常,在一个集群中,您需要的 Pod 多于 Service,因此 Pod CIDR 范围应该要大于 Service CIDR 范围。例如,用户集群的建议 Pod 范围有 2(32-16) = 216 个地址,但用户集群的建议 Service 范围只有 2(32-20) = 212 个地址。

避免重叠

为避免与网络上可访问的 IP 地址重叠,您可能需要使用与上述建议不同的 CIDR 范围。Service 和 pod 范围不得与您要从集群内部访问的任何集群外部地址重叠。

例如,假设您的 Service 范围为 10.96.232.0/24,您的 Pod 范围为 192.168.0.0/16。从 Pod 发送到上述任一范围内地址的流量都将被视为集群内流量,并且无法到达集群外部的任何目的地。

具体来说,Service 和 pod 范围不得与以下各项重叠:

  • 任何集群中节点的 IP 地址

  • 负载均衡器使用的 IP 地址

  • 控制平面节点和负载均衡器使用的 VIP 地址

  • DNS 服务器或 NTP 服务器的 IP 地址

4. 查看所需的 Google Cloud 资源

在创建集群之前,Google Distributed Cloud 要求在关联的 Google Cloud 项目中启用一组特定的 Google API。如需使用 Google API,Google Distributed Cloud 需要有一些服务账号,并且需要在关联的 Google Cloud 项目中为这些账号配置特定的 IAM 角色。

在本指南下一部分(创建基本集群)创建集群的过程中,系统会自动为您启用所需的 API 并创建相应的服务账号。

下面是自动启用的 Google API:

  • anthos.googleapis.com
  • anthosaudit.googleapis.com
  • anthosgke.googleapis.com
  • cloudresourcemanager.googleapis.com
  • connectgateway.googleapis.com
  • container.googleapis.com
  • gkeconnect.googleapis.com
  • gkehub.googleapis.com
  • gkeonprem.googleapis.com
  • iam.googleapis.com
  • logging.googleapis.com
  • monitoring.googleapis.com
  • opsconfigmonitoring.googleapis.com
  • serviceusage.googleapis.com
  • stackdriver.googleapis.com
  • storage.googleapis.com

下表介绍了自动创建的服务账号:

服务账号 用途 角色
anthos-baremetal-gcr Google Distributed Cloud 使用此服务账号从 Container Registry 下载容器映像。
anthos-baremetal-connect Connect Agent 使用此服务账号来维护集群与 Google Cloud 之间的连接。这样,您就能够访问集群和工作负载管理功能(包括 Google Cloud 控制台和 Connect Gateway),以便与集群进行交互。 roles/gkehub.connect
anthos-baremetal-register Connect Agent 使用此服务账号向舰队注册集群。 roles/gkehub.admin
anthos-baremetal-cloud-ops Stackdriver Agent 使用此服务账号将日志和指标从集群导出到 Cloud LoggingCloud Monitoring roles/logging.logWriter
roles/monitoring.metricWriter
roles/stackdriver.resourceMetadata.writer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/monitoring.dashboardEditor

后续步骤

创建基本集群