Crearea unui chart Helm
Vom începe prin a crea un chart Helm simplu, pe care îl vom folosi pentru a deprinde conceptele
de bază. Helm oferă comanda helm create pentru a genera un schelet (scaffold) de chart,
adică structura de fișiere și câteva șabloane implicite. Să creăm un chart nou numit mychart:
$ helm create mychart
Creating mychart
Helm a creat un director mychart/ cu următoarea structură de fișiere și directoare:
$ tree
.
└── mychart
├── Chart.yaml
├── charts
├── templates
│ ├ ── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── hpa.yaml
│ ├── httproute.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
5 directories, 11 files
Să analizăm pe scurt componentele unui chart Helm:
- Chart.yaml – fișierul de metadate al chart-ului. Conține numele (
name: mychart), versiunea chart-ului (version: 0.1.0implicit) și, opțional, o descriere, versiunea aplicației containerizate (appVersion), autorii etc. La nevoie, vom actualiza versiunea chart-ului în acest fișier când facem schimbări semnificative, însă pentru laborator nu este critic. - values.yaml – fișierul cu valori implicite pentru variabilele folosite în șabloanele
chart-ului. Aici sunt definite configurările care pot fi personalizate la instalare. De exemplu,
în chart-ul generat,
values.yamlinclude chei precumreplicaCount(numărul de replici al aplicației, implicit 1),image.repositoryșiimage.tag(imaginea Docker folosită), setări pentru portul expus, tipul de serviciu etc. Aceste valori vor fi injectate în manifestele Kubernetes prin mecanismul de templating. - .helmignore – similar cu un
.gitignore, listează fișiere sau tipare care nu ar trebui incluse atunci când se arhivează/împachetează chart-ul (de exemplu, fișiere temporare sau surse ne-necesare). - templates/ – directorul ce conține șabloanele YAML Kubernetes. Aceste fișiere sunt
modele care pot include sintaxă de templating (bazată pe Go templates) și care, la instalarea
chart-ului, vor fi completate folosind valorile din
values.yaml(suprascrise eventual de utilizator). Chart-ul de bază generat include șabloane pentru obiecte Kubernetes uzuale:deployment.yaml– definește un Deployment Kubernetes pentru rularea aplicației (în cazul nostru, va rula un container NGINX cureplicaCountspecificat în valori).service.yaml– definește un Service Kubernetes pentru a expune aplicația. Implicit, tipul serviciului în valori esteClusterIP(acces intern clusterului).ingress.yaml– definește opțional un Ingress (este prezent dar probabil comentat/inactiv implicit, dat fiind căvalues.yamlareingress.enabled: false).hpa.yaml– definește opțional un HorizontalPodAutoscaler (HPA) dacă este activat.serviceaccount.yaml– definește un ServiceAccount utilizat de Deployment (implicit)._helpers.tpl– fișier care conține funcții helper template, de exemplu pentru a genera nume unice ale resurselor combinând numele chart-ului și al release-ului. De obicei, acest fișier definește template-uri pentrufullnameal aplicației, prefixe, etichete standard etc., folosite de celelalte șabloane.tests/test-connection.yaml– un fișier ce definește un Helm test (un job Kubernetes) care poate fi rulat după instalare pentru a verifica dacă aplicația funcționează.
- templates/NOTES.txt – fișier text cu instrucțiuni care vor fi afișate după instalarea chart-ului. Acesta conține mesaje utile pentru utilizator, de exemplu cum să acceseze aplicația. În chart-ul nostru, NOTES.txt are câteva comenzi sugerate pentru a găsi numele Pod-ului Nginx și a face port-forward la acesta (vom vedea în practică imediat).
Observăm că chart-ul generat este conceput ca un exemplu generic (rulează un NGINX care
servește pagina de bun venit). În condiții reale, am edita aceste șabloane și valori pentru a
corespunde propriei aplicații (de exemplu, am înlocui imaginea nginx cu imaginea aplicației
noastre, am ajusta portul, configurări etc.). Momentan, vom folosi chart-ul mychart exact
cum a fost generat, pentru a înțelege fluxul Helm. Vom instala acest chart pe clusterul Kind și
ne vom asigura că instanța Nginx pornește corect.
Chart-ul creat are apiVersion: v2 în Chart.yaml, ceea ce înseamnă că este compatibil cu Helm 3
(nu necesită Tiller, componenta server din Helm 2 care a fost între timp eliminată). Așadar, vom
folosi direct comenzi Helm 3, fără nicio altă configurare specială.