9.. 安裝 Bootstrapper 伺服器

預計完成時間:3 小時

可操作元件擁有者:OLT/節點

技能設定檔:部署工程師

啟動程序機器是安裝在 Google Distributed Cloud (GDC) 氣隙單元中的第一個伺服器資訊系統 (IS),用於啟動其餘 Distributed Cloud 資訊系統。預檢完成後,機器會重新映像為工作站叢集節點。

在第三個機架中使用第一個標準伺服器做為啟動程序。舉例來說,在實驗室驗證中,我們使用 xx-ac-bm15,這是第三個機架 ac 上最頂端的伺服器,且資產標記中沒有 base。雖然啟動程序可使用機架中的任何機器,因為啟動程序沒有特定需求,但我們會為此目的標準化特定機器。不過,前 3 個機架中,名稱含有 base 的伺服器不應使用,因為這些伺服器用於根管理員和作業叢集。

9.1. 安裝作業系統

  1. 透過螢幕和鍵盤連線至啟動程式電腦。

  2. 在 iLO 專用網路埠中設定 IP。使用管理 IP 範圍內的位址,最後八位元為 160。

  3. 將工作站 IP 設為同一子網路上的任何其他位址,並暫時透過乙太網路交叉線連接至後方乙太網路連接埠。

9.1.1.透過工作站和本機 ISO 檔案安裝

  1. 從離線工作站瀏覽器連線至啟動程式機器的 iLO 控制台,然後前往導覽樹狀結構中的「Remote Console & Media」(遠端控制台和媒體) 選單。請勿透過 USB iLO 使用遠端媒體。

  2. 按一下「Virtual Media」,然後在「Connect CD/DVD-ROM」中指定虛擬媒體網址。

  3. 選用:選取「下次重設時啟動」。選取「Boot on Next reset」後,伺服器只會在下次重新啟動時,使用這個映像檔開機。伺服器第二次重新啟動時,系統會自動退出映像檔,避免伺服器重複啟動這個映像檔。如果未勾選這個核取方塊,系統會保留圖片的連線,直到手動退出為止。

  4. 按一下「插入媒體」進行驗證。

  5. 如要讓啟動程序機器從 .iso 映像檔啟動,請重設機器:

    1. 在 iLO 控制台中,按一下「Power & Thermal - Server Power」(電源與散熱 - 伺服器電源)
    2. 按一下「重設」。您可以開啟虛擬控制台,監控機器的重設作業和 .iso 檔案開機程序。
  6. 啟動程序完成後,請指定登入名稱和密碼,連線至啟動程序機器 (根帳戶)。啟動程序會使用 Google 建構的 ISO 檔案啟動,因此 Google 會指定預設的根密碼。

身為操作人員,您可以存取密碼,並視需要建立其他使用者。

開機程式 ISO 檔案已包含所有必要工具,例如 dockerkubectl,因此您不需要另外安裝這些工具。

9.1.2.透過燒錄至 USB 隨身碟的 ISO 安裝

9.1.2.1. 將 ISO 燒錄到 USB 隨身碟

  1. 系統控制器使用 rocky 映像檔,因此您可以使用 dd 指令或「Disks」使用者介面 (UI)。
  2. 透過「磁碟」使用者介面:

    1. 插入隨身碟。
    2. 按一下導覽選單中的「隨身碟」,然後按一下選單列中的漢堡選單。按一下「Restore Disk Image」,然後指向下載的開機程式 ISO。

    USB Burn GUI 範例

  3. 使用 dd:

    1. 如要判斷哪個磁碟是 USB 隨身碟,請執行: sudo fdisk -l

    2. 使用「磁碟大小」判斷裝置是否為 USB。請記下裝置名稱,以便在後續步驟中使用。

    3. 依上一個步驟提供的裝置名稱掛接磁碟: sudo umount <device name>

    4. 格式化硬碟: sudo mkfs.vfat <device name>

    5. 將 ISO 複製到磁碟機: sudo dd bs=4M if=<path to ISO file> of=<device name> status=progress

