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.