kubernetes helm

in Architetture Software, Informatica

Helm, il package manager per Kubernetes

Reading Time: 2 minutes

Per poter effettuare il deploy di oggetti all’interno di Kubernetes è necessario scrivere file in formato YAML ( o in formato json) ed applicarli tramite kubectl. La scrittura di manifest per il deployments, replica sets e services può diventare un’attività complessa ed onerosa in termini di tempo. Proprio per questo in kubernetes sono stati introdotti package manager per lo sviluppo di package che possono semplificare le attività di deploy all’interno del cluster.

Helm un package manager. Come per altri package manager, come ad esempio nuget, consente di eseguire le attività di :

  • recupero pacchetti software da repository
  • configurare il deploy del software
  • installare il software e le sue dipendenze
  • effettuare l’aggiornamento dei software e delle loro dipendenze

Architettura di Helm

Helm è composto da due componenti distinti:

  • helm cli: l’interfaccia a linea di comando
  • tiller: il componente server presente all’interno di kubernetes e con il quale è possibile interagire tramite helm cli

Helm Charts

Per poter interagire con Helm vengono utilizzati pacchetti software, chiamati charts. Sul portale di Helm è presente un repository, accessibile da questo link , dal quale è possibile scaricare pacchetti già pronti per essere eseguiti. Il template base di un Charts è quella riportata di seguito:

package-name/ 
   charts/
   templates/
   Chart.yaml
   LICENSE
   README.md
   requirements.yaml
   values.yaml

Helm utilizza Go come linguaggio di programmazione per il suo funzionamento, quindi la sintassi da utilizzare per la creazione dei file è quella di Go. Utilizzando Helm è possibile installare chart a partire da una directory locale oppure tramite un repository remoto.

In particolare escludendo LICENSE e README.md di seguito il significato del pacchetto:

  • values.yaml: contiene i valori della configurazione usati dal pacchetto
  • requirements.yaml: contiene l’elenco delle dipendenze del pacchetto
  • Chart.yaml: all’interno di questo file sono posizionati tutti i metadata necessari al chart, come il nome, la versione del pacchetto da implementare
  • charts/: questa cartella contiene le dipedenze del chart, che possono essere utilizzate (o che non possono essere utilizzate), accessibili tramite una sorgente internet. All’interno del file requirements.yaml è possibile specificare le dipendenze da utlizzare
  • templates/: questa directory contiene i template che sono stati referenziati all’interno di values.yaml.

Il nome dei files ed il nome delle directory è importante per il riconoscimento da parte dei Helm dei singoli componenti di un chart.

Helm installa i charts a partire da un repository dove sono posizionati i charts ed i loro metadata. Ci sono due tipologie di repository:

  • stable: e può essere recuperato all’interno di github
  • incubator: posizionato all’interno dello stesso repository che contiene tutti i charts che non sono ancora stati “eletti” come stable

In aggiunta a queste due tipologie di repository è possibile utilizzare Bitnami Helm charts che non sono presenti all’interno dei repository ufficiali.

Installazione di Helm

Se non è presente all’interno dell’ambiente di sviluppo, è possibile installare Helm utilizzando il comando:

$> brew install kubernetes-helm

Un’alternativa all’installazione tramite la linea di comando è quello di utilizzare Chocolatery con il comando:

$> choco install kubernetes-helm

Una volta installato Helm è necessario installare Tiller ed eseguirlo all’interno del cluster:

$> helm init --upgrade
$> kubectl describe deployment tille-deploy -n kube-system

Il secondo comando consente di verificare l’esecuzione di tiller all’interno del cluster Kubernetes. Per verificare la versione di Helm installata sulla macchina locale è possibile utilizzare :

$> helm version

In un prossimo post vedremo come eseguire un chart.