將工作負載遷移至 Knative OSS

請參閱本指南,將工作負載遷移至 Google Kubernetes Engine,並在開放原始碼 Knative 產品上執行。一般來說,如要遷移工作負載,您需要在新的 GKE 叢集中安裝 Knative Serving 元件,然後將各項服務重新部署至該 Knative 叢集。

使用、管理及支援開放原始碼 Knative 由您自行決定並負責,但遷移至 Knative 後,您就能繼續在 Google Kubernetes Engine 平台上執行工作負載。

重要差異:

  • 支援服務僅限於 Google Kubernetes Engine。如需 Knative 支援服務,請與 Knative 社群聯絡。
  • Google Kubernetes Engine 僅支援 Google Cloud CLI (gcloud)。Knative 支援 kubectlkn 指令。 瞭解如何安裝 kn

事前準備

在 Google Kubernetes Engine 上安裝 Knative

Knative 提供多種安裝選項和網路層,您可以選擇使用。下列 Knative 安裝步驟使用 Knative Operator 方法Istio 網路層

  1. 安裝 Knative Operator:

    1. 將 Operator 部署至叢集:

      kubectl apply -f https://github.com/knative/operator/releases/download/knative-vVERSION/operator.yaml
      

      VERSION 替換為 Knative Operator 版本

      範例:

      kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.3.1/operator.yaml
      
    2. kubectl CLI 設為使用 default 命名空間:

      kubectl config set-context --current --namespace=default
      
    3. 確認是否已成功建立運算子:

      kubectl get deployment knative-operator
      

      結果:

      NAME               READY   UP-TO-DATE   AVAILABLE   AGE
      knative-operator   1/1     1            1           6m43s
      
  2. 安裝 Knative Serving 元件:

    1. 建立 YAML 檔案,例如 SERVING_FILENAME.yaml,並加入下列內容:

      apiVersion: v1
      kind: Namespace
      metadata:
        name: knative-serving
      ---
      apiVersion: operator.knative.dev/v1alpha1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
      
    2. 將 YAML 檔案部署至叢集:

      kubectl apply -f SERVING_FILENAME.yaml
      

      SERVING_FILENAME 替換成您建立的 YAML 檔案。

  3. 安裝 Istio,並將補充植入功能設為網路層:

    您可以選擇執行及設定替代的 Istio 安裝作業。如要查看所有 Istio 安裝選項,請前往 Knative 網站。請注意,這項安裝作業可能需要 30 分鐘以上。

    1. 從發布頁面下載 Istio

    2. 執行下列指令並加上 --set hub=gcr.io/istio-release 旗標,即可安裝 Istio,避免 Docker 速率限制

      istioctl install --set hub=gcr.io/istio-release
      
    3. 執行下列指令,啟用 Sidecar 插入功能:

      kubectl label namespace default istio-injection=enabled
      
    4. 選用:根據預設,Istio 會安裝在 istio-system 命名空間中。 如要設定其他命名空間,請按照下列步驟操作:

      1. 如要為 Istio 設定自訂命名空間,請將 spec.config.istio 屬性附加至 SERVING_FILENAME.yaml 設定檔。例如:

        apiVersion: operator.knative.dev/v1alpha1
        kind: KnativeServing
        metadata:
          name: knative-serving
          namespace: knative-serving
        spec:
          # ...
          config:
            istio:
              local-gateway.LOCAL_GATEWAY_NAMESPACE.knative-local-gateway: "knative-local-gateway.ISTIO_NAMESPACE.svc.cluster.local"
        

        取代:

        • LOCAL_GATEWAY_NAMESPACE 是您安裝 Knative Serving 的命名空間。預設值:knative-serving
        • ISTIO_NAMESPACE 是安裝 Istio 的命名空間。預設值:istio-system
      2. 將更新後的 SERVING_FILENAME.yaml 服務部署至 Knative 叢集:

        kubectl apply -f SERVING_FILENAME.yaml
        
      3. 確認 istio-ingressgateway 是否位於指定命名空間,藉此驗證 Istio 安裝狀態:

        kubectl get svc istio-ingressgateway -n ISTIO_NAMESPACE
        

        ISTIO_NAMESPACE 替換為安裝 Istio 的命名空間。預設值:istio-system

        結果:

        NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                                      AGE
        istio-ingressgateway   LoadBalancer   10.232.10.190   34.123.5.116   15021:30337/TCP,80:32549/TCP,443:31210/TCP   119m
        

遷移服務

如要遷移服務,請將服務的 YAML 設定檔部署至 Knative 叢集。

  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. 修改匯出的 FILENAME.yaml 檔案,刪除下列任一屬性及其值,即可移除不想要的 Knative 服務設定:

    • 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. 將修改後的 .yaml 檔案部署至 Knative 叢集:

    kubectl apply -f SERVICE.yaml
    

    SERVICE 改為服務設定檔的名稱。

  4. 使用測試網域或 cURL 指令存取已部署的服務。您可以使用萬用字元 DNS 服務,測試外部存取服務。如要瞭解更多選項,請參閱 Knative 說明文件中的設定 DNS 一節。

    如要使用 Magic DNS (sslip.io),請執行下列指令。

    請注意,您也可以直接使用 sslip.io

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-vVERSION/serving-default-domain.yaml
    

    VERSION 替換為Knative Serving 版本

    範例:

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.3.0/serving-default-domain.yaml
    

將流量遷移至服務

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