修改系統構件

系統構件支援 Google Distributed Cloud (GDC) 實體隔離設備系統,並管理 GDC 部署作業。GDC 私人 Artifact Registry 會儲存系統構件。 系統構件的格式有很多種,包括但不限於:

  • Anthos、KubeVirt 和 GDC 代管服務的容器映像檔
  • 作業系統 (OS) 映像檔
  • 韌體格式
  • 黃金虛擬機器 (VM) 範本
  • Helm 資訊套件

Artifact Registry 會參與各種 GDC 系統作業,例如安裝、升級及資源生命週期,確保作業安全無虞、可擴充且防竄改。

事前準備

如要修改系統構件,您必須取得診斷存取權。診斷存取權是特殊存取模式,可安全地為遇到問題的顧客提供支援。如要取得這項存取權,請建立支援單。

上傳 Docker 映像檔

如要修改系統構件,必須上傳新的 Docker 映像檔。上傳方法取決於您要將容器映像檔推送至下列哪個登錄檔:

以下各節說明這兩種登錄檔類型的上傳指示。

啟動機器中的 Artifact Registry

如要在啟動程序電腦中將容器映像檔上傳至 Artifact Registry,請完成下列步驟:

  1. 請確認您已修正重大問題,並取得修改後的 Docker 映像檔。

  2. 將新映像檔傳輸至無網路環境中的啟動節點。

  3. 登入啟動節點。

  4. 在啟動時間,於啟動機器中找出 Artifact Registry 的位址,並將其設為 REGISTRY_IP 環境變數:

    REGISTRY=$(kubectl get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}')
    
    REGISTRY_IP=${REGISTRY#https://}
    
  5. 擷取存取 Artifact Registry 的憑證。使用下列指令擷取管理員帳戶和密碼:

    ADMIN_PASS=$(kubectl -n harbor-system get secret harbor-admin \
        -o jsonpath="{.data.secret}" | base64 -d)
    
  6. 登入 Artifact Registry:

    docker login $REGISTRY_IP -u admin -p $ADMIN_PASS
    

    系統會列印 Login Succeeded 訊息,確認您已成功登入 Artifact Registry。

  7. 為新映像檔加上標記:

    docker image tag CONTAINER_IMAGE_URL \
        $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG
    

    更改下列內容:

    • CONTAINER_IMAGE_URL:本機容器圖片網址,例如 gcr.io/repository/image:tag
    • PROJECT_NAME:Artifact Registry 專案名稱。
    • IMAGE_NAME:容器映像檔名稱。
    • TAG:容器圖片標記。
  8. 將新映像檔推送至 Artifact Registry:

    docker image push $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG
    

管理員叢集中的 Artifact Registry

如要將容器映像檔上傳至管理員叢集的 Artifact Registry,請完成下列步驟。

  1. 請確認您已修正重大問題,並取得修改後的 Docker 映像檔。

  2. 將新映像檔傳輸至具有根存取權的節點,並使用根 kubeconfig 檔案存取無網路環境中的管理員叢集。

  3. 將管理員叢集 kubeconfig 檔案路徑匯出為環境變數:

    export ADMIN_CLUSTER_KUBECONFIG=KUBECONFIG_FILE_PATH
    

    KUBECONFIG_FILE_PATH 替換為 kubeconfig 檔案的路徑。

  4. 找出叢集內 Artifact Registry 的位址,並設為 REGISTRY_IP 環境變數:

    REGISTRY=$(kubectl --kubeconfig $ADMIN_CLUSTER_KUBECONFIG get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}')
    
    REGISTRY_IP=${REGISTRY#https://}
    
  5. 確認 REGISTRY_IP 包含有效網址,例如: 10.200.0.36:10443

    echo ${REGISTRY_IP}
    
  6. 檢查憑證授權單位 (CA) 憑證是否存在:

    ls -al /etc/docker/certs.d/${REGISTRY_IP}/ca.crt
    

    如果憑證不存在,請建立並設定憑證:

    mkdir -p /etc/docker/certs.d/${REGISTRY_IP}/
    
    chmod 755  /etc/docker/certs.d/${REGISTRY_IP}/
    
    echo $(kubectl get secret harbor-cert-secret -n istio-system -o jsonpath='{.data.ca\.crt}' --kubeconfig $ADMIN_CLUSTER_KUBECONFIG) | openssl base64 -A -d >  /etc/docker/certs.d/${REGISTRY_IP}/ca.crt
    
    chmod 755  /etc/docker/certs.d/${REGISTRY_IP}/ca.crt
    
  7. 擷取存取 Artifact Registry 的憑證。使用下列指令擷取管理員帳戶和密碼:

    ADMIN_PASS=$(kubectl --kubeconfig $ADMIN_CLUSTER_KUBECONFIG \
        -n harbor-system get secret harbor-admin \
        -o jsonpath="{.data.secret}" | base64 -d)
    
  8. 登入 Artifact Registry:

    docker login $REGISTRY_IP -u admin -p $ADMIN_PASS
    

    系統會列印 Login Succeeded 訊息,確認您已成功登入 Artifact Registry。

  9. 為新映像檔加上標記:

    docker image tag CONTAINER_IMAGE_URL \
        $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG
    

    更改下列內容:

    • CONTAINER_IMAGE_URL:本機容器圖片網址,例如 gcr.io/repository/image:tag
    • PROJECT_NAME:Artifact Registry 專案名稱。
    • IMAGE_NAME:容器映像檔名稱。
    • TAG:容器圖片標記。
  10. 將新映像檔推送至 Artifact Registry:

    docker image push $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG