環境設定與升級準備

準備升級先前的 Knative Serving 安裝項目,並遷移工作負載,方法是設定指令列環境、建立環境變數,以及下載遷移指令碼。

事前準備

  • 升級前,請先詳閱並確認符合相關規定

  • 根據預設,Cloud Shell 包含最新版本的 gcloudkubectl 指令。如果您選擇使用本機的指令列環境,請務必符合下列基本規定:

    • gcloud 346.0.0 以上版本
    • kubectl 1.21 以上版本的用戶端

    進一步瞭解如何設定指令列工具

  • 您必須在本頁面中完成準備步驟,才能順利升級及遷移

    重要事項:程序中使用的所有指令都依賴您在下方設定的環境變數。舉例來說,如果您關閉 Cloud Shell 或工作階段逾時,請務必重設必要的環境變數。

設定環境

  1. 如要使用 Cloud Shell,請在 Google Cloud 控制台中開啟 Cloud Shell:

    啟用 Cloud Shell

    重要事項:Cloud Shell 設有用量限制,且可能會逾時。如果工作階段逾時,請務必重設必要環境變數。

  2. 建立下列必要環境變數:

    1. 為 Google Cloud 專案和叢集詳細資料設定變數:

      export PROJECT_ID=PROJECT_ID
      export CLUSTER_NAME=CLUSTER_NAME
      export CLUSTER_LOCATION=CLUSTER_LOCATION
      

      更改下列內容:

      • PROJECT_ID 替換為專案的 ID。 Google Cloud
      • CLUSTER_NAME 改成叢集 ID 或叢集的完整 ID。
      • CLUSTER_LOCATION,並將 region 或 zone 替換為叢集所在的區域。
    2. 視設定而定,您必須找出叢集中處理流量的輸入閘道。請務必找出實際設定及處理流量的 Istio 版本。

      • 如果您使用 Istio 的隨附版本,請確認 Ingress 服務名稱在 gke-system 命名空間中為 istio-ingress

        kubectl get svc istio-ingress -n gke-system
        

        結果:系統會傳回設定的詳細資料。

      • 如果您安裝「Istio 外掛程式」,請務必取得服務的 IP 位址,並找出已設定至網域的服務,藉此判斷已設定並主動處理流量的 Ingress 閘道。

        1. 取得每個 Ingress 服務的 EXTERNAL-IP 位址:

          執行下列指令,取得「隨附的 Istio 版本」(istio-ingress) 和「Istio 外掛程式」(istio-ingressgateway) 兩項 Ingress 服務的設定詳細資料:

          kubectl get svc istio-ingress -n gke-system
          kubectl get svc istio-ingressgateway -n istio-system
          

          輸出內容範例

          請記下每個服務的 EXTERNAL-IP 值。

           NAME                 TYPE         CLUSTER-IP  EXTERNAL-IP    PORT(S)                                     AGE
           istio-ingress        LoadBalancer 11.11.1.111 12.345.678.910 15020:31265/TCP,80:30059/TCP,443:32004/TCP  8d
          
           NAME                 TYPE         CLUSTER-IP  EXTERNAL-IP    PORT(S)                                                                     AGE
           istio-ingressgateway LoadBalancer 22.22.2.222 10.987.654.321 15021:32747/TCP,80:30695/TCP,443:32695/TCP,15012:32369/TCP,15443:30909/TCP  88d
          
        2. 透過自訂網域的 DNS 記錄,找出設定用於處理流量的外部 IP 位址:

          1. 前往 Knative serving 網域對應頁面:

            前往「網域對應」頁面

          2. 按一下服務右側三點垂直刪節號圖示,然後按一下「DNS RECORDS」(DNS 記錄) 顯示所有的 DNS 記錄:

            選取 DNS 記錄

            以上述範例為例,如果 DNS 記錄設定為 istio-ingressgateway 服務的 10.987.654.321 IP 位址,則表示 Istio 外掛程式的 Ingress 閘道正在使用中,並提供流量服務。

    3. 為叢集提供流量的 Ingress 服務名稱和命名空間設定變數:

      export INGRESS_NAME=INGRESS_NAME
      export INGRESS_NAMESPACE=INGRESS_NAMESPACE
      

      更改下列內容:

      • INGRESS_NAME 改成您在上一步中識別的 Ingress 服務名稱。

      • INGRESS_NAMESPACE 替換為您在上一個步驟中識別的 Ingress 服務命名空間。

  3. 設定 Google Cloud CLI:

    gcloud config set project ${PROJECT_ID}
    gcloud container clusters get-credentials ${CLUSTER_NAME} --region ${CLUSTER_LOCATION}
    
  4. 私人叢集:

    • 如果您已從要執行遷移指令碼的用戶端存取私人叢集,可以跳至下一個步驟。

    • 如果私人叢集已啟用 master-authorized-network,您可以將用戶端的 IP 位址新增至 master-authorized-networks 允許清單,從要執行遷移指令碼的用戶端啟用存取權:

      gcloud container clusters update ${CLUSTER_NAME} \
          --region=${CLUSTER_LOCATION} \
          --enable-master-authorized-networks \
          --master-authorized-networks $(curl ifconfig.me)/32
      
  5. 下載 Knative serving 遷移指令碼:

    TMP_DIR=$(mktemp -d)
    gcloud storage cp gs://crfa-to-hub-upgrade/migration-addon.sh $TMP_DIR
    cd $TMP_DIR
    chmod +x ./migration-addon.sh
    
  6. 執行下列指令來停用「縮減至零」,否則在更新主節點時,縮放作業會失敗並導致錯誤:

    kubectl patch cm config-autoscaler -n knative-serving -p '{"data":{"enable-scale-to-zero": "false"}}'
    

    請注意,這項升級和遷移程序的最後一個步驟是重新啟用「縮減至零」。

後續步驟

解除安裝 GKE 外掛程式