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

本頁面是指南的第一部分,將逐步說明如何使用 Google Distributed Cloud (僅限軟體) 裸機 (先前稱為 Google Distributed Cloud Virtual,再之前稱為 Anthos clusters on bare metal),在裸機硬體上建立 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,後續步驟將會用到。
  9. 程序總覽

    最簡單的基礎架構設定包含下列主要步驟:

    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. 確認您現在執行的是 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 替換為專案 ID。Google Cloud

    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.32.100-gke.106/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 存取權,才能連線至所有叢集節點機器。您可以設定 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 檔案中新增 PermitRootLoginPasswordAuthentication 行,並將值設為 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 運作正常。

    建立安全殼層金鑰,並將公開金鑰複製到每個節點電腦

    如要在管理員工作站和節點之間建立安全連線 (不需密碼),請在管理員工作站上建立 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 後,您就能從管理員工作站 (以 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 類型的服務
    • 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 位址
    管理員叢集控制層 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

    建議範圍說明瞭這些要點:

    • 在預設的「孤島模式」網路模型中,多個叢集可以共用相同的 Pod CIDR 範圍。

    • 多個叢集可以共用同一個 Service CIDR 範圍。

    • 一般來說,叢集中的 Pod 數量會多於 Service,因此您可能需要比 Service CIDR 範圍更大的 Pod CIDR 範圍。舉例來說,使用者叢集的建議 Pod 範圍有 2(32-16) = 216 個位址,但使用者叢集的建議服務範圍只有 2(32-20) = 212 個位址。

    避免重疊

    為避免與網路上可連線的 IP 位址重疊,您可能需要使用與上述建議不同的 CIDR 範圍。Service 和 Pod 範圍不得與您要從叢集內部連結的任何外部位址重疊。

    舉例來說,假設您的服務範圍是 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 會使用這個服務帳戶,從 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 LoggingCloud Monitoring roles/logging.logWriter
    roles/monitoring.metricWriter
    roles/stackdriver.resourceMetadata.writer
    roles/opsconfigmonitoring.resourceMetadata.writer
    roles/monitoring.dashboardEditor

    後續步驟

    建立基本叢集