Zum Inhalt

Helper-Funktionen

Helper-Funktionen ermöglichen es, einzelne Kubernetes-Ressourcen unabhängig vom Chart-Modus zu erstellen.

Was sind Helper-Funktionen?

Helper sind standalone Funktionen, die einzelne Kubernetes-Ressourcen wie Secrets, ConfigMaps, Namespaces etc. erstellen können - ohne dass chart.enabled gesetzt sein muss.

Vorteile:

  • Unabhängig vom Chart-Modus - Funktionieren auch ohne vollständiges Deployment
  • Ergänzung für Third-Party Charts - Fügen Sie Secrets oder ConfigMaps zu bestehenden Charts hinzu
  • Infrastruktur-Setup - Erstellen Sie Namespaces und Basis-Ressourcen
  • Wiederverwendbar - Ein Helper kann mehrfach verwendet werden

Verfügbare Helper

Helper Beschreibung Dokumentation
namespaces Erstellt Kubernetes Namespaces Namespaces
secrets Erstellt generische Secrets mit Auto-Generierung Secrets
imageCredentials Erstellt Docker Registry Secrets Image Credentials
tlsSecrets Erstellt TLS Secrets für HTTPS TLS Secrets
configs Erstellt ConfigMaps ConfigMaps
ingress Erstellt Ingress-Ressourcen Ingress
monitoring Erstellt Prometheus ServiceMonitors ServiceMonitor
manifests Erstellt beliebige Kubernetes-Ressourcen Plain Manifests
job Erstellt standalone Jobs Siehe usage.md

Basis-Verwendung

Helper werden auf der Root-Ebene der values.yaml konfiguriert (nicht unter chart):

# Chart.yaml
apiVersion: v2
name: infrastructure
version: 1.0.0

dependencies:
  - name: ohmyhelm
    alias: infra
    repository: https://gitlab.com/ayedocloudsolutions/ohmyhelm
    version: 1.13.0
# values.yaml
infra:
  # Kein chart.enabled - nur Helper

  # Namespaces erstellen
  namespaces:
    spaces:
      - name: production
      - name: staging

  # Secrets erstellen
  secrets:
    - name: app-secret
      namespace: production
      values:
        api-key: "my-key"
        password: ""  # Wird automatisch generiert

  # ConfigMaps erstellen
  configs:
    - name: app-config
      namespace: production
      values:
        app.yaml: |
          server:
            port: 8080

Helper mit Chart kombinieren

Sie können Helper und Chart-Modus gleichzeitig verwenden:

myapp:
  # Helper für Basis-Ressourcen
  namespaces:
    spaces:
      - name: myapp-ns

  secrets:
    - name: db-credentials
      namespace: myapp-ns
      values:
        username: admin
        password: ""

  # Chart für Deployment
  chart:
    enabled: true
    fullnameOverride: "myapp"

    container:
      image: myapp:latest
      env:
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: db-credentials
              key: username

Mehrere Helper-Instanzen

Verwenden Sie verschiedene Aliase für mehrere Helper-Sets:

# Chart.yaml
dependencies:
  - name: ohmyhelm
    alias: dev-infra
    repository: https://gitlab.com/ayedocloudsolutions/ohmyhelm
    version: 1.13.0

  - name: ohmyhelm
    alias: prod-infra
    repository: https://gitlab.com/ayedocloudsolutions/ohmyhelm
    version: 1.13.0
# values.yaml
dev-infra:
  namespaces:
    spaces:
      - name: development

  secrets:
    - name: api-keys
      namespace: development
      values:
        key: "dev-key"

prod-infra:
  namespaces:
    spaces:
      - name: production

  secrets:
    - name: api-keys
      namespace: production
      values:
        key: "prod-key"

Häufige Anwendungsfälle

1. Third-Party Charts ergänzen

Fügen Sie Secrets zu einem Chart hinzu, das Sie nicht modifizieren möchten:

# Chart.yaml
dependencies:
  - name: postgresql
    repository: https://charts.bitnami.com/bitnami
    version: 12.0.0

  - name: ohmyhelm
    alias: db-helpers
    repository: https://gitlab.com/ayedocloudsolutions/ohmyhelm
    version: 1.13.0
# values.yaml
postgresql:
  # PostgreSQL Chart Konfiguration
  auth:
    existingSecret: postgres-secret
    secretKeys:
      adminPasswordKey: password

db-helpers:
  secrets:
    - name: postgres-secret
      namespace: default
      values:
        password: ""  # Auto-generiert

2. Namespace-Setup

Erstellen Sie Namespaces mit Pre-Install Hook:

infra:
  namespaces:
    setPreInstallHook: true  # Erstellt Namespaces vor allem anderen
    spaces:
      - name: production
      - name: staging
      - name: development

3. Image Pull Secrets für alle Namespaces

registry:
  imageCredentials:
    - name: registry-secret
      namespace: production
      registry: https://registry.example.com
      username: "ci-user"
      accessToken: "{{ .Values.registryToken }}"

    - name: registry-secret
      namespace: staging
      registry: https://registry.example.com
      username: "ci-user"
      accessToken: "{{ .Values.registryToken }}"

4. Shared ConfigMaps

shared:
  configs:
    - name: cluster-config
      namespace: default
      values:
        cluster.yaml: |
          name: "{{ .Values.clusterName }}"
          region: "{{ .Values.region }}"
          env: "{{ .Values.environment }}"

Helper-Listen

Die meisten Helper unterstützen Listen, um mehrere Ressourcen zu erstellen:

myapp:
  # Mehrere Secrets
  secrets:
    - name: database-secret
      namespace: default
      values:
        username: dbuser
        password: ""

    - name: api-secret
      namespace: default
      values:
        api-key: ""
        api-url: "https://api.example.com"

  # Mehrere ConfigMaps
  configs:
    - name: app-config
      namespace: default
      values:
        app.yaml: |
          setting: value

    - name: nginx-config
      namespace: default
      values:
        nginx.conf: |
          server {
            listen 80;
          }

Best Practices

  1. Verwenden Sie Helper für Basis-Infrastruktur - Namespaces, Secrets, ConfigMaps
  2. Kombinieren Sie Helper mit Third-Party Charts - Ergänzen Sie externe Charts
  3. Nutzen Sie Pre-Install Hooks für Namespaces - setPreInstallHook: true
  4. Lassen Sie Secrets auto-generieren - Leere Werte werden automatisch befüllt
  5. Verwenden Sie Helm-Templating - {{ .Values.variable }} funktioniert in Helper-Werten
  6. Organisieren Sie Helper in Aliase - Trennen Sie nach Umgebung oder Funktion

Siehe auch