本页面是相关指南的第一部分,逐步介绍了使用 Google Distributed Cloud for Bare Metal(纯软件)(以前称为 Google Distributed Cloud Virtual 和 Anthos Clusters on Bare Metal)在裸金属硬件上创建 GKE 集群的小型概念验证安装。本文档介绍如何设置满足最低要求的硬件环境并规划您的 IP 地址。后续的创建基本集群部分将介绍如何创建管理员集群和用户集群。
本页面适用于负责设置、监控和管理底层技术基础架构生命周期的管理员、架构师和运维人员。如需详细了解我们在Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
使用本指南设置的基础架构可能不适合您的实际生产需求和应用场景。如需详细了解生产安装,请参阅选择部署模型。
准备工作
- 请阅读 Google Distributed Cloud 简介。
- 熟悉一些基本 Google Cloud 概念,包括项目、IAM 权限和服务账号。
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- 记下 Google Cloud 项目的 ID,您稍后需要用到。
设置管理员工作站。为本地管理任务设置 Linux 管理员工作站。它可以是能管理多个集群的现有机器或专用机器。
设置集群节点机器。设置至少三台节点机器,分别用于:一个管理员集群节点、一个用户集群控制平面节点和一个用户集群工作器节点。
规划您的网络。规划节点机器的 IP 地址、虚拟 IP 地址 (VIP) 以及 Service 和 Pod 的 CIDR 范围。
查看所需的 Google Cloud 资源。如需创建集群,您的Google Cloud 项目需要使用特定的 Google API 和服务账号。
- 至少 2 个 CPU 核心
- 至少 4 GiB 的 RAM
- 至少 128 GiB 存储空间
配置 Ubuntu
安装 gcloud CLI
安装
kubectl安装
bmctl停用 Uncomplicated Firewall (UFW) 并验证其状态:
sudo ufw disable sudo ufw status移除任何之前版本的 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验证您现在运行的是 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 ...创建
docker群组。sudo groupadd docker将您自己添加到 Docker 群组:
sudo usermod -aG docker $USER运行以下命令来使对群组所做的更改生效:
newgrp docker运行以下命令来验证系统时钟已同步:
timedatectltimedatectl的输出应包含以下状态:System clock synchronized: yes登录以设置 gcloud CLI
account属性:gcloud auth login设置 gcloud CLI
project属性:gcloud config set project PROJECT_ID将
PROJECT_ID替换为您的Google Cloud 项目的 ID。验证您的
account和project属性是否设置正确:gcloud config list输出会显示
account和project属性的值。例如:[core] account = my-name@google.com disable_usage_reporting = False project = my-project-1234 Your active configuration is: [default]在管理员工作站上运行以下命令:
gcloud components install kubectl创建一个
baremetal目录并将其添加到您的路径中。如果您当前在主目录,则运行以下命令即可:mkdir baremetal export PATH="$HOME/baremetal:$PATH"运行以下命令来下载最新版本的
bmctl二进制文件并使其可供执行:gcloud storage cp gs://anthos-baremetal-release/bmctl/1.33.100-gke.89/linux-amd64/bmctl . chmod +x ./bmctl验证
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
- 第 3 层连接所有集群节点机器。
- 控制平面 VIP 访问权限。
- 以
root或具有无密码sudo权限的用户身份对所有集群节点机器进行无密码 SSH 访问。 一台机器用于具有一个控制平面节点的管理员集群。
另外两台机器用于具有一个控制平面节点和一个工作器节点的用户集群。
- 至少 2 个 CPU 核心
- 至少 4 GiB 的 RAM
- 至少 128 GiB 存储空间
在所有机器上安装和配置 SSH
创建 SSH 密钥并将公钥复制到每个节点机器
在节点机器上停用密码身份验证
验证管理员工作站与节点机器之间的 SSH 访问
如果您还没有在运行的 SSH 服务器,请立即安装一个:
sudo apt update sudo apt install openssh-server sudo systemctl status ssh如需启用
rootSSH 密码身份验证,请取消对/etc/ssh/sshd_config文件中的PermitRootLogin和PasswordAuthentication行的注释或者添加这两行,并将值设置为yes:# Authentication: #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 ... PasswordAuthentication yes设置 root 密码:
sudo passwd root如需应用 SSH 配置更改,请重启 SSH 服务:
sudo systemctl restart ssh.service重启计算机。
通过与其他机器建立 SSH 连接来验证 SSH 能否正常工作。
在管理员工作站上,生成私钥/公钥对。不要为键设置密码。
ssh-keygen -t rsa在管理员工作站上,将生成的公钥复制到您的每台节点机器:
ssh-copy-id -i PUBLIC_KEY root@CLUSTER_NODE_IP请替换以下内容:
PUBLIC_KEY:包含 SSH 公钥的文件的路径。默认情况下,该路径为/home/USERNAME/.ssh/id_rsa.pubCLUSTER_NODE_IP:节点机器的 IP 地址
打开
/etc/ssh/sshd_config,然后将PasswordAuthentication设置为no并保存文件。重启 SSH 服务。
sudo systemctl restart ssh.service在管理员工作站上,为每个节点机器运行以下命令:
ssh -o IdentitiesOnly=yes -i PRIVATE_KEY root@CLUSTER_NODE_IP请替换以下内容:
PRIVATE_KEY:包含 SSH 私钥的文件的路径。默认情况下,该路径为/home/USERNAME/.ssh/id_rsaCLUSTER_NODE_IP:节点机器的 IP 地址
- 集群节点:您需要为每个节点机器指定 IP 地址
- 虚拟 IP 地址 (VIP):您需要 VIP 才能访问 Kubernetes API 服务器、Ingress 代理和 LoadBalancer 类型的 Service
- Pod 和 Service:您需要一定的 CIDR 地址范围来容纳在集群上运行的每个 Pod 和 Service
在默认的孤岛模式网络模型中,多个集群的 Pod CIDR 范围可以相同。
多个集群的 Service CIDR 范围可以相同。
通常,在一个集群中,您需要的 Pod 多于 Service,因此 Pod CIDR 范围应该要大于 Service CIDR 范围。例如,用户集群的建议 Pod 范围有 2(32-16) = 216 个地址,但用户集群的建议 Service 范围只有 2(32-20) = 212 个地址。
任何集群中节点的 IP 地址
负载均衡器使用的 IP 地址
控制平面节点和负载均衡器使用的 VIP 地址
DNS 服务器或 NTP 服务器的 IP 地址
anthos.googleapis.comanthosaudit.googleapis.comanthosgke.googleapis.comcloudresourcemanager.googleapis.comconnectgateway.googleapis.comcontainer.googleapis.comgkeconnect.googleapis.comgkehub.googleapis.comgkeonprem.googleapis.comiam.googleapis.comlogging.googleapis.commonitoring.googleapis.comopsconfigmonitoring.googleapis.comserviceusage.googleapis.comstackdriver.googleapis.comstorage.googleapis.com
过程概览
要进行满足最低要求的基础架构设置,需完成以下主要步骤:
1. 设置管理员工作站
管理员工作站托管用于创建和处理集群的各种工具和配置文件。
硬件要求
管理员工作站需要大量计算能力、内存和存储空间来运行工具以及存储与集群创建和管理相关的资源。
请确保您的管理员工作站满足以下硬件要求:
操作系统要求
为了运行 bmctl 并创建集群,管理员工作站具有与节点相同的操作系统 (OS) 要求。每台机器都必须运行受支持的 Ubuntu 版本。
配置操作系统和软件
您需要在管理员工作站上进行如下安装和配置:
配置操作系统
运行以下命令以更新防火墙设置、安装和配置 Docker,并确保每台机器均使用时间同步:
安装 Google Cloud CLI
如需在 Ubuntu 上安装 Google Cloud CLI,请按照此安装指南中的说明操作。
在管理员工作站上执行以下步骤以配置 gcloud CLI:
安装 kubectl
如需安装 kubectl,请执行以下步骤:
安装 bmctl
bmctl 是 Google Distributed Cloud 的专有命令行工具,可用于集群的创建和管理。
如需在管理员工作站上安装 bmctl,请执行以下步骤:
连接
管理员工作站需要访问 Google Cloud 和所有集群节点。
可使用 Google Cloud
管理员工作站访问 Google Cloud 以下载并安装工具和映像、处理授权请求、创建服务账号、管理日志记录和监控等。如果没有Google Cloud访问权限,您将无法创建集群。
从管理员工作站访问
如需从管理员工作站创建和管理集群,您需要以下对节点机器的访问权限:
以下部分介绍了如何在管理员工作站和节点机器上设置 SSH。
2. 设置集群节点机器
对于采用单个非高可用性管理员集群和单个非高可用性用户集群的极简安装,您需要三台机器:
硬件要求
每台节点机器必须满足以下硬件要求:
操作系统要求
每台节点机器都必须运行受支持的 Ubuntu 版本。
配置 Ubuntu
按照与管理员工作站相关说明中介绍的相同步骤在每个节点上配置 Ubuntu。
设置对节点的 SSH 访问
管理员工作站需要对所有集群节点机器拥有无需密码的 SSH 访问权限。您可以以 root 身份或以具有无密码 sudo 权限的用户身份设置 SSH。
下面是为 Google Distributed Cloud 设置 SSH 的简要步骤:
在所有机器上安装和配置 SSH
Google Distributed Cloud 要求在管理员工作站与集群节点之间采用无需密码的 SSH 通信。必须在管理员工作站和每个节点机器上执行以下步骤。
如需在运行 Ubuntu 的机器上配置 SSH,请执行以下步骤:
创建 SSH 密钥并将公钥复制到每个节点机器
如需在管理员工作站与节点之间建立安全的无密码连接,可以在管理员工作站上创建一个 SSH 密钥并与节点共享公钥。
在节点机器上停用密码身份验证
到这里,您将不再需要启用密码身份验证。
对于每个节点机器:
验证管理员工作站与节点机器之间的 SSH 访问
正确配置 SSH 后,您将可以从管理员工作站(以根用户身份)建立与节点机器的 SSH 连接,而无需输入密码。
如需验证公钥身份验证在管理员工作站与集群节点之间是否有效,请执行以下操作:
3. 规划您的网络
安装集群时,请务必规划好您的 IP 地址,包括确保不会造成任何寻址冲突。即使是针对这个简单的安装,您也可能需要让网络管理员帮助您找到合适的地址。对于极简管理员集群和用户集群安装,如果不将 Pod 和 Service CIDR 计入在内,您需要至少 15 个唯一的 IP 地址。
为以下集群组件规划并指定 IP 地址:
在本部分的其余地方,我们提供了在假设网络中适用于此安装的值的说明性示例 - 您的值将有所不同。
对于此小型安装,请将管理员工作站、管理员集群节点和用户集群节点放在同一第 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 地址 |
|---|---|---|
| 管理员集群控制平面节点 | 用作管理员集群的控制平面节点的物理机器 | 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 |
建议范围表明了以下几点:
避免重叠
为避免与网络上可访问的 IP 地址重叠,您可能需要使用与上述建议不同的 CIDR 范围。Service 和 pod 范围不得与您要从集群内部访问的任何集群外部地址重叠。
例如,假设您的 Service 范围为 10.96.232.0/24,您的 Pod 范围为 192.168.0.0/16。从 Pod 发送到上述任一范围内地址的流量都将被视为集群内流量,并且无法到达集群外部的任何目的地。
具体来说,Service 和 pod 范围不得与以下各项重叠:
4. 查看所需的 Google Cloud 资源
在创建集群之前,Google Distributed Cloud 要求在关联的 Google Cloud 项目中启用一组特定的 Google API。如需使用 Google API,Google Distributed Cloud 需要一个服务账号,该账号在关联的 Google Cloud 项目中配置了特定的 IAM 角色。
在本指南下一部分(创建基本集群)创建集群的过程中,系统会自动为您启用所需的 API 并创建相应的服务账号。
下面是自动启用的 Google API:
下表介绍了自动创建的服务账号:
| 服务账号 | 用途 | 角色 |
|---|---|---|
| anthos-baremetal-gcr | Google Distributed Cloud 使用此服务账号从 Artifact 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 Logging 和 Cloud Monitoring。 |
roles/logging.logWriter roles/monitoring.metricWriter roles/stackdriver.resourceMetadata.writer roles/opsconfigmonitoring.resourceMetadata.writer roles/monitoring.dashboardEditor |