12. 網路啟動程序

預計完成時間:240 分鐘

可操作元件擁有者:PNET

技能設定檔:部署工程師

本頁列出啟動網路及設定交換器的步驟。

網路系統包含下列元件:

  • 管理網路:頻外管理網路,包含下列兩種交換器:

    • 管理交換器
    • 管理匯總交換器
  • 資料平面網路:傳輸使用者流量的網路,包含下列三種交換器:

    • 上層機架 (TOR) 交換機
    • 匯總切換開關
    • 邊框葉片開關

如果交換器目前的韌體不是預期版本,網路啟動程序會嘗試將交換器帶到 Google Distributed Cloud (GDC) 氣隙版本的預期交換器 OS 版本。

12.1. 事前準備

交換器出貨時可能採用原廠預設設定。開始前,請重設所有交換器,移除現有設定。如要執行這項操作,請使用序列埠控制台連線,然後執行下列指令:

write erase

移除現有交換器設定後,請重新載入交換器:

reload in 5

12.2. 安裝網路

請按照下列步驟安裝網路:

  1. 開啟所有開關。
  2. 在啟動機器上,以 sudo 根存取權啟動網路啟動程序:

    gdcloud system network install --config PATH_TO_CELLCFG --upgrade-switch-os
    

    PATH_TO_CELLCFG 替換為 cellcfg 檔案的路徑。

    1. 如果這項指令失敗,並顯示下列錯誤訊息:

      root@bootstrapper:~/hams/gdc/output/cellcfg# gdcloud system network install --config /root/hams/gdc/output/cellcfg --upgrade-switch-os
      Error: failed to initialize KIND: could not determine harbor address (no match between local and docker hostnames): could not find a match
      
    2. 再次執行 init 指令,解決這項錯誤:

      gdcloud system network init --config PATH_TO_CELLCFG
      
  3. 請保持開啟狀態。交換器會經過 PowerOn Auto Provisioning (POAP) 開機序列,從啟動機器自動遠端安裝自身。

  4. 監控自我啟動程式記錄,確保交換器依下列順序啟動:

    1. 管理切換鈕 1
    2. 其他管理交換器和管理匯總交換器。
    3. 資料網路交換器。
  5. 繼續監控啟動程序記錄。完成上述步驟後,交換器就會連線。Bootstrap 程式會透過 API 在管理交換器和資料交換器上安裝其他設定。

  6. 等待啟動記錄顯示 Successfully bootstrapped all switches. 訊息。

12.3. 啟動詳細資料

使用 POAP 開機順序,啟動網路中的所有交換器,步驟如下:

  1. 將啟動機器連接至管理交換器。
  2. 將管理匯總交換器連接至管理交換器。
  3. 連接同機架中的其餘交換器。
  4. 將管理匯總交換器連接至另一個機架。
  5. 連接所有其他交換器。

啟動程序機器會使用 ./cellcfg 路徑中交換器的 YAML 檔案,產生交換器設定。所有交換器都會使用 PowerOn Auto Provisioning (POAP) 開機順序來接收設定。在硬體 3.0 中,網路交換器會收到含有最終設定的 POAP 檔案。交換器完成 POAP 後,會自動重新啟動。

重新啟動後,交換器必須與 ./cellcfg 路徑中的交換器 YAML 檔案保持一致。啟動程序機器會向所有交換器傳送要求,確保交換器連線和設定成功。

12.4. 啟動後設定路徑

網路啟動程序完成後,請設定啟動程式的路徑,為即將進行的啟動作業做好準備。

12.4.1. 尋找資料平面閘道

資料層閘道是資料層網路的閘道 IP 位址。設定閘道 IP 位址,與資料平面網路中的其他服務通訊。

