Questo tutorial mostra anche come combinare kpt con altre soluzioni Google come Config Sync e i progetti per la sicurezza di GKE Enterprise. Che tu sia uno sviluppatore che lavora con Kubernetes o un Platform engineer che gestisce una piattaforma basata su Kubernetes, questo tutorial ti consente di scoprire come puoi usare kpt nei tuoi flussi di lavoro relativi a Kubernetes. Questo tutorial presuppone che tu conosca Kubernetes e Google Cloud.
La configurazione dichiarativa per l'infrastruttura cloud è una pratica consolidata nel settore IT. Offre una potente astrazione dei sistemi sottostanti. Questa astrazione ti evita di dover gestire dettagli e dipendenze di configurazione di basso livello. Pertanto, la configurazione dichiarativa presenta un vantaggio rispetto agli approcci imperativi, come le operazioni eseguite nelle interfacce grafiche e a riga di comando.
Il modello di risorse di Kubernetes è stato influente nel rendere mainstream gli approcci alla configurazione dichiarativa. Poiché l'API Kubernetes è completamente dichiarativa per natura, indichi a Kubernetes solo ciò che vuoi, non come ottenere ciò che vuoi. L'API Kubernetes ti consente di separare in modo chiaro la configurazione (che sia desiderata o reale) dalle operazioni sulla configurazione (aggiunta, rimozione e modifica degli oggetti). In altre parole, nel modello di risorse di Kubernetes, la configurazione è costituita da dati e non da codice.
Questa separazione della configurazione dalle operazioni presenta molti vantaggi: le persone e i sistemi automatizzati possono comprendere e lavorare alla configurazione, mentre il software che modifica la configurazione è facilmente riutilizzabile. Questa separazione consente inoltre di implementare facilmente una metodologia GitOps (come definita nel tutorial sulla distribuzione continua stile GitOps con Cloud Build).
In questo tutorial vedrai questa separazione tra la dichiarazione di configurazione e le operazioni di configurazione utilizzando kpt. Questo tutorial evidenzia le seguenti caratteristiche di kpt:
- Gestione dei pacchetti: scaricare e aggiornare i pacchetti di configurazione di Kubernetes.
- Funzioni: esegui parti di codice arbitrarie per modificare o convalidare le tue configurazioni.
- Pipeline delle funzioni: un insieme di funzioni che l'autore del pacchetto ha incluso nel pacchetto.
- Gestione delle risorse: applica, aggiorna ed elimina le risorse corrispondenti alle tue configurazioni in un cluster Kubernetes.
Obiettivi
- Creare un cluster Google Kubernetes Engine (GKE).
- Utilizza kpt per scaricare un insieme esistente di configurazioni Kubernetes.
- Utilizza le funzioni kpt per personalizzare le configurazioni.
- Applica la tua configurazione al cluster GKE.
- Utilizza kpt per eseguire il pull di alcune modifiche upstream per la tua configurazione.
- Utilizza kpt in uno scenario reale per proteggere il tuo cluster GKE.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- Google Kubernetes Engine
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Nella console Google Cloud, attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.
Configura Cloud Shell per utilizzare il tuo progetto:
gcloud config set project PROJECT_ID
-
In Cloud Shell, abilita le API Google Kubernetes Engine e Cloud Source Repositories:
gcloud services enable container.googleapis.com \ sourcerepo.googleapis.com
Al termine di questo tutorial, puoi evitare di continuare la fatturazione eliminando le risorse che hai creato. Per maggiori dettagli, consulta Pulizia.
Crea un cluster GKE
In questa sezione creerai il cluster GKE in cui eseguirai il deployment delle configurazioni nel tutorial.
In Cloud Shell, crea un cluster GKE:
gcloud container clusters create kpt-tutorial \ --num-nodes=1 --machine-type=n1-standard-4 \ --zone=us-central1-a --enable-network-policy
Verifica di avere accesso al cluster. Il seguente comando restituisce informazioni sul nodo o sui nodi che si trovano nel cluster.
kubectl get nodes
Applicazione di un pacchetto kpt
In questa sezione utilizzerai kpt per scaricare un insieme di configurazioni, personalizzarle e applicarle al cluster che hai creato nella sezione precedente.
kpt
deve essere installato nel tuo ambiente Cloud Shell. In caso contrario, installalo con i seguenti comandi:
In Cloud Shell, installa kpt:
sudo apt update && sudo apt-get install google-cloud-sdk-kpt
Scarica un insieme di configurazioni di esempio. Per maggiori informazioni, consulta
kpt pkg get
.kpt pkg get https://github.com/GoogleContainerTools/kpt.git/package-examples/wordpress@v0.9
Il comando precedente scarica il pacchetto di esempio
wordpress
disponibile nel repository GitHub kpt, con la versione taggatav0.9
.Esamina i contenuti del pacchetto:
kpt pkg tree
.kpt pkg tree wordpress
L'output sarà simile al seguente:
Package "wordpress" ├── [Kptfile] Kptfile wordpress ├── [service.yaml] Service wordpress ├── deployment │ ├── [deployment.yaml] Deployment wordpress │ └── [volume.yaml] PersistentVolumeClaim wp-pv-claim └── Package "mysql" ├── [Kptfile] Kptfile mysql ├── [deployment.yaml] PersistentVolumeClaim mysql-pv-claim ├── [deployment.yaml] Deployment wordpress-mysql └── [deployment.yaml] Service wordpress-mysql
Il pacchetto contiene due pacchetti:
wordpress
e un sottopacchettowordpress/mysql
, entrambi contengono un file di metadatiKptfile
.Kptfile
viene utilizzato solo da kpt stesso e dispone di dati sull'origine, sulla personalizzazione e sulla convalida a monte del pacchettoAggiorna l'etichetta del pacchetto
L'autore del pacchetto ha aggiunto una pipeline di rendering, che viene spesso utilizzata per trasmettere le personalizzazioni previste.
less wordpress/Kptfile
I contenuti dovrebbero avere il seguente aspetto:
apiVersion: kpt.dev/v1 kind: Kptfile metadata: name: wordpress upstream: type: git git: repo: https://github.com/GoogleContainerTools/kpt directory: /package-examples/wordpress ref: v0.9 updateStrategy: resource-merge upstreamLock: type: git git: repo: https://github.com/GoogleContainerTools/kpt directory: /package-examples/wordpress ref: package-examples/wordpress/v0.9 commit: b9ea0bca019dafa9f9f91fd428385597c708518c info: emails: - kpt-team@google.com description: This is an example wordpress package with mysql subpackage. pipeline: mutators: - image: gcr.io/kpt-fn/set-labels:v0.1 configMap: app: wordpress validators: - image: gcr.io/kpt-fn/kubeval:v0.3
Puoi usare il tuo editor preferito per modificare i parametri della funzione set-label da
app: wordpress
aapp: my-wordpress
Modifica il deployment MySQL
wordpress/mysql/deployment.yaml
utilizzando il tuo editor di codice preferito per cambiare la versione MySQL. Inoltre, per rafforzare ulteriormente la sicurezza, cambia la variabileMYSQL_ROOT_PASSWORD
inMYSQL_PASSWORD
e aggiungi le seguenti variabili:MYSQL_USER
MYSQL_RANDOM_ROOT_PASSWORD
MYSQL_DATABASE
Prima del:
[...] containers: - name: mysql image: mysql:5.6 ports: - name: mysql protocol: TCP containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password [...]
Dopo il:
[...] containers: - name: mysql image: mysql:8.0 ports: - name: mysql protocol: TCP containerPort: 3306 env: - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password - name: MYSQL_RANDOM_ROOT_PASSWORD value: '1' - name: MYSQL_USER value: wordpress - name: MYSQL_DATABASE value: wordpress [...]
Modifica il deployment di Wordpress
wordpress/deployment/deployment.yaml
utilizzando il tuo editor di codice preferito per cambiare la versione di Wordpress e aggiungere una variabileWORDPRESS_DB_USER
.Prima del:
[...] containers: - name: wordpress image: wordpress:6.1-apache ports: - name: wordpress protocol: TCP containerPort: 80 env: - name: WORDPRESS_DB_HOST value: wordpress-mysql - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password [...]
Dopo il:
[...] containers: - name: wordpress image: wordpress:4.8-apache ports: - name: wordpress protocol: TCP containerPort: 80 env: - name: WORDPRESS_DB_HOST value: wordpress-mysql - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password - name: WORDPRESS_DB_USER value: wordpress [...]
A differenza degli strumenti che operano solo tramite parametri, kpt consente di modificare i file esistenti utilizzando un editor per poi unire gli aggiornamenti upstream. Puoi modificare direttamente
deployment.yaml
senza dover creare una patch o creare una funzione nella pipeline.Annota la configurazione con
sample-annotation: sample-value
.kpt fn eval wordpress --image gcr.io/kpt-fn/set-annotations:v0.1 \ -- sample-annotation=sample-value
L'output dovrebbe essere simile al seguente:
[RUNNING] "gcr.io/kpt-fn/set-annotations:v0.1" [PASS] "gcr.io/kpt-fn/set-annotations:v0.1"
Per visualizzare la nuova annotazione, puoi esaminare qualsiasi valore di configurazione. Puoi vedere
wordpress/service.yaml
In questo esempio abbiamo eseguito una personalizzazione utilizzando una funzione in un modo non previsto dall'autore del pacchetto. kpt è in grado di supportare l'esecuzione di funzioni dichiarative e imperative per consentire un'ampia gamma di scenari.
Se il pacchetto è stato sviluppato utilizzando Infrastructure as Code, dobbiamo andare al codice sorgente del pacchetto e modificare il codice.
Esegui la pipeline e convalida le modifiche utilizzando kubeval tramite kpt.
kpt fn render wordpress
L'autore del pacchetto ha incluso un passaggio di convalida nella pipeline:
... validators: - image: gcr.io/kpt-fn/kubeval:v0.3
L'output riuscito di questa pipeline di rendering ha il seguente aspetto:
Package "wordpress/mysql": [RUNNING] "gcr.io/kpt-fn/set-labels:v0.1" [PASS] "gcr.io/kpt-fn/set-labels:v0.1" in 1.3s Package "wordpress": [RUNNING] "gcr.io/kpt-fn/set-labels:v0.1" [PASS] "gcr.io/kpt-fn/set-labels:v0.1" in 1.3s [RUNNING] "gcr.io/kpt-fn/kubeval:v0.3" [PASS] "gcr.io/kpt-fn/kubeval:v0.3" in 3.7s Successfully executed 3 function(s) in 2 package(s).
Questo passaggio è un esempio dei vantaggi del modello di risorse Kubernetes: poiché le tue configurazioni sono rappresentate in questo modello molto noto, puoi utilizzare gli strumenti Kubernetes esistenti come kubeval.
Esamina le differenze tra la versione locale delle configurazioni e la configurazione upstream:
kpt pkg diff wordpress
Inizializza il pacchetto per il deployment:
kpt live init wordpress
Il comando precedente crea un inventario delle configurazioni presenti nel pacchetto. Tra le altre cose, kpt utilizza l'inventario per eliminare le configurazioni quando le rimuovi dal pacchetto. Per saperne di più, consulta
kpt live
.Crea un secret contenente la password MySQL:
kubectl create secret generic mysql-pass --from-literal=password=foobar
Applica le configurazioni al tuo cluster GKE:
kpt live apply wordpress
L'output sarà simile al seguente:
installing inventory ResourceGroup CRD. inventory update started inventory update finished apply phase started service/wordpress apply successful service/wordpress-mysql apply successful deployment.apps/wordpress apply successful deployment.apps/wordpress-mysql apply successful persistentvolumeclaim/mysql-pv-claim apply successful persistentvolumeclaim/wp-pv-claim apply successful apply phase finished reconcile phase started service/wordpress reconcile successful service/wordpress-mysql reconcile successful deployment.apps/wordpress reconcile pending deployment.apps/wordpress-mysql reconcile pending persistentvolumeclaim/mysql-pv-claim reconcile pending persistentvolumeclaim/wp-pv-claim reconcile pending persistentvolumeclaim/wp-pv-claim reconcile successful persistentvolumeclaim/mysql-pv-claim reconcile successful deployment.apps/wordpress-mysql reconcile successful deployment.apps/wordpress reconcile successful reconcile phase finished inventory update started inventory update finished apply result: 6 attempted, 6 successful, 0 skipped, 0 failed reconcile result: 6 attempted, 6 successful, 0 skipped, 0 failed, 0 timed out
Attendi qualche minuto, quindi verifica che tutto funzioni come previsto:
kpt live status wordpress
L'output sarà simile al seguente:
inventory-88521939/deployment.apps/default/wordpress is Current: Deployment is available. Replicas: 1 inventory-88521939/persistentvolumeclaim/default/wp-pv-claim is Current: PVC is Bound inventory-88521939/service/default/wordpress-mysql is Current: Service is ready inventory-88521939/persistentvolumeclaim/default/mysql-pv-claim is Current: PVC is Bound inventory-88521939/deployment.apps/default/wordpress-mysql is Current: Deployment is available. Replicas: 1 inventory-88521939/service/default/wordpress is Current: Service is ready
Aggiornamento del pacchetto locale in corso...
In questa sezione aggiorni la versione locale del pacchetto con alcune modifiche dal pacchetto upstream.
Creare un repository Git per le tue configurazioni e configurare la tua email e il tuo nome. Per aggiornare il pacchetto è necessario un repository Git locale. Sostituisci
YOUR_EMAIL
con il tuo indirizzo email e sostituisciYOUR_NAME
con il tuo nome.cd wordpress/ git init -b main git config user.email "YOUR_EMAIL" git config user.name "YOUR_NAME"
Esegui il commit delle configurazioni:
git add . git commit -m "First version of Wordpress package" cd ..
Aggiorna il pacchetto locale. In questo passaggio, eseguirai il pull della versione
v0.10
dall'upstream.kpt pkg update wordpress@v0.10
Tieni presente che gli aggiornamenti provenienti dall'upstream vengono applicati al tuo pacchetto locale:
cd wordpress/ git diff
In questo caso, l'aggiornamento ha modificato il volume di deployment di Wordpress da 3Gi a 4Gi. Puoi anche vedere le tue modifiche.
Esegui il commit delle modifiche:
git commit -am "Update to package version v0.10"
Applica la nuova versione del pacchetto:
kpt live apply .
Rimozione di una risorsa e di un pacchetto
Poiché kpt monitora le risorse che crea, può eliminare risorse dal cluster quando elimini risorse dal pacchetto. Può anche rimuovere completamente un pacchetto dal cluster. In questa sezione rimuoverai una risorsa dal pacchetto, quindi il pacchetto.
Rimuovi il file
service.yaml
dal pacchetto:git rm service.yaml git commit -m "Remove service"
Applica la modifica, quindi verifica che kpt abbia eliminato il servizio Wordpress:
kpt live apply . kubectl get svc
Rimuovi il resto del pacchetto dal cluster, quindi verifica che non sia rimasto nulla nel cluster:
kpt live destroy . kubectl get deployment
Utilizzo di kpt per proteggere GKE
Il comando kpt live
non è l'unico modo con cui puoi applicare un pacchetto a un cluster Kubernetes. In questa sezione utilizzerai kpt con Config Sync in uno scenario di base ma realistico. Lo strumento Config Sync consente di gestire la configurazione in modo centralizzato, uniforme e dichiarativo per tutti i cluster Kubernetes da un repository Git. GKE Enterprise (che utilizzerai in questo tutorial) include Config Sync.
I progetti per la sicurezza di GKE Enterprise forniscono una gamma di impostazioni di sicurezza predefinite per i carichi di lavoro basati su GKE Enterprise. In questa sezione, utilizzerai il progetto per la limitazione del traffico (e la sua directory nel repository GitHub).
Utilizza kpt per scaricare il pacchetto default-deny
. Il pacchetto utilizza i criteri di rete Kubernetes per negare tutto il traffico nel cluster GKE per impostazione predefinita (tranne per la risoluzione DNS). Per applicare le configurazioni, esegui il commit delle configurazioni nel repository Git di Config Sync.
Installa Config Sync
In questa sezione creerai il repository Git necessario a Config Sync e poi installerai Config Sync sul tuo cluster GKE.
In Cloud Shell, utilizza Cloud Source Repositories per creare un repository Git per Config Sync:
cd ~ gcloud source repos create config-management
Genera una coppia di chiavi SSH per l'autenticazione nel repository Git:
cd ~ ssh-keygen -t rsa -b 4096 -N '' \ -f cloud_source_repositories_key
Crea il secret di Kubernetes che contiene la chiave privata SSH per accedere al repository Git:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=ssh=cloud_source_repositories_key
Visualizza la chiave pubblica e copiala:
cat cloud_source_repositories_key.pub
Vai a Cloud Source Repositories
Nella finestra di dialogo Registra chiave SSH visualizzata, inserisci i seguenti valori:
- Nel campo Nome chiave, inserisci
config-management
. - Incolla la chiave pubblica nel campo Key (Chiave).
- Fai clic su Registrati.
- Nel campo Nome chiave, inserisci
Clona il repository Git in Cloud Shell:
gcloud source repos clone config-management cd config-management git checkout -b main
Scarica lo strumento a riga di comando di Config Sync denominato
nomos
.nomos
deve essere installato all'interno del tuo ambiente Cloud Shell. In caso contrario, installalo con i seguenti comandi:sudo apt update && sudo apt-get install google-cloud-sdk-nomos
Inizializza il repository Config Sync:
nomos init git add . git commit -m "Config Management directory structure" git push -u origin main
Esegui il deployment dell'operatore Config Sync:
gsutil cp gs://config-management-release/released/latest/config-management-operator.yaml /tmp/config-management-operator.yaml kubectl apply -f /tmp/config-management-operator.yaml
Configura Config Sync
Crea una risorsa personalizzata ConfigManagement per configurare Config Sync:
PROJECT=$(gcloud config get-value project) EMAIL=$(gcloud config get-value account) cat <<EOF > /tmp/config-management.yaml apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement metadata: name: config-management spec: clusterName: kpt-tutorial git: syncRepo: ssh://${EMAIL}@source.developers.google.com:2022/p/${PROJECT}/r/config-management syncBranch: main secretType: ssh EOF kubectl -n config-management-system \ apply -f /tmp/config-management.yaml
Per ulteriori opzioni di installazione, consulta la documentazione di Config Sync per l'installazione.
In Cloud Shell, verifica che Config Sync funzioni correttamente:
nomos status --contexts=$(kubectl config current-context)
Questo comando restituisce lo stato
SYNCED
. L'inizializzazione di Config Sync potrebbe richiedere un po' di tempo. Se lo stato non viene aggiornato, attendi qualche minuto ed esegui nuovamente il comando.
Applica il progetto di sicurezza di GKE Enterprise
In questa sezione utilizzerai kpt per scaricare il pacchetto default-deny
del progetto per la sicurezza di GKE Enterprise per il traffico limitato. Quindi puoi utilizzare Config Sync per applicare il pacchetto solo allo spazio dei nomi default
.
Scarica il pacchetto
default-deny
:cd ~ kpt pkg get https://github.com/GoogleCloudPlatform/anthos-security-blueprints.git/restricting-traffic/default-deny ./
Puoi esplorare il contenuto del pacchetto: il file
default-deny/Kptfile
contiene i metadati del pacchetto, mentre il filedefault-deny/default-deny.yaml
contiene un NetworkPolicy di Kubernetes, che è l'unica configurazione di questo progetto base.Utilizza kpt per copiare il contenuto del pacchetto nel repository Config Sync, quindi aggiungi etichette per personalizzarlo:
kpt fn source default-deny/ | \ kpt fn eval - --image=gcr.io/kpt-fn/set-annotations:v0.1 -- \ anthos-security-blueprint=restricting-traffic | \ kpt fn sink ~/config-management/namespaces/default/
Come mostrato in questo esempio, puoi utilizzare le barre verticali per concatenare i comandi
kpt fn
. La concatenazione dei comandikpt fn
consente di leggere le configurazioni, modificarle come preferisci e scrivere il risultato. Puoi concatenare tutti i comandikpt fn
che vuoi.Crea il file
namespace.yaml
nel repository Config Sync:cat >> ~/config-management/namespaces/default/namespace.yaml <<EOF apiVersion: v1 kind: Namespace metadata: name: default EOF
Lo spazio dei nomi
default
esiste nel tuo cluster GKE, ma Config Sync non lo gestisce. Quando crei la directory e il file in questo passaggio, Config Sync può gestire lo spazio dei nomi. Per applicare il pacchetto a più spazi dei nomi contemporaneamente, puoi creare uno spazio dei nomi astratto.Verifica che i criteri di rete Kubernetes siano stati scritti nel repository Config Sync e che siano annotati con
anthos-security-blueprint: restricting-traffic
:cat config-management/namespaces/default/default-deny.yaml
L'output sarà simile al seguente:
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: # kpt-merge: /default-deny name: default-deny annotations: internal.kpt.dev/upstream-identifier: 'networking.k8s.io|NetworkPolicy|default|default-deny' anthos-security-blueprint: restricting-traffic spec: policyTypes: - Ingress - Egress podSelector: {} egress: - to: - namespaceSelector: matchLabels: k8s-namespace: kube-system podSelector: matchExpressions: - key: k8s-app operator: In values: ["kube-dns", "node-local-dns"] ports: - protocol: TCP port: 53 - protocol: UDP port: 53
Esegui il commit delle modifiche ed eseguine il push:
cd ~/config-management/ git add namespaces/default/ git commit -m "Default deny" git push
Verifica che la nuova norma venga applicata:
kubectl get networkpolicies
Se il nuovo criterio non è presente, attendi qualche secondo ed esegui di nuovo il comando. Per impostazione predefinita, Config Sync aggiorna le configurazioni ogni 15 secondi. Se hai bisogno di ulteriori procedure di risoluzione dei problemi, esegui questo comando per ottenere informazioni su potenziali errori di Config Sync:
nomos status --contexts=$(kubectl config current-context)
Per testare il nuovo criterio, ottieni una shell in un pod in esecuzione all'interno dello spazio dei nomi
default
:kubectl -n default run -i --tty --rm test \ --image=busybox --restart=Never -- sh
Prova a inviare un ping a
8.8.8.8
e vedrai che non funziona, come previsto:ping -c 3 -W 1 8.8.8.8
L'output sarà simile al seguente:
PING 8.8.8.8 (8.8.8.8): 56 data bytes --- 8.8.8.8 ping statistics --- 3 packets transmitted, 0 packets received, 100% packet loss
Prova a eseguire una query sul server API Kubernetes e verifica che non funziona, come previsto:
wget --timeout=3 https://${KUBERNETES_SERVICE_HOST}
L'output sarà simile al seguente:
Connecting to 10.3.240.1 (10.3.240.1:443) wget: download timed out
Esci dal pod:
exit
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina le risorse
Se vuoi conservare il progetto Google Cloud che hai utilizzato in questo tutorial, puoi eliminare il repository Git e il cluster GKE. In Cloud Shell, esegui questi comandi:
gcloud source repos delete config-management --quiet
gcloud container clusters delete kpt-tutorial \
--async --quiet --zone=us-central1-a
Passaggi successivi
- Scopri di più su Config Sync e sui suoi componenti.
- Scopri di più su Policy Controller per convalidare la configurazione del deployment dell'applicazione.
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Visita il nostro Cloud Architecture Center.