Introduzione
Helm è un gestore di pacchetti per Kubernetes che consente agli sviluppatori e agli operatori di configurare e distribuire più facilmente le applicazioni sui cluster Kubernetes.
I pacchetti Helm sono chiamati chart, e contengono modelli di definizioni di risorse che distribuiscono e configurano le app indicate con un minimo sforzo richiesto dall’utente. Con il templating, è possibile gestire il chart, le sue impostazioni e il comportamento passando definizioni di variabili senza modificare effettivamente il chart. Helm gestisce automaticamente anche le definizioni di risorse personalizzate e le modifiche alle definizioni già distribuite. Un chart distribuito, con eventuali personalizzazioni, è chiamato release.
In questo tutorial, configurerai Helm 3 e imparerai come installare, aggiornare, eseguire il rollback e gestire chart e release. Imparerai anche a creare e impacchettare i tuoi chart, oltre a configurare i repository di chart, che ospitano chart che puoi installare immediatamente.
Prerequisiti
-
Un cluster Kubernetes con controllo degli accessi basato sui ruoli (RBAC) abilitato. Per ulteriori informazioni sulle release, puoi consultare la pagina delle release di Helm.
-
Lo strumento da riga di comando
kubectl
installato sul tuo computer locale, configurato per connettersi al tuo cluster. Puoi leggere di più sull’installazione dikubectl
nella documentazione ufficiale.Puoi testare la tua connettività con il seguente comando:
Se non ricevi errori, sei connesso al cluster. Se accedi a più cluster con
kubectl
, assicurati di verificare di aver selezionato il contesto del cluster corretto eseguendo:L’output elencherà le configurazioni disponibili:
OutputCURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-adminQui, l’asterisco (
*
) indica che siamo connessi al clusterdo-fra1-helm3-example
. Per passare a un altro cluster, esegui:
Quando sei connesso al cluster corretto, continua con il Passaggio 1 per iniziare l’installazione di Helm.
Passaggio 1 — Installazione di Helm 3
In questa sezione, installerai Helm 3 utilizzando lo script shell fornito ufficialmente.
Inizia navigando in /tmp
, dove salverai lo script di installazione eseguendo:
Scarica lo script con il seguente comando:
Puoi esaminare get_helm.sh
nel tuo editor di testo per assicurarti che sia sicuro.
Rendilo eseguibile impostando i suoi permessi come segue:
Infine, eseguilo per installare Helm 3:
Riceverai un output simile al seguente:
OutputDownloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
Hai Helm 3 installato sul tuo computer. Ora imparerai sui repository dei chart e come utilizzarli.
Passaggio 2 — Configurazione dei Repository dei Chart
I chart di Helm sono memorizzati nei repository dei chart che possono essere ospitati da chiunque. Per impostazione predefinita, Helm 3 non viene preconfigurato con alcun repository. Le versioni precedenti di Helm includevano un repository di chart curati centralmente; tuttavia, il design di Helm 3 è deliberatamente evoluto per consentire ai sviluppatori di chart di gestire il proprio repository, consentendo una maggiore libertà e rilasci più rapidi. Ciò significa che per ogni chart che desideri utilizzare, è necessario assicurarsi di aggiungere il repository di hosting alla tua installazione di Helm.
Per aiutarti a trovare il repository giusto, puoi utilizzare ArtifactHub.io, un sito web open source gestito dal CNCF che cataloga i chart di Helm e i relativi repository. Traccia anche i chart popolari e utili che utilizzano altri progetti CNCF, quindi differisce dal repository stable
da cui hanno lavorato le versioni precedenti di Helm. Per progetti comuni, come ingressi Nginx o strumenti di monitoraggio, è una grande fonte.
Puoi cercare un chart che desideri installare tramite la homepage. La ricerca di nginx
mostrerà tutti i chart indicizzati ad esso correlati.
Installerai la versione community gestita dal team Kubernetes. Cerca ingress-nginx
nei risultati. Selezionalo per accedere alla sua pagina.
Ogni chart dovrebbe avere una descrizione dettagliata di ciò che fa, accompagnata da comandi per aggiungere il suo repository all’installazione e installare il chart. Se non lo ha, puoi comunque ottenere i comandi necessari premendo sul pulsante INSTALL sulla destra della pagina.
Puoi fare clic sul pulsante blu accanto a un comando per copiarlo. Fallo per il primo comando e eseguilo:
Per aggiungere un repository a Helm, esegui helm repo add
. I parametri che accetta sono il nome del repo e la sua posizione.
L’output sarà:
Output"ingress-nginx" has been added to your repositories
Quando aggiungi un nuovo repo, devi far sapere a Helm cosa contiene eseguendo:
Riceverai l’output seguente, che mostra che l’aggiornamento è stato eseguito con successo:
OutputHang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈Happy Helming!⎈
In questo passaggio, hai appreso di ArtifactHub e cosa offre. Hai anche aggiunto un nuovo repo alla tua installazione di Helm. Nel prossimo passaggio, installerai un chart di Helm.
Passaggio 3 — Installazione di un Chart di Helm
Nella sezione precedente, hai aggiunto il repo per il chart ingress-nginx
. Ora lo installerai nel tuo cluster.
Ogni grafico ha delle variabili di configurazione che è possibile impostare per modificarne il comportamento. Queste variabili sono memorizzate in un file chiamato values.yaml
che fa parte del grafico. A meno che tu non abbia scaricato il grafico sul tuo computer, dovrai eseguire il seguente comando per visualizzarlo:
Per mostrare le variabili disponibili per ingress-nginx
, sostituisci nome_grafico
:
Il risultato sarà lungo e mostrerà il contenuto di values.yaml
per ingress-nginx
.
Per installare un grafico, puoi utilizzare helm install
:
A release is a deployed instance of the chart, and here you’re calling it ingress-nginx
.
Questo comando installerà il grafico nel tuo cluster con i valori predefiniti delle variabili. Se desideri modificare alcuni di essi, puoi passare i nuovi valori delle variabili utilizzando --set
:
Puoi ripetere --set
per quante variabili ne hai bisogno. Poiché non le personalizzeremo ora, installalo così com’è eseguendo:
Il risultato sarà simile al seguente:
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 10:12:37 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
...
Nota che il NOME
corrisponde al nome del rilascio che hai specificato. Helm elenca anche informazioni comuni, come lo stato del rilascio e lo spazio dei nomi in cui è distribuito. La sezione NOTES
varia tra i grafici e di solito contiene una guida di avvio rapido o avverte di alcuni problemi comuni nell’uso delle risorse del grafico. Qui, si nota che il bilanciamento del carico sta venendo creato e che potrebbe richiedere del tempo per completarlo.
Per controllare i grafici distribuiti, utilizza helm list
:
Troverai che ingress-nginx
è l’unico grafico distribuito al momento:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0
Puoi trovare i servizi che ha nel tuo cluster eseguendo:
L’output sarà simile a questo:
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s
ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m
Ora che hai distribuito un rilascio nel tuo cluster, modificherai la sua configurazione mentre è distribuito.
Passaggio 4 — Aggiornamento di un Rilascio
Una volta che un rilascio è stato distribuito, non è necessario abbatterlo e ridistribuirlo completamente quando è necessario modificare la sua configurazione. Puoi utilizzare il comando helm upgrade
per aggiornare il rilascio con una nuova versione della tabella, o per impostare nuove impostazioni.
La tabella ingress-nginx
espone la variabile controller.replicaCount
che controlla il numero di pod del controller distribuiti. Per impostazione predefinita, è impostato su uno, che puoi verificare elencando i pod disponibili:
Scoprirai che ce n’è solo uno:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m
Se vuoi che ne vengano distribuiti di più per la ridondanza (ad esempio, tre), puoi aggiornare
il rilascio e impostare la variabile su 3
eseguendo:
Passi anche --reuse-values
, che istruisce Helm a basare le tue modifiche sul rilascio distribuito, preservando la configurazione precedente.
Nell’output, Helm aggiornerà la revisione per indicare che il rilascio è stato aggiornato:
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...
Puoi elencare i pod disponibili eseguendo:
Troverai elencati tre pod, invece di uno:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m
ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s
Successivamente annullerai le modifiche e eliminerai completamente le versioni rilasciate.
Passaggio 5 — Annullare e Eliminare un Rilascio
Quando aggiorni
un rilascio, il suo numero di revisione viene incrementato. Internamente, Helm memorizza tutte le revisioni di un rilascio, consentendoti di tornare a una revisione precedente se necessario.
Per ripristinare il numero di pod a uno solo, potresti eseguire di nuovo helm upgrade
e impostare manualmente il numero perché è un cambiamento minore. Tuttavia, quando si lavora con grafici più grandi con molte variabili, il ripristino manuale non è fattibile e dovrebbe essere automatizzato.
Per annullare un rilascio, usa helm rollback
:
Puoi usarlo per annullare le modifiche apportate a ingress-nginx
tornando alla revisione 1
:
Riceverai l’output seguente, che indica che l’azione è stata eseguita con successo:
OutputRollback was a success! Happy Helming!
Puoi verificare la revisione attuale elencando i rilasci:
Scoprirai che la revisione è ora 3
, e non 1
:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0
Helm considera ogni modifica, compresi gli annullamenti, come una nuova revisione di un rilascio. Puoi verificare che la revisione 3
sia uguale alla prima controllando il numero di pod distribuiti eseguendo:
Scoprirai che ce n’è solo uno:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m
Per eliminare un rilascio e tutte le sue revisioni, puoi usare helm delete
:
Dato che non ne avrai più bisogno, elimina ingress-nginx
eseguendo il seguente comando:
L’output sarà:
Outputrelease "ingress-nginx" uninstalled
Puoi elencare i rilasci per verificare che non ce ne siano:
La tabella di output non avrà righe:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
Ora che il rilascio è stato eliminato, puoi riutilizzare il suo nome per futuri dispiegamenti.
Passaggio 6 — (Opzionale) Creazione di Grafici Personalizzati
In questo passaggio opzionale, imparerai come creare un grafico personalizzato, dove inserire le definizioni delle risorse e come confezionarlo per una distribuzione ulteriore.
Creerai un nuovo grafico chiamato example-chart
. Esegui il seguente comando per crearlo:
Questo creerà una nuova directory chiamata example-chart
con i seguenti file e struttura:
charts/
templates/
├─ tests/
│ ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml
Le definizioni delle risorse che il tuo grafico installerà sui cluster di destinazione si trovano nella directory templates
. Quelle predefinite create da Helm come punto di partenza installano un controller di ingresso Nginx. Anche se l’estensione del file è YAML, utilizzano la sintassi del templating di Go per rimanere personalizzabili tramite variabili esposte che puoi passare. Puoi verificare mostrando il contenuto di service.yaml
eseguendo:
Troverai direttive di templating per generare valori circondati da doppi graffe:
Le variabili referenziate sono esposte all’utente e definite in values.yaml
. Il testo NOTES
che Helm mostra dopo il rilascio è memorizzato in NOTES.txt
, ed è anche modellato tramite template. I metadati della chart, come nome, versione e versione del software in fase di distribuzione, sono specificati in Chart.yaml
:
Per verificare cosa Helm distribuirebbe, è possibile passare --dry-run
e --debug
a helm install
puntando alla directory della chart:
L’output sarà lungo e conterrà tutte le definizioni finali delle risorse che verrebbero applicate al cluster. Mentre lavori sulla tua chart, puoi usare helm upgrade
per inviare nuove versioni a Kubernetes.
Quando è il momento di condividere la tua chart finita, puoi impacchettarla per la distribuzione eseguendo:
L’output sarà:
OutputSuccessfully packaged chart and saved it to: .../example-chart-0.1.0.tgz
La chart impacchettata può essere installata proprio come quelle aggiunte dai repository:
In questo passaggio hai creato una chart personalizzata e l’hai distribuita. L’hai anche impacchettata e appreso la sua struttura.
Conclusione
Ora sai come usare Helm per installare e aggiornare il software distribuito nel tuo cluster Kubernetes. Hai aggiunto repository di chart e appreso perché sono importanti e come ArtifactHub può aiutarti a trovarli. Hai anche creato una nuova chart personalizzata e appreso riguardo alle revisioni del rilascio e come eseguire un rollback se necessario.
Per ulteriori informazioni sulla creazione di grafici personalizzati, visita la guida ufficiale.