Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

GDPR a IT systémy — technická příprava na nařízení

10. 05. 2018 4 min čtení CORE SYSTEMScloud

Kubernetes YAML manifesty jsou mocné, ale spravovat desítky souborů pro každé prostředí je noční můra. Helm je „package manager pro Kubernetes” — balí manifesty do znovupoužitelných chartů s parametrizací. Helm 2.x je v roce 2018 de facto standard pro Kubernetes deployment.

Proč Helm

Představte si typickou aplikaci: Deployment, Service, ConfigMap, Secret, Ingress, HorizontalPodAutoscaler. To je 6 YAML souborů. Pro 3 prostředí (dev, staging, prod) s drobnými odlišnostmi to je 18 souborů. S Helmem máte jeden chart a 3 values soubory.

  • Parametrizace — jeden template, různé hodnoty per prostředí
  • Versioning — každý release má verzi, můžete rollbackovat
  • Dependencies — chart může záviset na jiných chartech (PostgreSQL, Redis)
  • Ekosystém — stable/ a incubator/ repozitáře s hotovými charty pro Prometheus, Grafana, nginx-ingress, cert-manager

Anatomie Helm chartu

myapp/
├── Chart.yaml          # Metadata chartu (name, version, description)
├── values.yaml         # Default hodnoty
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   ├── configmap.yaml
│   ├── _helpers.tpl    # Reusable template snippety
│   └── NOTES.txt       # Post-install instrukce
├── charts/             # Sub-charty (dependencies)
└── requirements.yaml   # Deklarace závislostí

Templates a values

Helm používá Go template engine. Hodnoty z values.yaml se interpolují do templateů:

# values.yaml
replicaCount: 3
image:
  repository: registry.company.com/myapp
  tag: "1.4.2"
  pullPolicy: IfNotPresent
resources:
  limits:
    cpu: 500m
    memory: 256Mi
  requests:
    cpu: 100m
    memory: 128Mi
ingress:
  enabled: true
  host: api.company.com
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "myapp.fullname" . }}
  labels:
    {{- include "myapp.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "myapp.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "myapp.selectorLabels" . | nindent 8 }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          resources:
            {{- toYaml .Values.resources | nindent 12 }}

Práce s Helmem

# Instalace chartu
$ helm install myapp ./myapp -f values-prod.yaml

# Upgrade s novými hodnotami
$ helm upgrade myapp ./myapp --set image.tag=1.4.3

# Rollback na předchozí verzi
$ helm rollback myapp 1

# Historie releasů
$ helm history myapp
REVISION  UPDATED                   STATUS      DESCRIPTION
1         Mon Oct 15 10:00:00 2018  SUPERSEDED  Install complete
2         Tue Oct 16 14:30:00 2018  SUPERSEDED  Upgrade complete
3         Wed Oct 17 09:00:00 2018  DEPLOYED    Rollback to 1

# Debug — vyrenderovat templates bez instalace
$ helm template myapp ./myapp -f values-staging.yaml

Dependencies — skládání chartů

Vaše aplikace potřebuje PostgreSQL a Redis? Nemusíte je definovat ručně:

# requirements.yaml
dependencies:
  - name: postgresql
    version: "3.18.3"
    repository: "https://charts.helm.sh/stable"
    condition: postgresql.enabled
  - name: redis
    version: "5.1.3"
    repository: "https://charts.helm.sh/stable"
    condition: redis.enabled

Příkaz helm dependency update stáhne sub-charty do charts/ adresáře. Hodnoty pro dependencies konfigurujete v hlavním values.yaml:

# values.yaml
postgresql:
  enabled: true
  postgresqlPassword: "secret"
  persistence:
    size: 10Gi
redis:
  enabled: true
  cluster:
    enabled: false

Helm v CI/CD pipeline

Helm se výborně integruje do CI/CD pipeline:

  • Lint: helm lint ./myapp — validace syntaxe a best practices
  • Dry-run: helm upgrade --install --dry-run — simulace bez skutečného deploymentu
  • Diff: helm-diff plugin ukáže, co se změní oproti aktuálnímu stavu
  • Automated rollback: helm upgrade --atomic --timeout 5m — automatický rollback pokud deployment selže

Tiller — bezpečnostní problém Helm 2

Helm 2 používá server-side komponentu Tiller, která běží v clusteru s cluster-admin právy. To je bezpečnostní riziko — kdokoliv s přístupem k Tiller API může deployovat cokoliv kamkoliv.

Mitigace:

  • Tiller per namespace s omezenými RBAC právy
  • --tiller-namespace flag pro izolaci
  • TLS mezi Helm klientem a Tillerem

Dobrou zprávou je, že Helm 3 (aktuálně v alpha) Tiller kompletně odstraňuje. Release informace se ukládají jako Kubernetes Secrets. Očekáváme stabilní release v roce 2019.

Best practices

  • Sémantické verzování — Chart.yaml version dodržuje semver (MAJOR.MINOR.PATCH)
  • Immutable tags — nepoužívejte :latest v produkci, vždy konkrétní tag
  • Resource limits — vždy definujte CPU/memory requests a limits
  • NOTES.txt — po instalaci zobrazí užitečné informace (URL, credentials)
  • Helm testhelm test myapp spustí testovací pody (smoke tests)
  • Chart repository — ChartMuseum nebo GitHub Pages pro hostování vlastních chartů

Helm je essential tool pro Kubernetes

Bez Helmu je správa Kubernetes manifestů pro reálné aplikace neúnosná. Helm Charts přinášejí parametrizaci, verzování, dependencies a ekosystém hotových řešení. Začněte s helm create, přidejte vlastní templates a integrujte do CI/CD. A sledujte Helm 3 — odstranění Tilleru bude game changer.

gdprcompliancesecuritydata protection