Sobes.tech
Middle

Come archiviare correttamente i modelli Helm in GitLab?

sobes.tech AI

Risposta dell'AI

Si consiglia di archiviare i modelli Helm in un repository Git separato in GitLab. Ciò consente di versionarli, applicare pipeline CI/CD per linting e packaging, e gestire l'accesso.

La struttura del repository può essere così:

my-helm-charts/
├── Chart.yaml          // Informazioni meta del chart
├── values.yaml         // Valori di default
├── templates/          // Modelli di manifest Kubernetes
│   ├── deployment.yaml
│   ├── ingress.yaml
│   └── service.yaml
└── charts/             // Charts dipendenti (opzionale)
    └── redis/
        └── ...

Per automatizzare, si può usare GitLab CI/CD. Esempio di .gitlab-ci.yml:

stages:
  - lint
  - package
  - deploy # Opzionale

variables:
  HELM_VERSION: "3.x.x" # Indica la versione corrente di Helm
  HELM_REGISTRY: "my-gitlab-registry" # Nome del registry 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 # Usa un'immagine con Helm
  script:
    - helm lint ./my-chart-directory # Percorso alla directory del chart

package_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    - helm package ./my-chart-directory # Creazione dell'archivio .tgz
  artifacts:
    paths:
      - ./*.tgz # Salvataggio del chart impacchettato come artefatto

publish_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    # Configurazione del registry Helm 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 nel registry OCI
  variables:
    # Assicurarsi che le variabili CI_REGISTRY_USER e CI_REGISTRY_PASSWORD siano configurate in GitLab CI/CD
    GIT_STRATEGY: none # Non clonare di nuovo il repository

# Esempio di fase di deploy (opzionale)
# deploy_chart:
#   stage: deploy
#   image: alpine/helm:latest
#   script:
#     # Configurare le dipendenze (ad esempio, kubectl, provider cloud)
#     # 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 # O altro ambiente
#   when: manual # O on_branch, ecc.

Per archiviare i chart impacchettati (.tgz), si può usare:

  • Registry di pacchetti di GitLab (charts Helm OCI): Metodo raccomandato. Permette di archiviare i chart in formato OCI direttamente in GitLab.
  • Pacchetti generici: Se Helm OCI non è supportato o per altri motivi.
  • Storage privato di file statici: Ad esempio, storage compatibile S3 o GitLab Pages.

Se si utilizza il Registry di pacchetti di GitLab (charts Helm OCI), per aggiungerlo come repository Helm:

helm registry login registry.gitlab.com
helm repo add my-gitlab-charts oci://registry.gitlab.com/<tuo-namespace>/<tuo-progetto-helm>

Sostituire <tuo-namespace> e <tuo-progetto-helm> con i valori appropriati.