Comandi di Base

Aggiunta df un Repository

Aggiungere un repository:

helm repo add bitnami https://charts.bitnami.com/bitnami

Listare i repositories:

helm repo list

Ricerca del chart drupal:

helm search repo drupal

Ricerca dei chart di Content Management System:

helm search repo content

Ricerca delle versioni disponibili di chart drupal:

helm search repo drupal --versions

La lista può essere lunga.

CHART VERSION è la versione del chart di Helm. APP VERSION è la versione dell'applicativo pacchettizzato nel chart.

Installazione della Release drupal

E' necessario avere un Load Balancer attivo. Noi abbiamo Metallb.

Installazione:

helm install mysite bitnami/drupal
NAME: mysite
LAST DEPLOYED: Sat Feb 10 16:18:03 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: drupal
CHART VERSION: 17.3.4
APP VERSION: 10.2.3** Please be patient while the chart is being deployed **

1. Get the Drupal URL:

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace default -w mysite-drupal'

  export SERVICE_IP=$(kubectl get svc --namespace default mysite-drupal --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")
  echo "Drupal URL: http://$SERVICE_IP/"

2. Get your Drupal login credentials by running:

  echo Username: user
  echo Password: $(kubectl get secret --namespace default mysite-drupal -o jsonpath="{.data.drupal-password}" | base64 -d)

Vi sono istruzioni utili per l'utente o amministratore, e conviene leggerle.

E' possibile installare più applicativi uguali nello stesso cluster, a patto che siano in namespace separati. Per esempio:

kubectl create ns first
helm install --namespace first mysite bitnami/drupal

Listare le installazioni:

helm list
helm list --all-namespaces

Documentazione

La documentazione del particolare chart che stiamo installando è a https://artifacthub.io/packages/helm/bitnami/drupal.

ArtifactHub è un sito con documentazione su una svariata quantità di software, in vari formati di pacchettizzazione.

Oltre ad esempi, descizioni e raccomandazioni, vi è una lunga lista di parametri di configurazione.

Rimuovere una Release

helm uninstall mysite

Configurazione di Release

Preparare un file Yaml di configurazione in una directory appropriata:

mkdir -p ~/scripts/drupal
vim ~/scripts/drupal/values.yml
drupalUsername: admin
drupalEmail: admin@example.com
mariadb:
  db:
    name: "my-database"

Installare una release Helm con il file di configurazione:

helm install mysite bitnami/drupal \
  --values ~/scripts/drupal/values.yml

Si puà anche non avere un file di configurazione e modificare parametri di configurazione sulla linea di comando:

helm install mysite bitnami/drupal --set drupalUsername=admin

Per le sottosezioni usare parametri con notazione punto, ad esempio --set mariadb.db.name=my-database.

Si possono avere più opzioni --set.

Si possono avere entrambi il file di configurazione e parametri passati con l'opzione --set. In caso di collisione l'ultimo valore vince.

Upgrade di Installazione

Una release è una particolare combinazione di configurazione e versione di chart per una installazione.

L'installazione di un chart produce una release iniziale.

Un upgrade produce una nuova release della stessa installazione.

Upgrade di Configurazione

Esempio. Un upgrade che cambia solo un parametro di configurazione:

helm upgrade mysite bitnami/drupal --set ingress.enabled=true

In realtà non è così facile. L'errore risultante è esplicativo dei parametri mancanti al comando.

Il nostro applicativo usa tre files di secrets:

  • per la password dell'utente drupal
  • per la password dell'amministratore del database engine maria-db
  • per la password dell'utente che accede al database my-database

Questi tre files vanno preservati durante l'upgrade e quindi le tre password vanno anch'esse settate, invariate. Per scoprirle si caricano i loro valori correnti in variabili d'ambiente con:

export DRUPAL_PASSWORD=$(kubectl get secret \
  --namespace "default" mysite-drupal \
  -o jsonpath="{.data.drupal-password}" | base64 -d)
export MARIADB_ROOT_PASSWORD=$(kubectl get secret \
  --namespace "default" mysite-mariadb \
  -o jsonpath="{.data.mariadb-root-password}" | base64 -d)
export MARIADB_PASSWORD=$(kubectl get secret \
  --namespace "default" mysite-mariadb \
  -o jsonpath="{.data.mariadb-password}" | base64 -d)

E quindi il comando di upgrade è:

helm upgrade mysite bitnami/drupal --set ingress.enabled=true \
  --set drupalPassword=$DRUPAL_PASSWORD \
  --set mariadb.auth.rootPassword=$MARIADB_ROOT_PASSWORD \
  --set mariadb.auth.password=$MARIADB_PASSWORD

Il comando ha così successo.

Anzichè lo upgrade di un solo parametro si può passare un file di configurazione Yaml, come con il caso di installazione, naturalmente con gli stessi problemi di mantenimento dei Secrets.

helm upgrade mysite bitnami/drupal \
  --values ~/scripts/drupal/values.yml \
  --set drupalPassword=$DRUPAL_PASSWORD \
  --set mariadb.auth.rootPassword=$MARIADB_ROOT_PASSWORD \
  --set mariadb.auth.password=$MARIADB_PASSWORD

Upgrade di Versione

E' opportuno prima compiere un update di tutti i repositories configurati, per rinfrescare la lista dei chart disponibili:

helm repo update

Per compiere l'upgrade all'ultima versione disponibile:

helm upgrade mysite bitnami/drupal

Naturalmente si possono usare le opzioni --values e/o --set.

Listare le versioni disponibili:

helm search repo drupal --versions

Compiere l'upgrade as una versione data:

helm upgrade mysite bitnami/drupal --version 12.2.10

Si deve dare la versione del chart, non dell'applicativo.

Rimozione di una Release

Dal namespace di default:

helm uninstall mysite

Da un namespace specifico:

helm uninstall mysite --namespace first

La rimozione può richiedere del tempo, mentre Kubernetes elimina tutte le risorse. Durante questo tempo non è possibile compiere un'altra installazione dello stesso applicativo.

Informazioni di Release

Le informazioni sulle varie release sono mantenute come Secrets:

kubectl get secrets
NAME                           TYPE                 DATA   AGE
mysite-drupal                  Opaque               1      64m
mysite-mariadb                 Opaque               2      64m
sh.helm.release.v1.mysite.v1   helm.sh/release.v1   1      64m
sh.helm.release.v1.mysite.v2   helm.sh/release.v1   1      59m
sh.helm.release.v1.mysite.v3   helm.sh/release.v1   1      37m
sh.helm.release.v1.mysite.v4   helm.sh/release.v1   1      18m
sh.helm.release.v1.mysite.v5   helm.sh/release.v1   1      9m11s

Questo rende possible il rollback ad una revisione precedente.

La rimozione di un chart rimuove anche tutte le informazioni di Secrets connesse.