このドキュメントでは、ホストカーネルからのワークロード分離を改善するために、GKE Sandbox を使用するように Google Kubernetes Engine(GKE)で実行される Knative serving を構成する方法について説明します。
既存の Knative serving クラスタに GKE Sandbox ノードプールを追加する
既存の Knative serving クラスタに、GKE Sandbox の使用を有効にしたノードプールを追加します。ここでは、GKE Sandbox を使用するようにオプトインしたワークロードが実行されます。
GKE Sandbox ノードプールにワークロードをデプロイする
GKE クラスタに GKE Sandbox が有効になっているノードプールを追加したら、Knative serving の構成を更新します。また、新しいノードを使用するようにサービス仕様を更新します。これらの更新は 1 回だけ行う必要があります。
runtime クラスのフィーチャー トグルを有効にする
このセクションでは、knative-serving
Namespace の config-features
ConfigMap で Knative 機能と拡張機能フラグを使用して、Kubernetes runtime クラスを有効にします。runtime クラスを有効にするには、ConfigMap フラグ kubernetes.podspec-runtimeclassname
を enabled
に設定します。詳しくは、Knative の機能と拡張機能で Kubernetes runtime クラスとフラグを構成するをご覧ください。
config-features
ConfigMap を開いて編集します。kubectl edit configmap config-features -n knative-serving
data
フィールドにkubernetes.podspec-runtimeclassname: enabled
フィーチャー トグルを追加します。前述の手順の代わりに、次のコマンドを実行して、このフラグを 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 をデプロイする
runtime クラス フィーチャー トグルを有効にした後、仕様で runtimeClassName
を指定する Service を作成できます。サービスを GKE Sandbox ノードプールで実行する必要があることを示すには、runtimeClassName
を gvisor
に設定します。
次のコマンドを実行して、「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 runtime クラス名機能が有効になっている場合、コマンドはエラーなしで終了します。
次のコマンドを実行して、実行中のサービスの Pod と構成された runtime クラスを取得します。
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