規劃在硬體上進行基本安裝

Distributed Cloud 軟體僅允許您在裸機硬體上,建立小型的 GKE 叢集概念驗證安裝。在本教學課程的第一部分 (共兩部分),您將設定最精簡的硬體環境,並規劃 IP 位址。在第二部分「建立基本叢集」中,您將建立管理員叢集和使用者叢集。

本文適用對象為設定、監控及管理基礎架構生命週期的管理員、架構師和操作員。如要進一步瞭解常見角色和工作,請參閱「常見的 GKE 使用者角色和工作」。

這個基礎架構規模極小,不適合用於正式環境工作負載。如要安裝正式版,請參閱「選擇部署模式」。

事前準備

  1. 請參閱「關於 Google Distributed Cloud」。
  2. 熟悉一些基本的 Google Cloud 概念,包括專案、IAM 權限和服務帳戶。
  3. 登入 Google Cloud 帳戶。如果您未曾使用過 Google Cloud,歡迎 建立帳戶,親自體驗實際使用我們產品的成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
  4. 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify 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.

    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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  7. Verify that billing is enabled for your Google Cloud project.

  8. 請記下 Google Cloud 專案 ID,後續步驟會用到。

程序總覽

如要設定基本基礎架構,請務必完成下列步驟:

  1. 設定管理員工作站。設定 Linux 管理員工作站,執行地端部署管理工作。這可能是管理多個叢集的現有機器或專屬機器。

  2. 設定叢集節點機器。為節點設定至少三個機器:一個管理員叢集節點、一個使用者叢集控制層節點,以及一個使用者叢集 worker 節點。

  3. 規劃網路。規劃節點機器、虛擬 IP 位址 (VIP),以及 Service 和 Pod CIDR 範圍的 IP 位址。

  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. 確認您目前執行的 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
      ...
    
  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. 確認 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,請按照下列步驟操作:

  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.36.200-gke.118/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. 設定叢集節點機器

如要盡可能減少安裝作業,只安裝一個非高可用性管理員叢集和一個非高可用性使用者叢集,您需要三部機器:

  • 管理員叢集機器,有一個控制層節點。

  • 使用者叢集需要兩部機器,分別用於一個控制層節點和一個 worker 節點。

硬體需求

每部節點機器都必須符合下列硬體需求:

  • 至少 2 個 CPU 核心
  • 至少 4 GiB 的 RAM
  • 至少 128 GiB 的儲存空間

作業系統需求

每部節點機器都必須執行支援的 Ubuntu 版本。

設定 Ubuntu

請按照管理員工作站使用的相同操作說明,在每個節點上設定 Ubuntu。

設定節點的 SSH 存取權

管理員工作站必須能透過無密碼 SSH 存取所有叢集節點機器。您可以將 SSH 設定為 root,或設定為具有無密碼 sudo 權限的使用者。

以下是為 Google Distributed Cloud 設定 SSH 的大致步驟:

  1. 在所有機器上安裝及設定 SSH。

  2. 建立安全殼層金鑰,並將公開金鑰複製到各個節點機器。

  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 檔案中的 PermitRootLogin 和 PasswordAuthentication 行,並將值設為 yes:

    # Authentication:
    
    #LoginGraceTime 2m
    PermitRootLogin yes
    #StrictModes yes
    #MaxAuthTries 6
    #MaxSessions 10
    ...
    PasswordAuthentication yes
    
  3. 設定根密碼:

    sudo passwd root
    
  4. 如要套用 SSH 設定變更,請重新啟動 SSH 服務:

    sudo systemctl restart ssh.service
    
  5. 重新啟動裝置。

  6. 從其他機器建立 SSH 連線,確認 SSH 是否正常運作。

建立安全殼層金鑰,並將公開金鑰複製到各個節點機器

如要在管理員工作站和節點之間建立安全的無密碼連線,請在管理員工作站上建立安全殼層金鑰,並與節點共用公開金鑰。

  1. 在管理員工作站上,產生私密和公開金鑰組。請勿為金鑰設定通關密語:

    ssh-keygen -t rsa
    
  2. 在管理員工作站上,將產生的公開金鑰複製到各個節點機器:

    ssh-copy-id -i PUBLIC_KEY root@CLUSTER_NODE_IP
    

    更改下列內容:

    • PUBLIC_KEY:安全殼層公開金鑰檔案的路徑。預設路徑為 /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 後,您就能從管理員工作站 (以 root 身分) 建立與節點機器的 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 Proxy 和 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
使用者叢集 worker 節點 執行使用者工作負載的實體機器 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 類型 Service 的外部 IP 位址。系統會視需要為使用者叢集節點分配位址。

這個範圍包含 ingress VIP。MetalLB 是預設的套裝負載平衡器,因此 IP 位址必須重疊。

172.16.20.15 - 172.16.20.24

Pod 和 Service 的 IP 位址

除了為叢集節點和 VIP 指定的 IP 位址外,您還需要為 Pod 和 Service 指定位址。您需要指定一個 CIDR 範圍用於 Pod IP 位址,並指定另一個 CIDR 範圍用於 Kubernetes Service 的 ClusterIP 位址。請使用私人位址空間中的 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
使用者叢集 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 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 會使用這個服務帳戶,從 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

後續步驟

建立基本叢集