Questo documento descrive come configurare il servizio Knative in esecuzione su Google Kubernetes Engine (GKE) in modo da utilizzare GKE Sandbox per migliorare l'isolamento del carico di lavoro dal kernel host.
Obiettivi
- Scopri come abilitare GKE Sandbox nel tuo cluster Knative serving.
- Esegui il deployment di un servizio specificato per l'esecuzione su nodi con limitazione tramite sandbox.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
- Questo tutorial presuppone che tu abbia installato e configurato Knative serving sul tuo cluster.
- Assicurati che l'ambiente a riga di comando sia configurato e che gli strumenti siano aggiornati:
Aggiungi il pool di nodi GKE Sandbox a un cluster di servizi Knative esistente
Segui i passaggi per aggiungere un pool di nodi abilitato all'utilizzo della sandbox GKE al tuo cluster di servizi Knative esistente. Qui vengono eseguiti i carichi di lavoro per i quali hai attivato l'utilizzo di GKE Sandbox.
Esegui il deployment di un carico di lavoro nel pool di nodi GKE Sandbox
Dopo aver creato un cluster GKE con un node pool abilitato per GKE Sandbox, aggiorna la configurazione di Knative serving. Aggiorna inoltre ogni specifica del servizio per utilizzare i nuovi nodi. Questi aggiornamenti sono obbligatori solo una volta.
Attivare il flag funzionalità della classe di runtime
In questa sezione, attivi la classe di runtime Kubernetes utilizzando i flag di funzionalità ed estensione Knative nel ConfigMap config-features
nello spazio dei nomi knative-serving
. Per attivare la classe di runtime, imposta il flag ConfigMap kubernetes.podspec-runtimeclassname
su enabled
. Per ulteriori informazioni, consulta la classe di runtime Kubernetes e la sezione Configurazione dei flag nella documentazione relativa a Funzionalità ed estensioni di Knative.
Apri il ConfigMap
config-features
per la modifica:kubectl edit configmap config-features -n knative-serving
Aggiungi il flag funzionalità
kubernetes.podspec-runtimeclassname: enabled
aldata
campo.In alternativa ai passaggi precedenti, puoi eseguire il seguente comando per applicare la patch a questo flag nelle funzionalità Knative:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-serving
Per verificare le modifiche, esegui il seguente comando per visualizzare il ConfigMap:
kubectl get configmap config-features -n knative-serving -o yaml
Il ConfigMap dovrebbe essere simile al seguente:
apiVersion: v1 kind: ConfigMap metadata: name: config-features namespace: knative-serving labels: serving.knative.dev/release: v0.22.0 data: kubernetes.podspec-runtimeclassname: enabled
Esegui il deployment di un servizio configurato per l'esecuzione in GKE Sandbox
Dopo aver attivato il flag funzionalità della classe di runtime, puoi creare servizi
che specificano un runtimeClassName
nella specifica. Imposta runtimeClassName
su
gvisor
per indicare che un servizio deve essere eseguito nel pool di nodi GKE Sandbox.
Esegui il deployment di un'applicazione Knative "Hello World" eseguendo il seguente comando:
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
Se la funzionalità del nome della classe di runtime Kubernetes è abilitata, il comando dovrebbe terminare senza errori.
Per avviare i pod per il tuo servizio e la relativa classe di runtime configurata, esegui:
kubectl get pods \ -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
L'output dovrebbe essere simile al seguente:
NAME RUNTIME CLASS STATUS helloworld-go-00001-deployment-55f58477f-fxm6m gvisor Running
Passaggi successivi
Dopo aver verificato di poter eseguire il deployment di app non attendibili nel pool di nodi GKE Sandbox appena creato, puoi aggiungere runtimeClassName: gvisor
alle specifiche Kubernetes per altri servizi non attendibili che vuoi eseguire nei pool di nodi GKE Sandbox.
Letture aggiuntive:
- Documentazione di GKE Sandbox per comprendere le limitazioni che potrebbero compromettere la compatibilità con alcuni servizi.
- Documentazione di gVisor sul deployment dei servizi Knative per una guida più dettagliata sul deployment delle app Knative su gVisor (chiamata anche GKE Sandbox).