Questo documento descrive come configurare Knative serving in esecuzione su Google Kubernetes Engine (GKE) per utilizzare GKE Sandbox per un migliore isolamento dei carichi di lavoro dal kernel host.
Obiettivi
- Scopri come abilitare GKE Sandbox sul cluster Knative serving.
- Esegui il deployment di un servizio specificato per l'esecuzione su nodi con sandbox.
Costi
In questo documento vengono utilizzati 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 installato e configurato sul cluster.
- Assicurati che l'ambiente a riga di comando sia configurato e che gli strumenti siano aggiornati:
Aggiungi un pool di nodi GKE Sandbox a un cluster Knative serving esistente
Segui i passaggi per aggiungere un pool di nodi abilitato all'utilizzo di GKE Sandbox al cluster Knative serving esistente. È qui che vengono eseguiti i carichi di lavoro per cui 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 a GKE Sandbox, aggiorna la configurazione di Knative serving. Inoltre, aggiorna ogni specifica del servizio per utilizzare i nuovi nodi. Questi aggiornamenti sono necessari una sola volta.
Abilita il flag funzionalità della classe di runtime
In questa sezione, abiliti la classe di runtime Kubernetes utilizzando i flag delle funzionalità e delle estensioni di Knative nel ConfigMap config-features nello spazio dei nomi knative-serving. Per abilitare la classe di runtime, imposta il flag ConfigMap kubernetes.podspec-runtimeclassname su enabled. Per ulteriori informazioni,
consulta la sezione Classe di runtime
Kubernetes
e Configurazione dei
flag
nella documentazione Funzionalità ed
estensioni
di Knative.
Apri il ConfigMap
config-featuresper la modifica:kubectl edit configmap config-features -n knative-servingAggiungi il flag funzionalità
kubernetes.podspec-runtimeclassname: enabledal campodata.In alternativa ai passaggi precedenti, puoi eseguire il seguente comando per applicare la patch a questo flag nelle funzionalità di Knative:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-servingPer verificare le modifiche, esegui il seguente comando per visualizzare il ConfigMap:
kubectl get configmap config-features -n knative-serving -o yamlIl 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 abilitato 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" EOFSe la funzionalità del nome della classe di runtime Kubernetes è abilitata, il comando dovrebbe essere completato senza errori.
Recupera i pod per il servizio in esecuzione e la classe di runtime configurata eseguendo:
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 che puoi eseguire il deployment di app non attendibili nel pool di nodi GKE Sandbox appena creato, puoi aggiungere runtimeClassName: gvisor alle specifiche di Kubernetes per altri servizi non attendibili che vuoi eseguire nei node pool GKE Sandbox.
Letture aggiuntive:
- Documentazione di GKE Sandbox per comprendere le limitazioni che potrebbero interrompere la compatibilità con alcuni servizi.
- Documentazione di gVisor sul deployment dei servizi Knative per una guida più dettagliata al deployment delle app Knative su gVisor (chiamato anche GKE Sandbox).