Sobes.tech
Middle

Como armazenar corretamente os modelos Helm no GitLab?

sobes.tech IA

Resposta da IA

Recomenda-se armazenar os modelos Helm em um repositório Git separado no GitLab. Isso permite versioná-los, aplicar pipelines CI/CD para linting e empacotamento, bem como gerir o acesso.

A estrutura do repositório pode ser assim:

my-helm-charts/
├── Chart.yaml          // Informação meta do chart
├── values.yaml         // Valores padrão
├── templates/          // Modelos de manifestos do Kubernetes
│   ├── deployment.yaml
│   ├── ingress.yaml
│   └── service.yaml
└── charts/             // Charts dependentes (opcional)
    └── redis/
        └── ...

Para automatizar, pode usar GitLab CI/CD. Exemplo de .gitlab-ci.yml:

stages:
  - lint
  - package
  - deploy # Opcional

variables:
  HELM_VERSION: "3.x.x" # Indique a versão atual do Helm
  HELM_REGISTRY: "my-gitlab-registry" # Nome do seu registo no 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 # Use uma imagem com Helm
  script:
    - helm lint ./my-chart-directory # Caminho para o diretório do seu chart

package_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    - helm package ./my-chart-directory # Criar arquivo .tgz
  artifacts:
    paths:
      - ./*.tgz # Guardar o chart empacotado como artefato

publish_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    # Configurar o registo Helm no 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 ao registo OCI
  variables:
    # Certifique-se de que as variáveis CI_REGISTRY_USER e CI_REGISTRY_PASSWORD estão configuradas no GitLab CI/CD
    GIT_STRATEGY: none # Não re-clonar o repositório

# Exemplo de etapa de deploy (opcional)
# deploy_chart:
#   stage: deploy
#   image: alpine/helm:latest
#   script:
#     # Configurar dependências (ex., kubectl, provedores 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 # Ou outro ambiente
#   when: manual # Ou on_branch, etc.

Para armazenar os charts empacotados (.tgz), pode usar:

  • Registro de Pacotes do GitLab (charts Helm OCI): Método recomendado. Permite armazenar charts em formato OCI diretamente no GitLab.
  • Pacotes genéricos: Se Helm OCI não for suportado ou por outras razões.
  • Armazenamento privado de ficheiros estáticos: Por exemplo, armazenamento compatível com S3 ou GitLab Pages.

Ao usar o Registro de Pacotes do GitLab (charts Helm OCI), para adicioná-lo como repositório Helm:

helm registry login registry.gitlab.com
helm repo add my-gitlab-charts oci://registry.gitlab.com/<o-seu-namespace>/<seu-projeto-de-helm-charts>

Substitua <o-seu-namespace> e <seu-projeto-de-helm-charts> pelos valores correspondentes.