Refactoring del Chart
Organizzazione
Vogliamo incrementalmente migliorare il chart prodotto, introducendo della parametrizzazione.
Il controllo versioni che usiamo è elementare:
cp -rf wordpress wordpress.1
- salviamo la versione stabile corrente in
wordpress.1- poi sarà
wordpress.2,wordpress.3, ecc.
- poi sarà
- modifichiamo
wordpress - rimaniamo sempre posizionati nella directory corrente, dando percorsi relativi
Generiamo anche un chart anvil, quello di esempio standard, da cui trarre spunto:
helm create anvil
Il file di templati viene copiato:
cp anvil/templates/_helpers.tpl wordpress/templates
OIn tale file, ogni occorrenza della stringa anvil deve essere sostituita con wordpress.
Il file wordpress/values.yaml invece lo generiamo passo a passo.
Note
Il chart di esempio presume che il nostro applicativo abbia un solo servizio, invece ne ha due: mysql e wordpress.
Ma possiamo considerare wordpress come servizio primario.
Prima Iterazione: Note per l'Utente
NOTES.txt
Copiamo il file dall'esempio standard e modifichiamolo:
cp anvil/templates/NOTES.txt wordpress/templates
Ogni occorrenza della stringa anvil deve essere sostituita con wordpress.
Per risolvere i riferimenti .Values del file editiamo e inseriamone i valori in values.yaml:
vim wordpress/values.yaml
service:
type: LoadBalancer
port: 8080
ingress:
enabled: false
Occorre anche editare il Manifest del service di wordpress:
vim wordpress/templates/04wpress.yaml
E cambiare la sezione Service in :
apiVersion: v1
kind: Service
metadata:
name: {{ include "wordpress.fullname" . }}
labels:
app: wordpress
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: 80
selector:
app: wordpress
tier: frontend
Installazione e prova:
helm install myword wordpress
Escono i NOTES.
I comandi shell suggeriti funzionano:
export SERVICE_IP=$(kubectl get svc --namespace default myword-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo http://$SERVICE_IP:8080
http://172.18.255.201:8080
Diamo il comando di verifica:
kubectl get services
Notiamo che il servizio si chiama ora myword-wordpress e non semplicemente wordpress.
Apriamo un browser a http://172.18.255.201:8080 per verificare se funziona.
Oggetti Built-in
Helm ha una serie di oggetti predefiniti, come ad esempio {{ .Release.Name }} che abbiamo visto in NOTES.txt.
Sezione Release:
Release.NameRelease.NamespaceRelease.IsUpgradeRelease.IsInstallRelease.RevisionRelease.Service- sempre Helm
Sezione Values: oggetti definiti in values.yaml secondo la gerarchia Yaml e con notazione punto.
Sezione Chart: oggetti definiti in Chart.yaml secondo la gerarchia Yaml e con notazione punto.
Sezione Capabilities:
Capabilities.APIVersions- insieme di versioniCapabilities.APIVersions.Has $version- indica se la versione$versionè disponibileCapabilities.KubeVersion- di KubernetesCapabilities.KubeVersion.MajorCapabilities.KubeVersion.MinorCapabilities.HelmVersionCapabilities.HelmVersion.GoVersion- versione del compilatore Go usata
Sezione Template:
Template.Name- il nome completo del Template corrente, incluso il percorsoTemplate.BasePath- solo il nome del Template corrente
Ha inoltre una serie di funzioni di gestione dei file:
Files.Get- ritorna il contenuto del file specificato come caratteri UTF-8 (rune in Go)Files.GetBytes- ritorna il contenuto del file specificato come array di bytesFiles.Glob- ritorna una lista di files specificata da caratteri jollyFiles.Lines- ritorna un file linea per linea, utile nelle iterazioniFiles.AsSecrets- ritorna il contenuto di un file codificato in Base64Files.AsConfig- ritorna un file codificato come mappa Yaml
NOTA
Una piccola guida all'arte di scrivere templati in Helm si trova a
https://helm.sh/docs/chart_template_guide/La documentazione generale è a
https://helm.sh/docs/