9.1.2.2. 使用 USB 開機磁碟開機

  1. 將 USB 隨身碟插入正面 USB 連接埠 (不是標示為 iLOiLO 的連接埠)。
  2. 在 iLO 介面中,選取電源按鈕上的「Momentary Press」(短暫按壓)。等待虛擬按鈕變為黃色,表示裝置已關機。
  3. 依序選取「管理」和「開機順序」
  4. 在「One-Time Boot Status」部分中,選取「Select One-Time Boot」,然後選取「USB drive」
  5. 在 iLO 介面中選取電源按鈕上的「瞬間按壓」,確認虛擬按鈕變成綠色。系統會自動安裝 OS 並重新啟動。主控台顯示 bootstrapper login 提示後,表示啟動程序安裝完成。
  6. 移除 USB 隨身碟。

9.1.3. 安裝稽核記錄

如要手動安裝及啟用啟動程式稽核記錄,請按照下列步驟操作:

  1. 將下列程式碼區塊複製到 /etc/bash.bootstrapper_audit.sh 的新檔案中

    function log_previous_cmd() {
    rc=$? ; [[ "$rc" -eq 130 ]] && return
    line="rc=${rc};;pwd=$(pwd);;ppid=${PPID}"
    line="${line};;started=$(history 1|awk 'NR==1{$0=gensub(/^.{0,7}([^ ]*) /,"\\1;;cmd=","g",$0)}1')"
    logger --priority local6.info --id="$$" "${line}"
    }
    export PROMPT_COMMAND='log_previous_cmd'
    export HISTTIMEFORMAT='%G-%m-%dT%T '
    
  2. /etc/bash.bashrc 結尾處附加這行程式碼

    [ -f /etc/bash.bootstrapper_audit.sh ] && . /etc/bash.bootstrapper_audit.sh
    

    儲存這些變更後,所有新殼層都會將稽核記錄項目記錄到系統日誌。

  3. (選用) 確認稽核記錄功能正常運作

    如要確認稽核記錄是否順利記錄,請執行下列指令,並驗證是否發出類似的輸出內容:

    USER@bootstrapper:~$ echo 'a command'
    USER@bootstrapper:~$ sudo journalctl -eo short-iso -p info SYSLOG_FACILITY=22
    2024-10-12T00:30:24+0000 bootstrapper USER[96558]: rc=0;;pwd=/root;;ppid=96479;;started=2024-10-12T00:30:24;;cmd=date
    2024-10-12T00:30:47+0000 bootstrapper USER[96558]: rc=0;;pwd=/root;;ppid=96479;;started=2024-10-12T00:30:47;;cmd=echo 'a command'
    
  4. (選用) 停用稽核記錄

    萬一懷疑稽核記錄可能會影響其他啟動程序作業,您可以在目前的殼層中快速停用這項功能:

    USER@bootstrapper:~$ unset PROMPT_COMMAND
    

    確認稽核記錄不會影響任何項目後,請在目前的殼層中重新啟用,方法是輸入:source /etc/bash.bashrc

9.2. 設定管理介面和路徑

本節將設定管理介面和啟動程序所需的路徑。

