1. Obiettivi
Skaffold è uno strumento che gestisce il workflow per la creazione, l'esecuzione del push e l'esecuzione del deployment dell'applicazione. Puoi utilizzare Skaffold per configurare facilmente un workspace di sviluppo locale, semplificare il loop di sviluppo interno e integrarlo con altri strumenti come Kustomize e Helm per gestire i manifest di Kubernetes.
In questo tutorial, esaminerai alcuni concetti di base di Skaffold, lo utilizzerai per automatizzare il ciclo di sviluppo interno e poi eseguirai il deployment di un'applicazione.
Imparerai a:
- Configurare e attivare Skaffold per lo sviluppo locale
- Creare ed eseguire una semplice applicazione Golang
- Gestire il deployment dell'applicazione locale con Skaffold
- Eseguire il rendering dei manifest ed eseguire il deployment dell'applicazione
2. Prima di iniziare
Preparare l'area di lavoro
- Apri l'editor di Cloud Shell visitando il seguente URL:
https://shell.cloud.google.com
Consenti i cookie di terze parti. Fai clic su "Il sito non funziona" e poi su "Consenti cookie".


- Se non l'hai ancora fatto, nella finestra del terminale clona l'origine dell'applicazione con il seguente comando:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- Passa alla directory del repository clonato:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- Imposta l'area di lavoro di Cloud Shell sulla directory corrente eseguendo il seguente comando:
cloudshell workspace .
Preparare il progetto
- Assicurati che il progetto Google Cloud sia impostato correttamente eseguendo il seguente comando:
gcloud config set project {{project-id}}
3. Iniziare a utilizzare Skaffold
- Esegui il comando seguente per creare il file di configurazione di primo livello di Skaffold,
skaffold.yaml:
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- Apri il file
skaffold.yamlnel riquadro dell'IDE. Questo è il file di configurazione di primo livello che definisce la pipeline di Skaffold.
Nota il formato YAML simile a Kubernetes e le seguenti sezioni in YAML:
builddeployprofiles
Queste sezioni definiscono come creare ed eseguire il deployment dell'applicazione, nonché i profili per ogni target di deployment.
Puoi leggere di più sull'elenco completo delle fasi di Skaffold nella documentazione relativa alle fasi della pipeline di Skaffold documentation.
4. Build
La sezione build contiene la configurazione che definisce come creare l'applicazione. In questo caso, puoi vedere la configurazione per la gestione dei tag git, nonché una sezione artifacts che definisce le immagini container che compongono l'applicazione.
Inoltre, in questa sezione puoi vedere il riferimento al Dockerfile da utilizzare per creare le immagini. Skaffold supporta anche altri strumenti di build come Jib, Maven, Gradle, Buildpacks cloud-native, Bazel e script personalizzati. Puoi leggere di più su questa configurazione nella documentazione relativa alla build di Skaffold.
5. Esegui il deployment
La sezione deploy contiene la configurazione che definisce come eseguire il deployment dell'applicazione. In questo caso, puoi vedere un esempio di deployment predefinito che configura Skaffold per utilizzare lo strumento Kustomize.
Lo strumento Kustomize fornisce funzionalità per la generazione di manifest di Kubernetes combinando un insieme di file YAML di componenti comuni (nella directory base) con uno o più "overlay" che in genere corrispondono a uno o più target di deployment, in genere dev, test, staging e production o simili.
In questo esempio, puoi vedere due overlay per tre target: dev, staging e prod. L'overlay dev verrà utilizzato durante lo sviluppo locale, mentre gli overlay staging e prod verranno utilizzati durante il deployment con Skaffold.
6. Profili
La sezione profiles contiene la configurazione che definisce le configurazioni di build, test e deployment per contesti diversi. I contesti diversi sono in genere ambienti diversi nella pipeline di deployment dell'applicazione, come staging o prod in questo esempio. Ciò significa che puoi gestire facilmente i manifest i cui contenuti devono essere diversi per i diversi ambienti di destinazione, senza ripetere la configurazione boilerplate.
La configurazione nella sezione profiles può sostituire o applicare patch a qualsiasi elemento della configurazione principale (ad es. le sezioni build, test o deploy).
Ad esempio, apri il file overlays > prod > deployment.yaml. Tieni presente che il numero di repliche per l'applicazione è configurato qui su tre, sostituendo la configurazione di base.
Esplorare il codice sorgente dell'applicazione.
- Apri il file
app > main.gonel riquadro dell'IDE. Si tratta di una semplice applicazione Golang che scrive una stringa instdoutogni secondo. - Tieni presente che l'applicazione restituisce anche il nome del pod Kubernetes in cui è in esecuzione.
Visualizzare il Dockerfile
- Apri il file
app > Dockerfilenel riquadro dell'IDE. Questo file contiene una sequenza di direttive per creare l'immagine container dell'applicazione per il filemain.goe viene fatto riferimento nel fileskaffold.yamldi primo livello.
7. Sviluppare con Skaffold
Configurare l'ambiente Kubernetes
- Esegui il comando seguente per assicurarti che il cluster Kubernetes locale sia in esecuzione e configurato:
minikube start
L'operazione potrebbe richiedere alcuni minuti. Se il cluster è stato avviato correttamente, dovresti vedere l'output seguente:
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- Esegui il comando seguente per creare gli spazi dei nomi Kubernetes per
dev,stagingeprod:
kubectl apply -f namespaces.yaml
Dovresti vedere l'output seguente:
namespace/dev created namespace/staging created namespace/prod created
Utilizzare Skaffold per lo sviluppo locale
- Esegui il comando seguente per creare l'applicazione ed eseguirne il deployment in un cluster Kubernetes locale in esecuzione in Cloud Shell:
skaffold dev
Dovresti vedere l'esecuzione del processo di compilazione del container dell'applicazione, che potrebbe richiedere un minuto, e poi l'output dell'applicazione che si ripete ogni secondo:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
Tieni presente che il nome esatto del pod varierà rispetto all'output generico riportato sopra.
Apportare modifiche all'applicazione
Ora che l'applicazione è in esecuzione nel cluster Kubernetes locale, puoi apportare modifiche al codice e Skaffold ricreerà ed eseguirà automaticamente il deployment dell'applicazione nel cluster.
- Apri il file
app > main.gonel riquadro dell'IDE e modifica la stringa di output:
"Hello world from pod %s!\n"
a:
"Hello Skaffold world from pod %s!\n"
Dopo aver apportato la modifica, dovresti vedere Skaffold ricreare l'immagine ed eseguirne il deployment nel cluster, con la modifica dell'output visibile nella finestra del terminale.
- Ora, sempre nel file "app > main.go" nel riquadro dell'IDE, modifica la riga:
time.Sleep(time.Second * 1)
a
time.Sleep(time.Second * 10)
Anche in questo caso, dovresti vedere l'applicazione ricreata ed eseguita di nuovo, con la riga di output che viene visualizzata una volta ogni 10 secondi.
Apportare modifiche alla configurazione di Kubernetes
Successivamente, apporterai una modifica alla configurazione di Kubernetes e, ancora una volta, Skaffold rieseguirà automaticamente il deployment.
- Apri il file
base > deployment.yamlnell'IDE e modifica la riga:
replicas: 1
a
replicas: 2
Una volta eseguito il deployment dell'applicazione, dovresti vedere due pod in esecuzione, ognuno con un nome diverso.
- Ora, modifica la stessa riga nel file
base > deployment.yamlin:
replicas: 1
Dovresti vedere uno dei pod rimossi dal servizio, in modo che ne rimanga solo uno.
- Infine, premi
Ctrl-Cnella finestra del terminale per interrompere lo sviluppo locale di Skaffold.
Creare una release
Successivamente, creerai una release creando un'immagine di release ed eseguendone il deployment in un cluster.
- Esegui il comando seguente per creare la release:
skaffold build --file-output artifacts.json
Questo comando creerà l'immagine finale (se necessario) e restituirà i dettagli della release nel file artifacts.json.
Se vuoi utilizzare uno strumento come Cloud Deploy per eseguire il deployment nei cluster, questo file contiene le informazioni sulla release. Ciò significa che gli artefatti sono immutabili nel percorso verso la pubblicazione.
- Esegui il comando seguente per visualizzare i contenuti del file
artifacts.json:
cat artifacts.json | jq
Tieni presente che il file contiene il riferimento all'immagine che verrà utilizzata nel deployment finale.
Eseguire il deployment in staging
- Esegui il comando seguente per eseguire il deployment della release utilizzando il profilo
staging:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
Una volta completato il deployment, dovresti vedere l'output di due pod simile al seguente:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- Premi Ctrl-C nella finestra del terminale per interrompere l'output di Skaffold.
- Esegui il comando seguente per osservare l'applicazione in esecuzione nel cluster:
kubectl get all --namespace staging
Dovresti vedere due nomi di pod distinti, perché il profilo staging per l'applicazione specifica che devono essere presenti due repliche nel deployment.
Eseguire il deployment in produzione
- Ora esegui il comando seguente per eseguire il deployment della release utilizzando il profilo
prod:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
Una volta completato il deployment, dovresti vedere l'output di tre pod simile al seguente:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- Premi Ctrl-C nella finestra del terminale per interrompere l'output di Skaffold.
Dovresti vedere tre nomi di pod distinti, perché il profilo prod per l'applicazione specifica che devono essere presenti tre repliche nel deployment.
- Esegui il comando seguente per osservare l'applicazione in esecuzione nel cluster:
kubectl get all --namespace prod
Dovresti vedere un output che contiene righe simili alle seguenti che mostrano il deployment di produzione:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
Dovresti anche vedere tre pod dell'applicazione in esecuzione.
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. Complimenti!
Complimenti! Hai completato il lab Understanding Skaffold e hai imparato a configurare e utilizzare Skaffold per lo sviluppo locale e il deployment delle applicazioni.
Qual è il passaggio successivo?
Continua a scoprire di più su Skaffold:
Esegui la pulizia
- Esegui il comando seguente per arrestare il cluster locale:
minikube delete