Informazioni su Skaffold

1. Obiettivi

Skaffold è uno strumento che gestisce il flusso di lavoro per la creazione, il push e il deployment della tua applicazione. Puoi utilizzare Skaffold per configurare facilmente un'area di lavoro di sviluppo locale, semplificare il ciclo di sviluppo interno e integrare altri strumenti come Kustomize ed Helm per facilitare la gestione dei manifest di Kubernetes.

In questo tutorial imparerai ad alcuni concetti fondamentali di Skaffold, usalo per automatizzare il loop di sviluppo interno e poi esegui il deployment di un'applicazione.

Imparerai a:

  • Configura e abilita Skaffold per lo sviluppo locale
  • Crea ed esegui una semplice applicazione golang
  • Gestire il deployment delle applicazioni locali con Skaffold
  • Esegui il rendering dei manifest ed esegui il deployment della tua applicazione

2. Prima di iniziare

Preparazione dell'area di lavoro

  1. Apri l'editor di Cloud Shell visitando il seguente URL:
https://shell.cloud.google.com

Consenti cookie di terze parti. Fai clic su "Sito non funzionante" quindi su "Consenti cookie".

7b702066a2135a3d.png

3394f82132eb4fd4.png

  1. Se non lo hai già fatto, nella finestra del terminale clona il codice sorgente dell'applicazione con il seguente comando:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
  1. Passa alla directory del repository clonato:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
  1. Imposta l'area di lavoro di Cloud Shell sulla directory attuale eseguendo questo comando:
cloudshell workspace .

Preparazione del progetto in corso...

  1. Assicurati che il progetto Google Cloud sia impostato correttamente eseguendo questo comando:
gcloud config set project {{project-id}}

3. Introduzione a Skaffold

  1. Esegui questo comando per creare il file di configurazione Skaffold di primo livello, 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
  1. Apri il file skaffold.yaml nel riquadro IDE. Si tratta del file di configurazione di primo livello che definisce la pipeline Skaffold.

Osserva il formato YAML simile a Kubernetes e le seguenti sezioni nel file YAML:

  • build
  • deploy
  • profiles

Queste sezioni definiscono le modalità di creazione e deployment dell'applicazione, nonché i profili per ogni destinazione del deployment.

Per ulteriori informazioni sull'elenco completo delle fasi di Skaffold, consulta la documentazione sulle fasi della pipeline di Skaffold.

4. Build

La sezione build contiene una configurazione che definisce il modo in cui deve essere creata l'applicazione. In questo caso, puoi vedere la configurazione di come devono essere gestiti i 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 inoltre altri strumenti di creazione come Jib, Maven, Gradle, Buildpacks, Bazel cloud-native e script personalizzati. Per saperne di più su questa configurazione, consulta la documentazione su Skaffold Build.

5. Esegui il deployment

La sezione deploy contiene una configurazione che definisce le modalità di deployment dell'applicazione. In questo caso, puoi vedere un esempio di un deployment predefinito che configura Skaffold per l'utilizzo dello strumento Kustomize.

Lo strumento Kustomize fornisce funzionalità per generare manifest Kubernetes combinando un set di file YAML 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 per l'implementazione mediante Skaffold.

6. Profili

La sezione profiles contiene una configurazione che definisce le configurazioni di build, test e deployment per contesti diversi. Contesti diversi sono in genere ambienti diversi nella pipeline di deployment delle applicazioni, 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 modificare qualsiasi elemento della configurazione principale (ad esempio le sezioni build, test o deploy).

Ad esempio, apri il file overlays > prod > deployment.yaml. Nota che il numero di repliche per l'applicazione è configurato qui su tre, che sostituisce la configurazione di base.

  1. Apri il file app > main.go seguente nel riquadro IDE. Questa è una semplice applicazione golang che scrive una stringa in stdout ogni secondo.
  2. Tieni presente che l'applicazione restituisce anche il nome del pod Kubernetes in cui è in esecuzione.

visualizza il Dockerfile

  1. Apri il file app > Dockerfile nel riquadro IDE. Questo file contiene una sequenza di istruzioni per creare l'immagine del container dell'applicazione per il file main.go e ha un riferimento nel file skaffold.yaml di primo livello.

7. Sviluppo con Skaffold

Configurazione dell'ambiente Kubernetes

  1. Esegui questo comando per assicurarti che il tuo cluster Kubernetes locale sia in esecuzione e configurato:
minikube start

L'operazione potrebbe richiedere diversi minuti. Se il cluster è stato avviato correttamente, l'output visualizzato dovrebbe essere il seguente:

Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  1. Esegui questo comando per creare spazi dei nomi Kubernetes per dev, staging e prod:
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

  1. Esegui questo comando 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 quindi 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à dall'output generico fornito sopra.

Modifiche all'applicazione

Ora che l'applicazione è in esecuzione nel tuo cluster Kubernetes locale, puoi apportare modifiche al codice e Skaffold ricrea ed esegue automaticamente il deployment dell'applicazione nel cluster.

  1. Apri il file app > main.go nel riquadro 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 nuovamente il deployment nel cluster. La modifica dell'output è visibile nella finestra del terminale.

  1. Ora anche nel file "app > main.go&quot; nel riquadro IDE, modifica la riga:
time.Sleep(time.Second * 1)

a

time.Sleep(time.Second * 10)

Anche in questo caso, dovresti vedere l'applicazione ricreata e rieseguire il deployment, con la riga di output visualizzata una volta ogni 10 secondi.

Modifiche alla configurazione di Kubernetes

Ora apporterai una modifica alla configurazione di Kubernetes e rieseguirà automaticamente il deployment di Skaffold.

  1. Apri il file base > deployment.yaml nell'IDE e cambia la riga:
replicas: 1

a

replicas: 2

Una volta eseguito nuovamente il deployment dell'applicazione, dovresti vedere due pod in esecuzione, ognuno con un nome diverso.

  1. Ora modifica di nuovo la stessa riga nel file base > deployment.yaml in:
replicas: 1

Dovresti vedere uno dei pod rimossi dal servizio, in modo che ne rimanga solo uno.

  1. Infine, premi Ctrl-C nella finestra del terminale per interrompere lo sviluppo locale di Skaffold.

Taglio di un'uscita

Quindi, creerai una release creando un'immagine di release ed eseguendo il deployment in un cluster.

  1. Esegui questo comando 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 il deployment nei tuoi cluster, questo file contiene le informazioni sulla release. Ciò significa che gli artefatti sono immutabili sul percorso verso il live streaming.

  1. Esegui questo comando per visualizzare i contenuti del file artifacts.json:
cat artifacts.json | jq

Nota che il file contiene il riferimento all'immagine che verrà utilizzata nel deployment finale.

Deployment nella gestione temporanea

  1. Esegui questo comando 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, simili al seguente:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
  1. Premi Ctrl-C nella finestra del terminale per interrompere l'output di Skaffold.
  2. Esegui questo comando per osservare che la tua applicazione è attiva e 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 nel deployment devono essere presenti due repliche.

Esegui il deployment in produzione

  1. Ora esegui questo comando 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, simili al seguente:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
  1. 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 il deployment deve contenere tre repliche.

  1. Esegui questo comando per osservare che la tua applicazione è attiva e 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.

Passaggi successivi

Continua a scoprire di più su Skaffold:

Esegui la pulizia

  1. Esegui questo comando per arrestare il cluster locale:
minikube delete