Eseguire il deploy su Kubernetes con Actions
Configuri il Continuous Deployment nei cluster Kubernetes, gestendo deploy e servizi direttamente da GitHub Actions.
Eseguire il deploy su Kubernetes con Actions è una lezione DevOps Bootcamp gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp include 4 lezioni in totale.
Introduzione al CD su K8s con Actions
Benvenuto! In questa lezione imparerà a configurare la distribuzione continua (CD) nei cluster Kubernetes utilizzando GitHub Actions.
Automatizzare le distribuzioni significa rendere disponibili rapidamente e in modo affidabile le modifiche all'applicazione, senza passaggi manuali.
Verranno trattati l'autenticazione, l'applicazione dei manifest Kubernetes e la gestione degli aggiornamenti.
Elementi essenziali della distribuzione su K8s
Prima di procedere con la distribuzione, è utile richiamare rapidamente due risorse fondamentali di Kubernetes:
- Deployment: gestiscono i Pod dell'applicazione, assicurando che sia sempre in esecuzione il numero desiderato di repliche. Gestiscono aggiornamenti e rollback.
- Services: definiscono come accedere all'applicazione, ad esempio all'interno del cluster oppure dall'esterno tramite un LoadBalancer.
Il nostro obiettivo è applicare al cluster, tramite GitHub Actions, i file YAML che definiscono queste risorse.
Autenticazione di Actions a K8s
Per eseguire la distribuzione, il workflow di GitHub Actions deve comunicare con il server API del cluster Kubernetes.
È necessaria l'autenticazione. Il metodo standard per autenticarsi a Kubernetes consiste nell'utilizzare un file kubeconfig.
È necessario fornire in modo sicuro il contenuto di questo file al runner del workflow.
Protezione di Kubeconfig
Il file kubeconfig contiene informazioni sensibili, come gli endpoint del cluster e le credenziali degli utenti. Deve essere mantenuto segreto!
GitHub Actions mette a disposizione i Secrets a questo scopo. Memorizzerà il contenuto del file kubeconfig come segreto del repository.
Come ottenere il proprio kubeconfig? Dipende dal provider K8s utilizzato, ad esempio aws eks update-kubeconfig o gcloud container clusters get-credentials.
Configurazione del contesto K8s
Una volta memorizzato il file kubeconfig come segreto, ad esempio con il nome KUBE_CONFIG_DATA, il workflow potrà utilizzarlo.
La pratica comune consiste nello scrivere il contenuto del segreto in un file temporaneo sul runner e quindi impostare la variabile d'ambiente KUBECONFIG affinché punti a tale file.
In questo modo si indica a kubectl dove trovare i dettagli della connessione al cluster.
Utilizzo di `kubectl` nei workflow
kubectl è lo strumento ufficiale da riga di comando per interagire con i cluster Kubernetes. I runner di GitHub Actions hanno kubectl già preinstallato.
Dopo aver configurato il file kubeconfig, è possibile eseguire qualsiasi comando kubectl nei passaggi del workflow.
Vediamo un esempio di base:
name: K8s Setup Test
on: [workflow_dispatch]
jobs:
test-kubeconfig:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Kubeconfig
env:
KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
run: |
mkdir -p ~/.kube
echo "$KUBE_CONFIG_DATA" > ~/.kube/config
chmod 600 ~/.kube/config
echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV
- name: Verify kubectl access
run: kubectl version --clientManifest semplice per la distribuzione su K8s
Ecco un manifest Kubernetes di base con un Deployment e un Service per un'applicazione "hello-world". È ciò che verrà richiesto a Kubernetes di eseguire.
Questo esempio utilizza una semplice immagine Nginx e la espone sulla porta 80.
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app-deployment
spec:
replicas: 1
selector:
matchLabels:
app: hello-app
template:
metadata:
labels:
app: hello-app
spec:
containers:
- name: hello-app
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: hello-app-service
spec:
selector:
app: hello-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancerWorkflow completo di distribuzione
Ora integriamo il passaggio di distribuzione in un workflow. Dopo aver compilato e pubblicato l'immagine del container, come illustrato nelle lezioni precedenti, è possibile distribuirla.
Questo workflow presuppone che il segreto kubeconfig sia configurato e che il file manifest, ad esempio k8s/deployment.yaml, esista nel repository.
name: Deploy to Kubernetes
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Kubeconfig
env:
KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
run: |
mkdir -p ~/.kube
echo "$KUBE_CONFIG_DATA" > ~/.kube/config
chmod 600 ~/.kube/config
echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV
- name: Deploy application to K8s
run: kubectl apply -f k8s/deployment.yamlAggiornamento dell'applicazione
Una delle caratteristiche più interessanti di kubectl apply è l'idempotenza. Se le risorse definite nel file YAML esistono già, kubectl apply le aggiornerà anziché crearne di nuove.
Per distribuire una nuova versione dell'applicazione, è sufficiente aggiornare il tag dell'immagine nel file deployment.yaml e inviare la modifica. GitHub Actions verrà quindi attivato e Kubernetes eseguirà un rolling update, sostituendo gradualmente i Pod precedenti con quelli nuovi e garantendo tempi di inattività minimi.
Verifica rapida
Ha appreso i passaggi essenziali per distribuire un'applicazione in Kubernetes utilizzando GitHub Actions.
Quale delle seguenti opzioni indica la sequenza corretta di passaggi di un workflow GitHub Actions per distribuire un manifest Kubernetes?
Riepilogo e prossimi passi
Ottimo lavoro! Ha imparato a configurare la distribuzione continua in Kubernetes utilizzando GitHub Actions.
- I dati sensibili di
kubeconfigvengono memorizzati nei GitHub Secrets. - I workflow utilizzano questo segreto per configurare
kubectl. kubectl apply -fviene utilizzato per distribuire o aggiornare i manifest K8s.- Kubernetes gestisce gli aggiornamenti di tipo rolling update quando vengono applicate modifiche.
Questa potente combinazione automatizza le distribuzioni, rendendo il processo di sviluppo più fluido e veloce. Continui a esplorare le funzionalità K8s più avanzate!
Domande Frequenti
La lezione «Eseguire il deploy su Kubernetes con Actions» è gratuita?
Sì — il testo completo di «Eseguire il deploy su Kubernetes con Actions» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp include 4 lezioni in totale.
Cosa imparerò in «Eseguire il deploy su Kubernetes con Actions»?
Configuri il Continuous Deployment nei cluster Kubernetes, gestendo deploy e servizi direttamente da GitHub Actions. Eserciti DevOps Bootcamp con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare DevOps Bootcamp?
Non è richiesta alcuna esperienza precedente. DevOps Bootcamp su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Eseguire il deploy su Kubernetes con Actions»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione DevOps Bootcamp?
Sì. Ogni lezione DevOps Bootcamp include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Creare immagini Docker con Actions
- Eseguire il push delle immagini nei registry
- Eseguire il deploy su Kubernetes con Actions
- Chart Helm e manifest Kubernetes in CI/CD