Zum Inhalt

Chart-integrierte Helper

Im Chart-Modus können Sie Secrets, ConfigMaps und ServiceMonitors direkt definieren, ohne die separaten Helper zu verwenden.

Übersicht

Namespace-Einschränkung

Bei Chart-integrierten Helpern können Sie keinen individuellen Namespace setzen. Die Ressourcen werden im Namespace des Helm-Releases erstellt (via helm install --namespace).

Wenn Sie Ressourcen in anderen Namespaces benötigen, verwenden Sie stattdessen die standalone Helper-Funktionen.

Secrets

Erstellen Sie Secrets direkt im Chart:

chart:
  enabled: true

  secrets:
    - name: database-credentials
      values:
        username: admin
        password: ""  # Leer = wird automatisch generiert

    - name: api-keys
      values:
        stripe-key: "sk_live_xxx"
        sendgrid-key: "SG.xxx"

Secret im Container verwenden

chart:
  secrets:
    - name: db-credentials
      values:
        username: admin
        password: ""

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

ConfigMaps

Erstellen Sie ConfigMaps für Konfigurationsdateien:

chart:
  enabled: true

  configs:
    - name: app-config
      dontOverrideOnUpdate: false
      values:
        config.yaml: |
          server:
            host: 0.0.0.0
            port: 8080
          database:
            host: postgres.default.svc.cluster.local
            port: 5432

    - name: nginx-config
      dontOverrideOnUpdate: true  # Wird bei helm upgrade nicht überschrieben
      values:
        nginx.conf: |
          server {
            listen 80;
            location / {
              proxy_pass http://localhost:8080;
            }
          }

ConfigMap als Volume mounten

chart:
  configs:
    - name: app-config
      values:
        config.yaml: |
          server:
            port: 8080

  container:
    image: myapp:latest
    volumeMounts:
      - name: config
        mountPath: /etc/app

  deploymentVolume:
    volumes:
      - name: config
        configMap:
          name: app-config

dontOverrideOnUpdate

Mit dontOverrideOnUpdate: true bleibt die ConfigMap bei helm upgrade unverändert:

chart:
  configs:
    - name: user-config
      dontOverrideOnUpdate: true  # Benutzer-Änderungen bleiben erhalten
      values:
        settings.yaml: |
          # Diese Datei wird bei Updates nicht überschrieben
          theme: dark
          language: de

Prometheus ServiceMonitor

Erstellen Sie ServiceMonitors für Prometheus-Monitoring:

chart:
  enabled: true

  container:
    image: myapp:latest
    ports:
      - name: http
        containerPort: 8080
      - name: metrics
        containerPort: 9090

  monitoring:
    - name: myapp-metrics
      namespace: monitoring  # Namespace des Prometheus-Operators
      release: prometheus    # Prometheus-Release-Name für Label-Matching
      endpoints:
        - port: metrics
          interval: 30s
          path: /metrics
          scheme: http

Mehrere Endpoints

chart:
  monitoring:
    - name: myapp
      namespace: monitoring
      release: prometheus
      endpoints:
        - port: metrics
          interval: 15s
          path: /metrics
        - port: http
          interval: 60s
          path: /healthz
          scheme: https

Vollständiges Beispiel

chart:
  enabled: true
  fullnameOverride: "my-api"

  # Secrets für Credentials
  secrets:
    - name: db-credentials
      values:
        username: api_user
        password: ""  # Auto-generiert
    - name: jwt-secret
      values:
        secret: ""  # Auto-generiert

  # ConfigMaps für Konfiguration
  configs:
    - name: api-config
      values:
        config.yaml: |
          server:
            port: 8080
            host: 0.0.0.0
          logging:
            level: info
            format: json

  # Container mit Secret/ConfigMap-Referenzen
  container:
    image: myapp/api:v1.0.0
    ports:
      - name: http
        containerPort: 8080
      - name: metrics
        containerPort: 9090
    env:
      - name: DB_USERNAME
        valueFrom:
          secretKeyRef:
            name: db-credentials
            key: username
      - name: DB_PASSWORD
        valueFrom:
          secretKeyRef:
            name: db-credentials
            key: password
      - name: JWT_SECRET
        valueFrom:
          secretKeyRef:
            name: jwt-secret
            key: secret
    volumeMounts:
      - name: config
        mountPath: /etc/app

  deploymentVolume:
    volumes:
      - name: config
        configMap:
          name: api-config

  # Prometheus Monitoring
  monitoring:
    - name: my-api
      namespace: monitoring
      release: prometheus
      endpoints:
        - port: metrics
          interval: 30s
          path: /metrics

Wann Chart-Helper vs. Standalone Helper?

Szenario Empfehlung
Secrets/ConfigMaps im Release-Namespace Chart-Helper
Secrets/ConfigMaps in anderen Namespaces Standalone Helper
Third-Party Charts ergänzen Standalone Helper
Namespace-übergreifende Ressourcen Standalone Helper
Einfache Deployments Chart-Helper

Siehe auch