Sobes.tech
Middle

Wie speichert man Helm-Vorlagen richtig in GitLab?

sobes.tech KI

Antwort von AI

Es wird empfohlen, Helm-Templates in einem separaten Git-Repository in GitLab zu speichern. Dies ermöglicht die Versionierung, die Anwendung von CI/CD-Pipelines für Linting und Packaging sowie die Zugriffskontrolle.

Die Repository-Struktur könnte wie folgt aussehen:

my-helm-charts/
├── Chart.yaml          // Metainformationen zum Chart
├── values.yaml         // Standardwerte
├── templates/          // Kubernetes-Manifestvorlagen
│   ├── deployment.yaml
│   ├── ingress.yaml
│   └── service.yaml
└── charts/             // Abhängige Charts (optional)
    └── redis/
        └── ...

Zur Automatisierung kann GitLab CI/CD verwendet werden. Beispiel .gitlab-ci.yml:

stages:
  - lint
  - package
  - deploy # Optional

variables:
  HELM_VERSION: "3.x.x" # Geben Sie die aktuelle Helm-Version an
  HELM_REGISTRY: "my-gitlab-registry" # Name Ihres Registrierungs in GitLab

before_script:
  - curl https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz | tar xz
  - mv linux-amd64/helm /usr/local/bin/helm
  - helm version

lint_chart:
  stage: lint
  image: docker.io/alpine/helm:latest # Verwenden Sie ein Helm-Image
  script:
    - helm lint ./my-chart-directory # Pfad zum Chart-Verzeichnis

package_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    - helm package ./my-chart-directory # Erstellen der .tgz-Datei
  artifacts:
    paths:
      - ./*.tgz # Speichern des gepackten Charts als Artefakt

publish_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    # Konfigurieren des Helm-Registries in GitLab
    - HE=helm-registry.$CI_SERVER_HOST helm registry login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
    - helm push my-chart-*.tgz oci://$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$HELM_REGISTRY # Push ins OCI-Registry
  variables:
    # Stellen Sie sicher, dass die Variablen CI_REGISTRY_USER und CI_REGISTRY_PASSWORD in GitLab CI/CD gesetzt sind
    GIT_STRATEGY: none # Repos nicht erneut klonen

# Beispiel für eine Deployment-Phase (optional)
# deploy_chart:
#   stage: deploy
#   image: alpine/helm:latest
#   script:
#     # Abhängigkeiten konfigurieren (z.B. kubectl, Cloud-Provider)
#     # helm upgrade --install my-release oci://$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$HELM_REGISTRY/my-chart --version latest -n my-namespace -f values.yaml
#   environment: production # Oder anderes Environment
#   when: manual # Oder on_branch, etc.

Zur Speicherung der gepackten Charts (.tgz) kann man verwenden:

  • GitLab Package Registry (Helm OCI Charts): Empfohlene Methode. Ermöglicht die Speicherung der Charts im OCI-Format direkt in GitLab.
  • Generische Pakete: Falls Helm OCI nicht unterstützt wird oder aus anderen Gründen.
  • Privates statisches Dateispeicher: Zum Beispiel S3-kompatibler Speicher oder GitLab Pages.

Wenn das GitLab Package Registry (Helm OCI) verwendet wird, um es als Helm-Repository hinzuzufügen:

helm registry login registry.gitlab.com
helm repo add my-gitlab-charts oci://registry.gitlab.com/<dein-namespace>/<dein-helm-chart-projekt>

Ersetzen Sie <dein-namespace> und <dein-helm-chart-projekt> durch die entsprechenden Werte.