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.Name
Release.Namespace
Release.IsUpgrade
Release.IsInstall
Release.Revision
Release.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.Major
Capabilities.KubeVersion.Minor
Capabilities.HelmVersion
Capabilities.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/