如要找出資料平面閘道 IP 位址,請按照下列步驟操作:

  1. cellcfg 資料夾中,前往 kub-ipam.yaml 檔案。
  2. 找出名為 control-plane-subnetSubnetClaim 資源:

    yq eval -r '
    select(.kind == "SubnetClaim" and .metadata.name == "control-plane-subnet") |
    .spec.ipv4Spec.staticReservedIpRanges[] |
    select(.type == "GatewayReservation") |
    .ipRange.startIPAddress
    ' PATH_TO_KUB_IPAM_FILE
    

    PATH_TO_KUB_IPAM_FILE 替換為 cellcfg/kub-ipam.yaml 檔案的路徑。

  3. spec.ipv4Spec 區段中找出閘道 IP 位址,該位址會列為 type: GatewayReservation。舉例來說,資料平面介面的閘道 IP 位址為 172.19.0.1

    # Source: kub-ipam-assets/templates/subnet_claims.yaml
    apiVersion: system.private.gdc.goog/v1alpha1
    kind: SubnetClaim
    metadata:
      name: control-plane-subnet
      namespace: root
      labels:
        subnetclaims.system.private.gdc.goog/usage: "server"
      annotations:
        lcm.private.gdc.goog/claim-by-force: "true"
        helm.sh/resource-policy: keep
    spec:
      category: ExternalOverlayNetwork
      overlayNetwork: External
      cidrClaimName: control-plane-cidr
      ipv4Spec:
        staticReservedIpRanges:
          - ipRange:
              size: 1
              startIPAddress: 172.19.0.1
            type: GatewayReservation
    

12.4.2. 在 Bootstrapper 上建立路徑的指令碼

建立指令碼來建立路徑:

bash << 'EOF'
#!/bin/bash

SCRIPT_PATH="/usr/local/sbin/add-routes.sh"
SERVICE_PATH="/usr/lib/systemd/system/add-routes.service"
MGMT_GATEWAY=MGMT_GATEWAY
MGMT_CIDR=MGMT_CIDR
MGMT_INTERFACE=MGMT_INTERFACE
BOND_GATEWAY=DATA_GATEWAY

rm -rf "$SCRIPT_PATH" 2>/dev/null
touch "$SCRIPT_PATH"
rm -rf "$SERVICE_PATH" 2>/dev/null
touch "$SERVICE_PATH"

echo -e '#!/bin/bash\n' > "$SCRIPT_PATH"
echo "ip route del $MGMT_CIDR via $MGMT_GATEWAY dev $MGMT_INTERFACE proto static" >> "$SCRIPT_PATH"
echo "ip route add $MGMT_CIDR via $MGMT_GATEWAY dev $MGMT_INTERFACE proto static" >> "$SCRIPT_PATH"
echo "ip route del default via $BOND_GATEWAY dev bond0 proto static" >> "$SCRIPT_PATH"
echo "ip route add default via $BOND_GATEWAY dev bond0 proto static" >> "$SCRIPT_PATH"

chmod +x "$SCRIPT_PATH"

echo -e "[Unit]\nDescription=Add Routes Service\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/local/sbin/add-routes.sh\n\n[Install]\nWantedBy=default.target" > "$SERVICE_PATH"

systemctl daemon-reload
systemctl enable add-routes.service
systemctl restart add-routes.service

echo -e "\n ### add-routes.sh script file path ###"
ls -l $SCRIPT_PATH
echo -e "\n ### add-routes.service file path ###"
ls -l $SERVICE_PATH
echo -e "\n ### add-routes.service status ###"
systemctl status add-routes.service
echo -e "\n ### Show if add-routes.service is enabled at boot ###"
systemctl is-enabled add-routes.service
echo -e "\n ### Show the just added route to ens15f0 ###"
ip route show | grep ens15f0
echo -e "\n ### Show the just added default route  ###"
ip route show | grep default
EOF

更改下列內容:

這個程式碼片段會建立 systemd 服務和指令碼,如下所示:

SCRIPT_PATH="/usr/local/sbin/add-routes.sh
SERVICE_PATH="/usr/lib/systemd/system/add-routes.service

系統重新啟動後,必須有 systemd 服務才能保留路徑。新增的路線包括:

  • 透過 bond0 介面連往資料網路的預設路徑。
  • 透過管理介面連往管理網路的路徑。

12.5. 建立多區域連線

如果 GDC 執行個體要加入現有的多區域宇宙,請按照設定多區域互連中的步驟,為每個區域建立現有區域和目前部署區域之間的網路連線。

12.6. 疑難排解

如要排解網路啟動程序問題,請參閱「網路啟動程序疑難排解」。

12.7. 潛在問題

預先載入版本低於 9.3.10 的網路交換器可能無法啟動。

詳情請參閱「已知問題」。