Chart-ul Ticketing API și PostgreSQL
Chart-ul gestionează o aplicație cu două componente: API-ul stateless și baza de date stateful. Nu introducem o aplicație demonstrativă nouă, ci continuăm exact arhitectura studiată în Laboratorul 3.
Configurația generată
Template-ul configmap.yaml construiește configurația API-ului din valori și
din numele release-ului:
data:
APP_VERSION: {{ .Values.config.appVersion | quote }}
USE_POSTGRES: "true"
DB_HOST: {{ include "ticketing.postgresqlName" . | quote }}
DB_PORT: {{ .Values.postgresql.service.port | quote }}
API-ul nu depinde astfel de un IP și nici de un nume fix copiat manual.
Secret creat condiționat
Pentru laborator, chart-ul poate crea un Secret din parola fictivă din
values.yaml. Condiția relevantă este:
{{- if not .Values.postgresql.auth.existingSecret }}
apiVersion: v1
kind: Secret
...
{{- end }}
Dacă postgresql.auth.existingSecret este setat, chart-ul nu mai creează
Secret-ul și referă obiectul existent. Acesta este un exemplu de ramificare în
template-uri, dar nu transformă Helm într-un manager de secrete.
Deployment-ul API
Imaginea și numărul de replici provin din valori:
spec:
replicas: {{ .Values.api.replicaCount }}
template:
spec:
containers:
- name: api
image: "{{ .Values.api.image.repository }}:{{ .Values.api.image.tag }}"
Template-ul păstrează probele, requests/limits și security context-ul din Laboratorul 3.
În plus, Pod template-ul conține checksum-uri pentru ConfigMap și Secret:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
O schimbare a configurației modifică checksum-ul și determină un rolling update. Fără această legătură, actualizarea unui ConfigMap nu recreează automat Pod-urile care îl consumă prin variabile de mediu.
StatefulSet-ul PostgreSQL
Template-ul creează:
- un Service headless
- un StatefulSet cu o singură replică
- un PVC din
volumeClaimTemplates, dacă persistența este activată.
Condiția pentru stocare permite și un mod temporar:
postgresql:
persistence:
enabled: false
În acest caz este folosit un emptyDir, iar datele nu supraviețuiesc recreării
Pod-ului. În fluxul principal păstrăm enabled: true.
Chart-ul instalează o singură instanță PostgreSQL pentru scop didactic. Nu este o configurație de producție high-availability și nu include backup, replicare sau migrarea schemei.