Gestione di Repositories

I charts sviluppati in casa devono essere storati in un Chart Repository per la distribuzione a terze parti.

Lo scenario più comune è un progetto aziendale, quindi i charts devono essere su repository privati.

Vi sono varie soluzioni:

  1. Installare un web server tradizionale e adattarlo a Chart Repository. Esempi tipici: Apache, Nginx.
  2. Sviluppare un semplice web server con un linguaggio di programmazione come Python o Go. Avrà delle limitazioni.
  3. Usare un'offerta commerciale di un Provider, sicuramente a pagamento.
  4. Usare GitHub Pages. Solo i repository pubblici sono gratis, quelli privati sono a pagamento.
  5. Usare un prodotto Open Source specifico che offre un Chart Repository

Standard OCI

UCI sta per Open Container Initiative, ed è una struttura aperta di governance per la determinazione di standard aperti, tesi alla gestione di formati di container e ambienti runtime.

Nelle specifiche OCI vi è anche la specifica di distribuzione, una API per la distribuzione di immagini di contenitori, charts di Helm e simili.

A partire da Helm 3.0 è stato aggiunto un supporto per il push e il pull di charts da un registry OCI.

ChartMuseum

Chartmuseum

E' un progetto Open Source disponibile a https://github.com/helm/chartmuseum.

E' uno Helm Chart Repository scritto in linguaggio Go.

Oltre che storaggio locale, supporta molti tipi di storaggio forniti da Cloud Provider, inclusi Google Cloud Storage, Amazon S3, Microsoft Azure Blob Storage, Alibaba Cloud OSS Storage, Openstack Object Storage, Oracle Cloud Infrastructure Object Storage, Baidu Cloud BOS Storage, Tencent Cloud Object Storage, DigitalOcean Spaces, Minio, ed etcd.

Installazione

curl https://raw.githubusercontent.com/helm/chartmuseum/main/scripts/get-chartmuseum | bash

Preparare una directory che corrisponderà alla rootdir dello storaggio di chartmuseum:

mkdir ~/helmrepo

Lanciare chartmuseum:

chartmuseum --storage local --storage-local-rootdir ~/helmrepo --port 8123

Abbiamo specificato la porta 8123 per evitare collisioni con altri servizi su porte più comuni.

Blocca la finestra corrente.

I comandi seguenti vanno in un'altra finestra.

ChartMuseum in Docker

Sy può istanziare un'immagine Docker, per esempio:

docker run --rm -it \
  -p 8123:8080 \
  -e DEBUG=1 \
  -e STORAGE=local \
  -e STORAGE_LOCAL_ROOTDIR=/charts \
  -v $(pwd)/charts:/charts \
  ghcr.io/helm/chartmuseum:v0.14.0

Nello host mapping la directory locale $(pwd)/charts deve avere i permessi di lettura e scrittura per chi esegue i comandi rivolti a ChartMuseum.

Preparazione di ChartMuseum

Occorre generare un primo chart e trasferirlo a chartmuseum per generare un primo index.

cd /tmp
helm create mychart
helm package mychart

Trasferimento al repository ChartMuseum:

curl --data-binary "@mychart-0.1.0.tgz" http://localhost:8123/api/charts

Ora possiamo usare il repository chartmuseum:

helm repo add chartmuseum http://localhost:8123
helm repo update
helm repo list

Quando si usano chart repositories, meglio usarne uno per volta.

Listare i repositories:

helm repo list

E rimuovere quelli che non vogliamo, per esempio:

helm repo remove bitnami

Ricerca di chart:

help search repo mychart

Per compiere il push a chartmuseum occorre installare un plugin:

helm plugin install https://github.com/chartmuseum/helm-push

Configurazione Complessa

Chartmuseum ammette molti parametri ed opzioni di configurazione, storabili in un file. Sono soprattutto necessari per interfacciare i servizi forniti da un Cloud Provider.

Per ulteriori informazioni si rimanda al sito web del progetto, su GitHub.

Upload di Chart

Avevamo precedentemente prodotto il Chart wordpress. Compiamone lo upload su Chartmuseum.

Charmuseum deve essere attivo e deve avere installato il plugin cm-push.

cd ~/scripts
helm cm-push wordpress/ chartmuseum
helm repo update

Fatto.

Listare i charts disponibili su Chartmuseum, e tutti gli altri repositories configurati:

helm search repo