本文說明如何設定在 Google Kubernetes Engine (GKE) 上執行的 Knative 服務,以使用 GKE Sandbox,進一步將工作負載與主機核心隔離。
將 GKE Sandbox 節點集區新增至現有的 Knative 服務叢集
請按照這些步驟,將啟用 GKE Sandbox 的節點集區新增至現有的 Knative Serving 叢集。您選擇使用 GKE Sandbox 的工作負載會在此執行。
在 GKE Sandbox 節點集區中部署工作負載
建立啟用 GKE Sandbox 的節點集區後,請更新 Knative Serving 設定。此外,請更新每個服務規格,以使用新節點。這些更新只需要執行一次。
啟用執行階段類別功能旗標
在本節中,您將在 knative-serving
命名空間的 config-features
ConfigMap 中,使用 Knative 功能和擴充功能標記啟用 Kubernetes 執行階段類別。如要啟用執行階段類別,請將 ConfigMap 旗標 kubernetes.podspec-runtimeclassname
設為 enabled
。詳情請參閱 Knative 功能和擴充功能說明文件中的「Kubernetes 執行階段類別」和「設定標記」。
開啟
config-features
ConfigMap 進行編輯:kubectl edit configmap config-features -n knative-serving
將
kubernetes.podspec-runtimeclassname: enabled
功能標記新增至data
欄位。除了上述步驟,您也可以執行下列指令,將這個標記修補到 Knative 功能中:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-serving
如要驗證編輯內容,請執行下列指令來查看 ConfigMap:
kubectl get configmap config-features -n knative-serving -o yaml
ConfigMap 應如下所示:
apiVersion: v1 kind: ConfigMap metadata: name: config-features namespace: knative-serving labels: serving.knative.dev/release: v0.22.0 data: kubernetes.podspec-runtimeclassname: enabled
部署設定為在 GKE Sandbox 中執行的服務
啟用執行階段類別功能旗標後,您就能建立在規格中指定 runtimeClassName
的服務。將 runtimeClassName
設為 gvisor
,表示服務應在 GKE Sandbox 節點集區中執行。
執行下列指令,部署「Hello World」Knative 應用程式:
cat <<EOF | kubectl apply -f - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: runtimeClassName: gvisor containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: "gVisor User" EOF
如果已啟用 Kubernetes 執行階段類別名稱功能,這項指令應會順利完成,不會發生錯誤。
執行下列指令,取得服務執行的 Pod 和設定的執行階段類別:
kubectl get pods \ -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
輸出應會如下所示:
NAME RUNTIME CLASS STATUS helloworld-go-00001-deployment-55f58477f-fxm6m gvisor Running