本頁面是指南的第一部分,將逐步說明如何使用 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確認您現在執行的是 Docker 19.03 以上版本:
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替換為專案 ID。Google Cloud確認
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 伺服器,請立即安裝:
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設定根密碼:
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 Proxy 和 LoadBalancer 類型的服務
- Pod 和 Service:您需要 CIDR 位址範圍,以容納叢集上執行的每個 Pod 和 Service
在預設的「孤島模式」網路模型中,多個叢集可以共用相同的 Pod CIDR 範圍。
多個叢集可以共用同一個 Service CIDR 範圍。
一般來說,叢集中的 Pod 數量會多於 Service,因此您可能需要比 Service CIDR 範圍更大的 Pod CIDR 範圍。舉例來說,使用者叢集的建議 Pod 範圍有 2(32-16) = 216 個位址,但使用者叢集的建議服務範圍只有 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 存取權,才能連線至所有叢集節點機器。您可以設定 SSH 做為 root,或使用具備無密碼 sudo 權限的使用者。
以下是為 Google Distributed Cloud 設定 SSH 的高階步驟:
在所有機器上安裝及設定 SSH
Google Distributed Cloud 需要管理工作站與叢集節點之間的無密碼 SSH 通訊。您必須在管理工作站和每個節點電腦上執行下列步驟。
如要在執行 Ubuntu 的電腦上設定 SSH,請按照下列步驟操作:
建立安全殼層金鑰,並將公開金鑰複製到每個節點電腦
如要在管理員工作站和節點之間建立安全的無密碼連線,請在管理員工作站上建立 SSH 金鑰,並與節點共用公開金鑰。
在節點電腦上停用密碼驗證
此時,您不再需要啟用密碼驗證。
針對每個節點機器:
確認管理員工作站與節點機器之間的 SSH 存取權
正確設定 SSH 後,您就能從管理員工作站 (以 root 身分) 建立與節點機器的 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 位址 |
|---|---|---|
| 管理員叢集控制層 VIP 位址 | 管理員叢集控制層 VIP 位址 (管理員叢集 Kubernetes API 伺服器) | 172.16.20.13 |
| 使用者叢集控制層 VIP 位址 | 使用者叢集控制層 VIP 位址 (使用者叢集 Kubernetes API 伺服器) | 172.16.20.14 |
| Ingress VIP 位址 | Ingress VIP (在 MetalLB 位址集區範圍內) | 172.16.20.15 |
| Service 虛擬 IP 位址 | 十個位址,可做為 LoadBalancer 類型服務的外部 IP 位址。系統會視需要為使用者叢集節點分配位址。這個範圍包含 Ingress VIP。這是預設隨附負載平衡器 MetalLB 的必要條件。 |
172.16.20.15 - 172.16.20.24 |
Pod 和服務的 IP 位址
除了為叢集節點和 VIP 指定的 IP 位址外,您還需要為 Pod 和 Service 指定位址。您可指定用於 Pod IP 位址的 CIDR 範圍,以及用於 Kubernetes Service ClusterIP 位址的另一個 CIDR 範圍。請使用私人位址空間中的 IP 位址,如 RFC 1918 所述。這些位址會指定為叢集設定的一部分,如本指南下一節所示。
在 IP 規劃中,請決定要用於 Pod 和 Service 的 CIDR 範圍。除非有其他原因,否則請使用下列建議範圍:
| 目的 | 預先填入的 CIDR 範圍 |
|---|---|
| 管理員叢集 Pod | 192.168.0.0/16 |
| 管理員叢集服務 | 10.96.0.0/20 |
| 使用者叢集 Pod | 192.168.0.0/16 |
| 使用者叢集服務 | 10.96.0.0/20 |
建議範圍說明瞭這些要點:
避免重疊
為避免與網路上可連線的 IP 位址重疊,您可能需要使用與上述建議不同的 CIDR 範圍。Service 和 Pod 範圍不得與您要從叢集內部連結的任何外部位址重疊。
舉例來說,假設您的服務範圍是 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 代理程式會使用這個服務帳戶,維持叢集和 Google Cloud之間的連線。連線後即可使用叢集和工作負載管理功能,包括運用 Google Cloud 控制台和連線閘道與叢集互動。 | roles/gkehub.connect |
| anthos-baremetal-register | Connect 代理程式會使用這個服務帳戶向 機群註冊叢集。 | roles/gkehub.admin |
| anthos-baremetal-cloud-ops | Stackdriver 代理程式會使用這個服務帳戶,將叢集的記錄檔和指標匯出至 Cloud Logging 和 Cloud Monitoring。 |
roles/logging.logWriter roles/monitoring.metricWriter roles/stackdriver.resourceMetadata.writer roles/opsconfigmonitoring.resourceMetadata.writer roles/monitoring.dashboardEditor |