Kihagyás

Umbrella chart

Az umbrella chart fő célja, hogy összefogjon több másik chartot (subchartokat). Leggyakrabban arra használják, hogy egy teljes microservice architektúrát (például egy webshopot, ami áll egy frontendből, egy backendből és egy adatbázisból) egyetlen helm install paranccsal lehessen telepíteni és egyben verziózni.

Bár a nagykönyv szerint az umbrella chartnak általában nincsenek saját template-jei, a gyakorlatban nagyon is hasznos tud lenni, ha ide teszünk be olyan globális erőforrásokat, amiket a subchartok közösen használnak (pl. egy közös Ingress szabály, vagy egy globális ConfigMap).

A példa forgatókönyve: "my-web-app"

Képzeljük el, hogy van egy umbrella chartunk, aminek a neve my-web-app. Ez két alkalmazást fog össze: egy frontendet és egy backendet.

1. A mappastruktúra

Így néz ki a fő chartunk mappája:

my-web-app/
├── Chart.yaml             # Itt definiáljuk a subchartokat
├── values.yaml            # Itt írjuk felül a subchartok alapbeállításait
├── charts/                # Ide tölti le a Helm a subchartokat (automatikusan)
└── templates/
    └── shared-config.yaml # Egy saját, közös erőforrás az umbrella chartban

2. Chart.yaml (A függőségek definiálása)

Ez az umbrella chart "szíve". Itt mondjuk meg, hogy mik a subchartok.

apiVersion: v2
name: my-web-app
description: Umbrella chart a frontend és backend együttes telepítéséhez
type: application
version: 1.0.0

# Itt soroljuk fel a subchartokat (dependency-ket)
dependencies:
  - name: frontend
    version: "1.2.3"
    repository: "https://my-company.github.io/helm-charts" # Honnan töltse le?

  - name: backend
    version: "2.0.0"
    repository: "https://my-company.github.io/helm-charts"
Megjegyzés: A repository lehet egy távoli URL, de lehet egy helyi mappaútvonal is (pl. file://../frontend), ha helyben fejleszted őket.


3. values.yaml (A custom értékek)

Itt jön a varázslat. Az umbrella chart values.yaml fájljából felül tudjuk írni a subchartok saját beállításait. A szabály nagyon egyszerű: a subchart neve lesz a fő kulcs, és alá kerül minden, ami ahhoz a charthoz tartozik.

# 1. Globális értékek, amit minden subchart (és maga az umbrella is) lát
global:
  environment: "production"
  companyName: "TechCorp"

# 2. A "frontend" subchart értékeinek felülírása
frontend:
  replicaCount: 3           # A frontendből 3 podot kérünk
  image:
    tag: "latest"
  service:
    type: LoadBalancer

# 3. A "backend" subchart értékeinek felülírása
backend:
  replicaCount: 2           # A backendből elég 2 pod is
  databaseUrl: "postgresql://db:5432/mydb"

4. templates/shared-config.yaml (Saját erőforrás az umbrella-ban)

A példában teszünk valamit az umbrella chart templates mappájába is (de sok esetben nincs erre szükség, viszont pl backend + frontend esetén akár a közös ingress is jól jön). Most csináljunk egy közös ConfigMap-et, amit esetleg mindkét alkalmazás be tud csatolni magának, és használjuk benne a global értékeket.

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-shared-config
  labels:
    app: {{ .Chart.Name }}
data:
  # Itt behúzzuk az umbrella values.yaml-ből a global.environment értékét
  ENVIRONMENT: {{ .Values.global.environment | quote }}
  COMPANY: {{ .Values.global.companyName | quote }}
  MESSAGE: "Ezt a ConfigMap-et az Umbrella chart generálta!"

Hogyan működik ez a gyakorlatban?

  1. Függőségek letöltése: Mielőtt telepítenéd, a Helmnek le kell töltenie a subchartokat a Chart.yaml-ben megadott repókból.

    helm dependency update ./my-web-app
    
    Ez létrehoz egy Chart.lock fájlt, és letölti a frontend/backend chartokat a charts/ mappába .tgz formátumban.

  2. Sablonok ellenőrzése (Template): Ha látni akarod, hogyan fésüli össze a Helm az umbrella és a subchartok fájljait:

    helm template my-release ./my-web-app
    
    Ez kilistázza a frontend Deploymentjét (3 replikával), a backend Deploymentjét (2 replikával), és az umbrella chartban lévő shared-config ConfigMap-et is.

  3. Telepítés:

    helm install my-release ./my-web-app
    

Összegzés: Ezzel a módszerrel egyetlen paranccsal felhúztad a teljes rendszert úgy, hogy az egyes alkalmazások (subchartok) paramétereit egyetlen, központi values.yaml fájlból vezérelted, és még közös kiegészítőket (ConfigMap) is hozzáadtál a fő szinten.