Questo documento descrive come iniziare a utilizzare Skaffold nell'ambito di Cloud Deploy, tra cui:
- Configurare Skaffold per l'utilizzo con una pipeline di distribuzione di Cloud Deploy
- Utilizzo di Skaffold e Cloud Deploy con strumenti di rendering di terze parti, come Helm e Kustomize
- Se vuoi, puoi utilizzare Skaffold per lo sviluppo locale
- Se vuoi, utilizza Skaffold per l'integrazione e il deployment continui (CI/CD)
Perché Skaffold?
Vuoi sapere perché Cloud Deploy utilizza Skaffold e perché devi gestire una configurazione di Skaffold? Continua a leggere.
Ho esperienza con CI/CD, ma al momento non utilizzo Skaffold
Skaffold è uno strumento a riga di comando open source per migliorare la produttività degli sviluppatori. Orchestra lo sviluppo continuo, l'integrazione continua (CI) e la distribuzione continua (CD).
Skaffold fornisce una configurazione dichiarativa e portatile, utilizzando un'architettura pluggable, che ti consente di utilizzare diversi strumenti per la fase di rendering.
Quando viene creata una release, Cloud Deploy chiama Skaffold per eseguire il rendering dei manifest. Al momento del deployment, Cloud Deploy richiama di nuovo Skaffold per applicare i manifest al deployment dell'applicazione in ogni target della progressione. Dopo il deployment, Skaffold esegue controlli di integrità per monitorare l'ambiente di runtime di destinazione al fine di verificare che il deployment sia andato a buon fine.
Skaffold per lo sviluppo continuo
Quando utilizzi Skaffold per lo sviluppo continuo, le immagini vengono create, testate ed eseguite in un cluster (o Minikube) man mano che modifichi il codice. Le estensioni IDE Cloud Code for VS Code e Cloud Code for IntelliJ integrano Skaffold negli IDE Visual Studio Code e JetBrains per lo sviluppo continuo.
Skaffold per la distribuzione continua
Puoi anche utilizzare Skaffold per la distribuzione continua, con i passaggi di compilazione, deployment, rendering e applicazione. Cloud Deploy utilizza le funzionalità di rendering e applicazione di Skaffold. Per utilizzare Cloud Deploy, è necessario almeno un file di configurazione skaffold.yaml
valido.
Tramite Skaffold, puoi anche eseguire l'integrazione con strumenti di gestione dei manifest di terze parti, come Helm e Kustomize.
L'utilizzo di Skaffold in questo modo ti consente di utilizzare le funzionalità di questi strumenti per eseguire il rendering dei manifest. kubectl
rimane il deployer per questi manifest.
Non ho mai eseguito il deployment in Kubernetes
Con Skaffold, puoi configurare un insieme di manifest di base per tutti i tuoi deployment. Puoi quindi utilizzare il motore di rendering di Skaffold, tramite Cloud Deploy, per eseguire il rendering e il deployment di ogni manifest specifico per il deployment da uno di questi manifest di base.
Scopri di più sulla gestione dei manifest, inclusi esempi di utilizzo di Skaffold e Cloud Deploy con strumenti comuni di creazione di modelli di manifest, come Helm e Kustomize.
Cosa è necessario per far funzionare Cloud Deploy?
Per utilizzare una pipeline di importazione di Cloud Deploy di base, il
file di configurazione skaffold.yaml
necessita almeno della seguente configurazione:
Le informazioni di intestazione necessarie per tutte le configurazioni
skaffold.yaml
:apiVersion: skaffold/v4beta7 kind: Config
Una stanza
manifests
per GKE, GKE Enterprise o Cloud Run che elenca tutti i manifest Kubernetes non elaborati (a meno che non utilizzi uno strumento di gestione dei manifest, come Helm o Kustomize).Ecco un esempio che utilizza un manifest Kubernetes non elaborato:
manifests: rawYaml: - deployment.yaml
Se prevedi di utilizzare un visualizzatore (come Helm o Kustomize) per eseguire il rendering dei manifest, consulta Aggiungere il supporto di Helm a skaffold.yaml e Aggiungere il supporto di Kustomize a skaffold.yaml per indicazioni su come configurare Skaffold per utilizzare questi strumenti.
Per esempi di Helm e Kustomize, consulta Gestire i manifest
Una stanza
deploy
condeploy.kubectl
per il deployment su GKE o GKE Enterprise oppuredeploy.cloudrun
per il deployment su Cloud Run.Per i target GKE e GKE Enterprise:
deploy: kubectl: {}
La stanza di deployment esegue il deployment dei manifest dell'applicazione forniti nella stanza manifests.
Per le destinazioni Cloud Run:
deploy: cloudrun: {}
La stanza di deployment esegue il deployment dei manifest dell'applicazione forniti nella stanza manifests.
Se utilizzi target personalizzati, il tuo
skaffold.yaml
deve avere l'intestazione (apiVersion
e kind:
), oltre alle
azioni personalizzate
che verranno utilizzate dal target personalizzato se il tipo di target personalizzato non fa già riferimento a una
configurazione Skaffold remota.
Crea un file skaffold.yaml
Cloud Deploy utilizza Skaffold per il rendering e il deployment delle applicazioni.
Per ogni release, devi fornire almeno un file skaffold.yaml
che identifichi i manifest da utilizzare. Consulta la
sezione precedente
per indicazioni su cosa deve essere inserito in questo file.
Chiedi a Cloud Deploy di generare il tuo skaffold.yaml
Se non hai un file skaffold.yaml
, ma hai un singolo manifest Kubernetes o un file di definizione del servizio Cloud Run, Cloud Deploy può generare un file skaffold.yaml
per te.
Il file Skaffold generato sarà disponibile nella directory di staging della fonte Cloud Storage al termine della release.
Il seguente comando include il flag --from-k8s-manifest
, che passa il manifest Kubernetes. Cloud Deploy utilizza le informazioni nel
manifest per generare il file skaffold.yaml
, che viene poi utilizzato per la release.
gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION
Per generare il file skaffold.yaml
da un file YAML del servizio Cloud Run,
utilizza lo stesso comando, ma con --from-run-manifest
anziché
--from-k8s-manifest
L'utilizzo di uno di questi flag con il flag --skaffold-file
o con il
--source
genera un errore.
Utilizzo del file skaffold.yaml
generato
Il file skaffold.yaml
generato è adatto per l'onboarding, l'apprendimento e la dimostrazione di Cloud Deploy. Dopo aver acquisito familiarità con Cloud Deploy,
e per i workload di produzione, potresti volere una configurazione di Skaffold che
differenzi i tuoi target (utilizzando i profili Skaffold).
Quando utilizzi il file skaffold.yaml
generato come punto di partenza per creare la tua configurazione Skaffold differenziata, assicurati di utilizzare il file nell'archivio di origine dell'elaborazione, non nel file visualizzato. L'origine di rendering è disponibile per il download dalla scheda Elementi nella pagina **Dettagli della release **.
Questo
skaffold.yaml
generato è incluso nell'origine di rendering archiviata in un bucket Cloud Storage.Puoi visualizzare questo file scaricando ed estraendo il file
.tar.gz
.Il
skaffold.yaml
visualizzato è disponibile in Artefatti di destinazione.Nella sezione Elementi target, fai clic su Visualizza elementi.
Utilizzo di Skaffold per lo sviluppo locale
Uno dei punti di forza di Skaffold è che puoi utilizzarlo per lo sviluppo
locale e per CI/CD.
In modalità dev
, Skaffold monitora i file di origine e, quando rileva una modifica, riesegue la compilazione delle immagini, esegue nuovamente i test e riesegue il deployment dei contenitori in un cluster minikube (ad esempio) sulla tua macchina locale.
Quando utilizzi Skaffold in questo modo, puoi utilizzare localmente gli stessi comandi utilizzati per il deployment remoto.
Se utilizzi Skaffold per lo sviluppo locale, puoi definire profili Skaffold distinti per i tuoi target e una stanza di deployment predefinita per lo sviluppo locale.
Quando interrompi la modalità dev
, Skaffold esegue la pulizia degli elementi di cui è stato eseguito il deployment dal cluster.
Utilizzo di Skaffold per CI/CD
Oltre a utilizzare Skaffold per la creazione e il deployment locali continui, puoi utilizzare Skaffold per CI/CD. Cloud Deploy utilizza le funzionalità CI/CD di Skaffold per eseguire il rendering e applicare i manifest e il deployment dell'applicazione ai target definiti, in base alle immagini container create utilizzando uno strumento CI come Cloud Build e un registry delle immagini come Artifact Registry.
Esegui il rendering, il deployment e l'applicazione
Skaffold separa il processo di rendering del manifest dal deployment.
Cloud Deploy chiama skaffold render
per eseguire il rendering dei manifest e skaffold apply
per applicarli al target.
Questa separazione tra il rendering e l'applicazione ti consente di acquisire lo stato dichiarativo completo della tua applicazione in configurazione, in modo che possa essere applicata in modo sicuro e ripetibile (ad esempio per i rollback). Inoltre, questa tecnica semplifica le approvazioni. Poiché i manifest vengono visualizzati per tutti i target prima del primo deployment, puoi vedere il file YAML visualizzato che verrà applicato a ciascun target.
Cloud Deploy non supporta l'utilizzo di altri deployer per eseguire il deployment della tua applicazione. Tuttavia, puoi utilizzare strumenti come Helm o Kustomize per il rendering.
Per scoprire di più su come Cloud Deploy esegue il deployment utilizzando kubectl
come strumentazione di deployment, consulta Architettura del servizio Cloud Deploy.
Informazioni sui profili Skaffold
Puoi creare profili Skaffold distinti, identificati in skaffold.yaml
, in una stanza profiles:
.
Quando utilizzi i profili Skaffold con Cloud Deploy, puoi creare profili distinti per tutti o alcuni dei tuoi target. Ad esempio, diversi
profili per dev
, staging
e prod
.
I profili non sono necessari per utilizzare Skaffold in Cloud Deploy, ma sono utili per definire le personalizzazioni del manifest tra i target, ad esempio utilizzando diversi file Kustomize kustomization.yaml
per target.
Aggiungere il supporto di Kustomize a skaffold.yaml
L'integrazione della configurazione di Kustomize con la configurazione di Cloud Deploy/Skaffold è costituita da quanto segue:
Includi un file
kustomization.yaml
tra i file di configurazione.Puoi archiviare i file di configurazione in una directory locale o in un bucket Cloud Storage.
Nel file
skaffold.yaml
, crea una stanzadeploy
per ogni profilo.Puoi anche avere una stanza
deploy
al di fuori di qualsiasi profilo definito, se non utilizzi i profili o per una configurazione di deployment predefinita non associata a un profilo.Di seguito è riportato un esempio di configurazione di Skaffold che mostra
deploy
stanze per profilo e utilizza un'app di esempio fittizia denominatamy-app
:apiVersion: skaffold/v4beta7 kind: Config build: artifacts: - image: my-app-web-profiles context: my-app-web-profiles - image: my-app-application-profiles context: my-app-application-profiles googleCloudBuild: projectId: ${PROJECT_ID} profiles: - name: local manifests: kustomize: paths: - my-app-application-profiles/kubernetes/local - name: test manifests: kustomize: paths: - my-app-application-profiles/kubernetes/test - name: staging manifests: kustomize: paths: - my-app-application-profiles/kubernetes/staging - name: prod manifests: kustomize: paths: - my-app-application-profiles/kubernetes/prod deploy: kubectl: {}
La configurazione di Skaffold mostrata qui ha profili separati per i target
test
,staging
eprod
. Mostra anche un profilo per lo sviluppo locale. In ogni profilo è presente una stanzadeploy.kustomize
con un percorso che rimanda alla posizione della kustomization da utilizzare per quel target.
Aggiungere il supporto di Helm a skaffold.yaml
Puoi utilizzare Helm per eseguire il rendering dei manifest. Cloud Deploy non utilizza Helm per il deployment delle applicazioni e supporta solo kubectl
come deployer.
Per utilizzare Helm, devi avere il grafico o i grafici Helm, memorizzati in qualsiasi posizione a cui puoi fare riferimento dall'interno di skaffold.yaml
. Questa posizione può trovarsi in un sistema di file, in un repository, eventualmente insieme al tuo skaffold.yaml
, o in un repository Open Container Initiative (OCI).
Per utilizzare un grafico Helm, aggiungi una stanza helm
al file
skaffold.yaml
.
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: skaffold-helm-image
manifests:
helm:
releases:
- name: skaffold-helm-image
chartPath: charts
deploy:
kubectl: {}
Il riferimento skaffold.yaml
mostra cosa è necessario in questa stanza helm
.
Funzionalità di Skaffold non supportate
Le seguenti funzionalità di Skaffold non possono essere utilizzate in Cloud Deploy:
-
L'utilizzo di
--module=
per selezionare moduli specifici perbuild
,render
,apply
e così via non è supportato. I moduli statici sono supportati. In Helm, la possibilità di creare uno spazio dei nomi se non esiste.
Passaggi successivi
Visita il sito di Skaffold per scoprire come funziona e cosa può fare per te.
Fai pratica utilizzando Cloud Deploy con i profili Kustomize e Skaffold.
Scopri come Cloud Deploy seleziona la versione di Skaffold da usare, quando la versione di Skaffold cambia e come determinare quale versione è in uso.
Scopri come utilizzare i profili Skaffold con strumenti di gestione dei manifest avanzati come Helm, Kustomize e kpt.