9.2.1. 找出管理 IP、CIDR 和閘道位址

  1. cellcfg/serv-core.yaml 檔案中找出啟動程式的管理 IP 位址:

    yq eval -r 'select(.metadata.annotations."system.private.gdc.goog/bootstrapper" == "true") | .spec.managementNetwork.ips[0]' PATH_TO_SERV_CORE_FILE
    

    PATH_TO_SERV_CORE_FILE 替換為 cellcfg/serv-core.yaml 檔案的路徑。

    啟動程序會以 system.private.gdc.goog/bootstrapper: "true" 註解識別。在範例中,spec.managementNetwork.ips[0] 的管理 IP 位址為 172.22.80.76

    apiVersion: system.private.gdc.goog/v1alpha1
    kind: Server
    metadata:
      annotations:
        lcm.private.gdc.goog/claim-by-force: "true"
        helm.sh/resource-policy: keep
        system.private.gdc.goog/bootstrapper: "true"
      creationTimestamp: null
      labels:
        system.private.gdc.goog/rack-name: mb-aa
      name: mb-aa-bm13
      namespace: gpc-system
    spec:
      bmc:
        credentialsRef:
          name: bmc-credentials-mb-aa-bm13
          namespace: gpc-system
        ip: 172.22.80.108
        mac: 5c:ba:2c:42:a9:68
        protocol: redfish
        redfish:
          systemPath: /redfish/v1/Systems/1
      dataplaneNetwork: {}
      encryptDisk: true
      firmwareInstall: true
      secureErase: true
      luks:
        enable: false
      managementNetwork:
        ips:
        - 172.22.80.76
        link: LOM1
    
  2. 找出設定管理介面 IP 位址所需的 CIDR 位址範圍。這項功能適用於 CIQ 問卷調查。

    CIQ 範例:

    oobManagementCIDRs:
    - ipFamily: IPv4
      ipv4: 172.23.16.0/24
    - ipFamily: IPv4
      ipv4: 172.23.17.0/24
    - ipFamily: IPv4
      ipv4: 172.23.18.0/24
    - ipFamily: IPv4
      ipv4: 172.23.19.0/24
    

    在本例中,CIDR 範圍 172.23.16.0/22 涵蓋列出的所有管理 CIDR 位址。

  3. 找出啟動程序在與管理網路通訊時使用的閘道位址。如果啟動程式位於 ac 機架,請使用下列指令找出 CIDRClaim 資源的名稱:

    grep -A 10 -B 10 "ac-mgmtsw01-server-os-cidr" cellcfg/pnet-core.yaml`.
    

    輸出內容如下:

    apiVersion: system.private.gdc.goog/v1alpha1
    kind: CIDRClaim
    metadata:
      annotations:
        lcm.private.gdc.goog/claim-by-force: "true"
      labels:
        cidrclaims.system.private.gdc.goog/cidr-category: internal
        cidrclaims.system.private.gdc.goog/cidr-org: root
        cidrclaims.system.private.gdc.goog/node-type: leaf
        network.private.gdc.goog/mgmtnw-device-category: server-os
        network.private.gdc.goog/mgmtsw: ag-ac-mgmtsw01
      name: ag-ac-mgmtsw01-server-os-cidr
      namespace: root
    spec:
      ipv4Spec:
        staticCidrBlocks:
        - 172.28.120.128/26
      parentCidrClaimName: server-os-mgmt-network-cidr
    

    使用 ag-ac-mgmtsw01-server-os-cidr 資源中 ipv4Spec.staticCidrBlocksCIDRClaim 172.28.120.128/26,閘道位址是 172.28.120.128/26 中的第一個 IP 位址,也就是 172.28.120.129

9.2.2. 設定管理介面的 IP 位址

ip address add dev MGMT_INTERFACE MGMT_IP/MGMT_SUBNET_PREFIX

更改下列內容:

  • MGMT_INTERFACE:管理介面名稱範例為 ens15f0。使用 cellcfg/serv-core.yaml 中的 MAC 位址,找出用於管理網路的介面。
  • MGMT_IP:管理 IP 位址,請參閱「尋找管理 IP 和 CIDR」一節。
  • :管理 CIDR 子網路前置字元 (例如上例中的 172.23.16.0/2222)。MGMT_SUBNET_PREFIX詳情請參閱「尋找管理 IP 和 CIDR」。

然後在啟動程式上執行指令碼。 這個指令碼會將 IP 位址指派給管理介面,並為管理 CIDR 範圍建立預設路徑。

9.2.3. 啟用管理介面

本節說明如何啟用管理介面。在 cellcfg/serv-core.yaml 中找出管理介面的 MAC 位址,並在啟動程式的 ip a 輸出內容中交叉參照這個 MAC 位址,即可識別管理介面。

在本範例中,管理介面值為 ens15f0。按照這些指示操作時,請使用自己的值。使用 cellcfg/serv-core.yaml 檔案中的管理 IP 位址新增 IP 位址:

apiVersion: system.private.gdc.goog/v1alpha1
kind: Server
metadata:
  annotations:
    lcm.private.gdc.goog/claim-by-force: "true"
    helm.sh/resource-policy: keep
    system.private.gdc.goog/bootstrapper: "true"
  creationTimestamp: null
  labels:
    system.private.gdc.goog/rack-name: ma-ac
  name: ma-ac-bm15
  namespace: gpc-system
spec:
  bmc:
    credentialsRef:
      name: bmc-credentials-ma-ac-bm15
      namespace: gpc-system
    ip: 172.29.8.208
    mac: 5c:ba:2c:42:28:2e
    protocol: redfish
    redfish:
      systemPath: /redfish/v1/Systems/1
  dataplaneNetwork: {}
  encryptDisk: true
  firmwareInstall: true
  secureErase: true
  luks:
    enable: false
  managementNetwork:
    ips:
    - 172.29.24.147
    link: LOM1
  provider: external
  serverHardware:
    bmhNetworkRef:
      name: ma-ac-bm15
    dataplaneNICPorts:
    - mac: 5c:ba:2c:61:83:90
      name: s1p1
    - mac: 5c:ba:2c:61:83:98
      name: s1p2
    machineClassName: o1-standard1-64-gdc-metal
    managementNICPort:
      mac: 98:f2:b3:28:0b:70
      name: LOM1
    portBond:
      name: s1p1-s1p2
      networkBondModeType: 802.3ad
      nicPortNames:
      - s1p1
      - s1p2
status: {}

在這個 YAML 檔案範例中,管理 IP 位址為 172.29.24.147。前置字串長度為 /26,因為「尋找管理 IP、CIDR 和閘道位址」中的 CIDR 區塊為 /26

將管理 IP 位址新增至管理介面:

sudo ip addr add 172.29.24.147/26 dev ens15f0,

接著,使用下列 ip 指令設定介面:

ip link set ens15f0 up

如要檢查介面設定是否成功,請使用 ip link show ens15f0

ip link show ens15f0

輸出內容會類似如下,其中 UP 訊息表示成功:

6: ens15f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 98:f2:b3:28:0b:70 brd ff:ff:ff:ff:ff:ff
    inet 172.29.24.147/26 brd 172.29.24.191 scope global ens15f0
       valid_lft forever preferred_lft forever
    inet6 fe80::9af2:b3ff:fe28:b70/64 scope link
       valid_lft forever preferred_lft forever

9.2.4. 設定轉送設定


MGMT_GATEWAY=MGMT_GATEWAY
MGMT_CIDR=MGMT_CIDR
MGMT_INTERFACE=MGMT_INTERFACE

ip route add $MGMT_CIDR via $MGMT_GATEWAY dev $MGMT_INTERFACE proto static"

更改下列內容:

然後在啟動程序上執行指令碼。

9.3. 設定啟動程式的時鐘

此時還沒有 NTP 伺服器。我們需要手動將啟動程式的時鐘設定為相當準確的時間 (與實際時間的誤差在 1 秒內),時區為世界標準時間。請務必使用「上午」或「下午」,除非你確定要使用 24 小時制。如果時鐘設定錯誤,後續階段將無法修正。

date --set "DATE_TIME_UTC"

DATE_TIME_UTC 替換為 UTC 的日期和時間,例如 2023-03-21 01:14:30 AM UTC

9.4. 登入啟動程式伺服器

如果登出啟動程序伺服器,可以回到啟動程序電腦的實體位置,或使用系統控制器重新登入。

9.4.1. 登入實體電腦

從實體電腦登入啟動程序伺服器:

  1. 將鍵盤、滑鼠和螢幕連接至啟動程式電腦。

  2. 使用預設使用者名稱和密碼登入電腦。

9.4.2. 登入系統控制器

使用系統控制器登入啟動程式伺服器:

  1. 前往放置系統控制器的急救車。

  2. 執行下列指令:

    ssh ubuntu@BOOTSTRAPPER_IP_ADDRESS
    

    BOOTSTRAPPER_IP_ADDRESS 替換為啟動程式伺服器的 IP 位址。

9.5. 檔案結構

後續所有作業都會以根使用者身分執行。以下是建議的目錄結構,但並非必要。

    root
    ├── kubeconfigs/ - recommend creating this directory to keep track of the many kubeconfigs
    └── .kube/config - location of bootstrap(KIND) cluster kubeconfig
    └── full-release-y.y.y-gdch.yyy - Extraction of the gdch tar from step download-files
        ├── bootstrapper.iso
        ├── docs
        ├── examples
        ├── gdcloud
        ├── harbor
        ├── oci
        └── operations_center
        └── root-admin/root-admin-kubeconfig - where the root-admin kubeconfig will be put after root-admin creation
    └── full-release-y.y.y-gdch.yyy-hotfix - if necessary, hotfixes will be extracted to another folder
        ├── README - explains how to apply the hotfix
        ├── oci - directory containing the hotfix
    ├── config - this is for the output of the "create configuration files" step
        ├── output/cellcfg - initial CRs applied to the bootstrap cluster
        ├── output/assets
        ├── devices.csv - HW file useful to have for debugging
        ├── cables.csv - HW file useful to have for debugging
        ├── ciq.yaml - HW file useful to have for debugging