Sari la conținutul principal

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.

notă

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.