本文档介绍了如何配置在 Google Kubernetes Engine (GKE) 上运行的 Knative serving,以使用 GKE Sandbox 提高工作负载与主机内核的隔离性。
将 GKE Sandbox 节点池添加到现有 Knative serving 集群
按照相应步骤将启用了 GKE Sandbox 的节点池添加到现有 Knative serving 集群。这是您选择使用 GKE Sandbox 的工作负载运行的位置。
在 GKE Sandbox 节点池上部署工作负载
拥有启用了 GKE Sandbox 节点池的 GKE 集群后,请更新 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 中运行的 Service
启用运行时类功能标志后,您可以创建在规范中指定 runtimeClassName
的 Service。将 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