De la manifeste la chart
Ce parametrizăm
În Laboratorul 3, numele resurselor, imaginea, numărul de replici, porturile și dimensiunea PVC-ului erau scrise direct în YAML. În chart, responsabilitățile sunt separate:
| Din Lab 3 | În chart-ul Helm |
|---|---|
| metadate și versiuni | Chart.yaml |
| valori care diferă între instalări | values.yaml |
| reguli pentru valori acceptate | values.schema.json |
| manifeste Kubernetes | templates/*.yaml |
| nume și etichete reutilizabile | templates/_helpers.tpl |
| instrucțiuni după instalare | templates/NOTES.txt |
Listați structura chart-ului:
find charts/ticketing -maxdepth 3 -type f | sort
Chart.yaml
Fișierul descrie pachetul:
apiVersion: v2
name: ticketing
type: application
version: 0.1.0
appVersion: "1.0.0"
kubeVersion: ">=1.28.0-0"
version este versiunea chart-ului, iar appVersion documentează versiunea
aplicației. Ele nu trebuie confundate: chart-ul se poate schimba fără să se
schimbe imaginea aplicației și invers.
values.yaml
Valorile implicite sunt grupate după componentă:
config:
appVersion: "1.0.0"
api:
replicaCount: 2
image:
repository: ghcr.io/cloud-computing-upb/lab4
tag: "1.0.0"
service:
type: ClusterIP
port: 80
postgresql:
auth:
database: tickets
username: tickets
persistence:
enabled: true
size: 1Gi
Inspectați toate valorile:
helm show values charts/ticketing
Helpers și nume generate
Fișierul _helpers.tpl definește fragmente reutilizabile. De exemplu,
ticketing.apiName produce numele Service-ului și Deployment-ului API, iar
ticketing.postgresqlName produce numele componentei de date.
Pentru release-ul ticketing, vom obține:
ticketing-api
ticketing-postgresql
ticketing-config
ticketing-db
Template-urile folosesc și etichetele recomandate:
app.kubernetes.io/name: ticketing
app.kubernetes.io/instance: ticketing
app.kubernetes.io/component: api
app.kubernetes.io/managed-by: Helm
Selectorii se bazează pe etichete stabile, nu pe numele generate ale Pod-urilor.
Schema valorilor
values.schema.json verifică tipuri și limite, de exemplu că numărul de
replici este un întreg între 1 și 10. Încercați intenționat o valoare invalidă:
helm template ticketing charts/ticketing --set api.replicaCount=zero
Randarea trebuie să eșueze înainte ca vreo resursă să ajungă în cluster.