本页面是指南的第一部分,该指南介绍了如何使用 Google Distributed Cloud 软件(以前称为 Google Distributed Cloud Virtual)在裸机硬件上创建 GKE 集群的小型概念验证安装。本文档介绍了如何设置最小的硬件环境并规划您的 IP 地址。创建基本集群后的后续页面介绍了如何创建管理员集群和用户集群。
使用本指南设置的基础架构可能不适合您的实际生产需求和用例。如需详细了解生产安装,请参阅选择部署模型。
准备工作
- 阅读 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.
-
Make sure 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.
-
Make sure 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 和服务账号。
1. 设置管理员工作站
管理员工作站托管用于创建和处理集群的各种工具和配置文件。
硬件要求
管理员工作站需要大量计算能力、内存和存储空间来运行工具以及存储与集群创建和管理相关的资源。
请确保您的管理员工作站满足以下硬件要求:
- 至少 2 个 CPU 核心
- 至少 4 GiB 的 RAM
- 至少 128 GiB 存储空间
配置操作系统和软件
您需要在管理员工作站上进行如下安装和配置:
配置 Ubuntu
安装 gcloud CLI
安装
kubectl
安装
bmctl
配置操作系统
为了运行 bmctl
并创建集群,管理员工作站具有与节点相同的操作系统 (OS) 要求。每台机器都必须运行受支持的 Ubuntu 版本,例如 Ubuntu 20.04。
运行以下命令以更新防火墙设置、安装和配置 Docker,并确保每台机器均使用时间同步:
停用 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
运行以下命令来验证系统时钟已同步:
timedatectl
timedatectl
的输出应包含以下状态:System clock synchronized: yes
安装 Google Cloud CLI
如需在 Ubuntu 上安装 Google Cloud CLI,请按照此安装指南中的说明进行操作。
在管理员工作站上执行以下步骤以配置 gcloud CLI:
登录以设置 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]
安装 kubectl
如需安装 kubectl
,请执行以下步骤:
在管理员工作站上运行以下命令:
gcloud components install kubectl
安装 bmctl
bmctl
是 Google Distributed Cloud 的专有命令行工具,可用于创建和管理集群。
如需在管理员工作站上安装 bmctl
,请执行以下步骤:
创建一个
baremetal
目录并将其添加到您的路径中。如果您当前在主目录,则运行以下命令即可:mkdir baremetal export PATH="$HOME/baremetal:$PATH"
运行以下命令来下载最新版本的
bmctl
二进制文件并使其可供执行:gsutil cp gs://anthos-baremetal-release/bmctl/1.29.100-gke.251/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
网络连接
管理员工作站需要访问 Google Cloud 和所有集群节点。
Google Cloud 访问权限
管理员工作站访问 Google Cloud 以下载并安装工具和映像、处理授权请求、创建服务账号、管理日志记录和监控等。如果没有 Google Cloud 访问权限,您将无法创建集群。
从管理员工作站访问
如需从管理员工作站创建和管理集群,您需要以下对节点机器的访问权限:
- 第 3 层连接所有集群节点机器。
- 控制平面 VIP 访问权限。
- 以
root
或具有无密码sudo
权限的用户身份对所有集群节点机器进行无密码 SSH 访问。
以下部分介绍了如何在管理员工作站和节点机器上设置 SSH。
2. 设置集群节点机器
对于采用单个非高可用性管理员集群和单个非高可用性用户集群的极简安装,您需要三台机器:
一台机器用于具有一个控制平面节点的管理员集群。
另外两台机器用于具有一个控制平面节点和一个工作器节点的用户集群。
硬件要求
每台节点机器必须满足以下硬件要求:
- 至少 2 个 CPU 核心
- 至少 4 GiB 的 RAM
- 至少 128 GiB 存储空间
配置 Ubuntu
按照与管理员工作站相关说明中介绍的相同步骤在每个节点上配置 Ubuntu。
设置对节点的 SSH 访问
管理员工作站需要对所有集群节点机器进行无密码 SSH 访问。您可以将 SSH 设置为 root
,也可以设置为具有无密码 sudo
权限的用户。
以下是为 Google Distributed Cloud 设置 SSH 的简要步骤:
在所有机器上安装和配置 SSH
创建 SSH 密钥并将公钥复制到每个节点机器
在节点机器上停用密码身份验证
验证管理员工作站与节点机器之间的 SSH 访问
在所有机器上安装和配置 SSH
Google Distributed Cloud 要求在管理员工作站和集群节点之间进行无密码 SSH 通信。必须在管理员工作站和每个节点机器上执行以下步骤。
如需在运行 Ubuntu 的机器上配置 SSH,请执行以下步骤:
如果您尚未运行 SSH 服务器,请立即安装一个:
sudo apt update sudo apt install openssh-server sudo systemctl status ssh
如需启用
root
SSH 密码身份验证,请取消对/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 密钥并将公钥复制到每个节点机器
如需在管理员工作站与节点之间建立安全的无密码连接,可以在管理员工作站上创建一个 SSH 密钥并与节点共享公钥。
在管理员工作站上,生成私钥和公钥对。请勿为密钥设置口令:
ssh-keygen -t rsa
在管理员工作站上,将生成的公钥复制到您的每台节点机器:
ssh-copy-id -i PUBLIC_KEY root@CLUSTER_NODE_IP
请替换以下内容:
PUBLIC_KEY
:包含 SSH 公钥的文件的路径。默认情况下,该路径为/home/USERNAME/.ssh/id_rsa.pub
CLUSTER_NODE_IP
:节点机器的 IP 地址
在节点机器上停用密码身份验证
到这里,您将不再需要启用密码身份验证。
对于每个节点机器:
打开
/etc/ssh/sshd_config
,然后将PasswordAuthentication
设置为no
并保存文件。重启 SSH 服务。
sudo systemctl restart ssh.service
验证管理员工作站与节点机器之间的 SSH 访问
正确配置 SSH 后,您将可以从管理员工作站(以根用户身份)建立与节点机器的 SSH 连接,而无需输入密码。
如需验证公钥身份验证在管理员工作站与集群节点之间是否有效,请执行以下操作:
在管理员工作站上,为每个节点机器运行以下命令:
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 地址 |
---|---|---|
管理员集群控制平面节点 | 用作管理员集群的控制平面节点的物理机器 | 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 范围。除非您有其他原因,否则请使用下面建议的范围:
Purpose | 预填充的 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
下表介绍了自动创建的服务账号:
服务账号 | Purpose | 角色 |
---|---|---|
anthos-baremetal-gcr | Google Distributed Cloud 使用此服务帐号从 Container Registry 下载容器映像。 | 无 |
anthos-baremetal-connect | Connect Agent 使用此服务账号来维护集群与 Google Cloud 之间的连接。这样即可访问集群和工作负载管理功能,包括 Google Cloud 控制台和连接网关,以便与集群进行交互。 | 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 |