將 Knative Serving 服務遷移至 Cloud Run

請參閱本指南,將工作負載遷移至 Cloud Run。一般來說,遷移工作負載時,您需要移植所有 Kubernetes 相關功能,然後將現有服務重新部署至 Cloud Run。

遷移至 Cloud Run 的主要優點:

  • 全代管無伺服器產品,可實作 Knative Serving API 規格,並遵守容器合約。

  • Cloud Run 的 v1 Admin API 旨在盡可能提高與 Knative 服務的攜帶性。

  • Cloud Run 和 Knative Serving 的使用者體驗類似:

    • 這兩個產品都使用 gcloud run 指令群組。
    • Google Cloud 控制台中的使用者介面版面配置和行為類似。

事前準備

Cloud Run 不支援下列 Google Kubernetes Engine 功能:

遷移注意事項

請務必詳閱並瞭解下列產品差異,確保能轉移所有依附元件和需求。

密鑰

在 Cloud Run 中,您可以選擇將密鑰掛接為環境變數或磁碟區,但含有機密資訊的密鑰應儲存在 Secret Manager 中。

Secret Manager 中的密鑰Kubernetes 密鑰的重要差異:

功能 Secret Manager 密鑰 Kubernetes Secret
名稱中可用的字元 [a-zA-Z0-9_-]{1,255} [a-z0-9-.]{1,253}
版本管理 密鑰會進行版本控管 不支援
Secret Payload 單曲〈[]byte 地圖:<string, string>

瞭解如何使用 Secret Manager,為 Knative 服務的密鑰建立版本化密鑰

網路

請使用下列資訊,將現有網路設定移植到 Cloud Run。

服務端點
Cloud Run 不支援 Knative 服務的 Kubernetes 端點。進一步瞭解 Cloud Run 中的專屬端點
網域對應
Cloud Run DomainMapping API 與 Knative 服務相容。不過,Cloud Run 僅在部分Cloud Run 地理位置提供網域對應功能。建議改用全域 HTTP(S) 負載平衡器,為自訂網域提供服務。
虛擬私人雲端連線能力
Cloud Run 服務位於虛擬私有雲外部。如要與虛擬私有雲中的資源通訊,請使用無伺服器虛擬私有雲存取連接器
輸入控管
如果 Knative 服務服務已設定為使用私人內部網路,並使用內部負載平衡器 (ILB),您可以將 Cloud Run 服務設定為Ingress = Internal。將服務設定為 internal,可限制存取權,僅限於虛擬私有雲或其他 Cloud Run 服務。進一步瞭解服務間的通訊

遷移服務

如要遷移服務,您必須匯出 Knative Serving 服務、編輯匯出的 YAML 檔案,然後將重新設定的服務部署至 Cloud Run。

  1. 執行下列指令,將 Knative 服務服務匯出至本機 YAML 檔案:

    gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
    

    取代:

    • SERVICE 改為您的 Knative serving 服務名稱。
    • NAMESPACE 改為服務執行的命名空間。
    • CLUSTER 改為執行服務的叢集名稱。
    • FILENAME,並選擇不重複的檔案名稱。
  2. 修改匯出的 Cloud Run FILENAME.yaml 檔案:

    • 您必須搜尋並將 Kubernetes 命名空間替換為Google Cloud 專案的 ID。舉例來說,您必須將 namespace:default 替換為 namespace:my-unique-id
    • 您必須更新所有不支援的功能設定。
    • 您必須刪除下列任一屬性及其值:

      • metadata.annotations.kubectl.kubernetes.io/last-applied-configuration
      • metadata.managedFields
      • spec.template.spec.containers.readinessProbes
      • spec.template.spec.enableServiceLinks

      舉例來說,您可能需要從 spec: > template: > spec: > containers: 屬性中移除下列設定:

      ...
       readinessProbe:
         successThreshold: 1
         tcpSocket: {}
      ...
      
  3. 使用 --platform managed 旗標,將修改後的 .yaml 檔案部署至 Cloud Run。進一步瞭解如何部署

    請注意,您可以將 Cloud Run 設為同一個 Google Cloud 專案。

    gcloud run services replace FILENAME.yaml --platform managed --region REGION
    

    取代:

  4. 設定 Cloud Run 服務的存取權:

    • 根據預設,Cloud Run 服務無法從外部存取。如要向網際網路公開服務,並允許未經驗證的要求,請允許公開 (未經驗證) 存取

    • 如要設定這項服務,僅允許私人內部存取 (例如在 Cloud Run 服務之間),請參閱「服務對服務驗證」。

  5. 在 Google Cloud 控制台的服務頁面中,按一下畫面顯示的網址連結,即可開啟您所部署服務的穩定專屬端點。

    前往 Cloud Run

將流量遷移至服務

測試新部署的服務後,即可準備遷移所有正式版流量,這時請設定自訂網域,並向註冊商更新 DNS 記錄。請按照對應自訂網域中的指示操作。