請參閱本指南,將工作負載遷移至 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 支援kubectl
和kn
指令。 瞭解如何安裝kn
事前準備
- 您必須有權存取新的 GKE 叢集。
- 您可以在相同或新的 Google Cloud 專案中建立新叢集。
- 叢集必須符合 Knative 需求。
- 瞭解如何建立叢集:
- 您必須手動將所有叢集設定移植到新的 Knative 叢集,包括但不限於:
- 您必須建立及設定新的 IAM 和 RBAC 存取權控管:
在 Google Kubernetes Engine 上安裝 Knative
Knative 提供多種安裝選項和網路層,您可以選擇使用。下列 Knative 安裝步驟使用 Knative Operator 方法和 Istio 網路層。
安裝 Knative Operator:
將 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
將
kubectl
CLI 設為使用default
命名空間:kubectl config set-context --current --namespace=default
確認是否已成功建立運算子:
kubectl get deployment knative-operator
結果:
NAME READY UP-TO-DATE AVAILABLE AGE knative-operator 1/1 1 1 6m43s
安裝 Knative Serving 元件:
建立 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
將 YAML 檔案部署至叢集:
kubectl apply -f SERVING_FILENAME.yaml
將 SERVING_FILENAME 替換成您建立的 YAML 檔案。
安裝 Istio,並將補充植入功能設為網路層:
您可以選擇執行及設定替代的 Istio 安裝作業。如要查看所有 Istio 安裝選項,請前往 Knative 網站。請注意,這項安裝作業可能需要 30 分鐘以上。
執行下列指令並加上
--set hub=gcr.io/istio-release
旗標,即可安裝 Istio,避免 Docker 速率限制:istioctl install --set hub=gcr.io/istio-release
執行下列指令,啟用 Sidecar 插入功能:
kubectl label namespace default istio-injection=enabled
選用:根據預設,Istio 會安裝在
istio-system
命名空間中。 如要設定其他命名空間,請按照下列步驟操作:如要為 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
- LOCAL_GATEWAY_NAMESPACE 是您安裝 Knative Serving 的命名空間。預設值:
將更新後的 SERVING_FILENAME.yaml 服務部署至 Knative 叢集:
kubectl apply -f SERVING_FILENAME.yaml
確認
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 叢集。
執行下列指令,將 Knative 服務服務匯出至本機 YAML 檔案:
gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
取代:
SERVICE
改為您的 Knative serving 服務名稱。NAMESPACE
改為服務執行的命名空間。CLUSTER
改為執行服務的叢集名稱。FILENAME
,並選擇不重複的檔案名稱。
修改匯出的
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: {} ...
將修改後的
.yaml
檔案部署至 Knative 叢集:kubectl apply -f SERVICE.yaml
將 SERVICE 改為服務設定檔的名稱。
使用測試網域或
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 記錄。請按照「設定自訂網域」一文中的說明操作。