ChartMuseum est un serveur de référentiel de charts Helm open-source écrit en Go (Golang), avec support pour les backends de stockage cloud, incluant 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, et etcd.
Déployez ce chart sur votre cluster :
helm install chart-museum . -n tools --create-namespace
Une fois déployé, ChartMuseum sera disponible à :
http://chart-museum.aipice.local192.168.1.1Ajoutez votre ChartMuseum local comme référentiel Helm :
# Ajouter le référentiel
helm repo add local http://chart-museum.aipice.local
# Mettre à jour l'index du référentiel
helm repo update
Pour télécharger des charts vers votre référentiel local :
# Packager votre chart
helm package /chemin/vers/votre/chart
# Télécharger avec curl
curl --data-binary "@votre-chart-1.0.0.tgz" http://chart-museum.aipice.local/api/charts
# Ou utiliser le plugin helm cm-push
helm plugin install https://github.com/chartmuseum/helm-push
helm cm-push votre-chart-1.0.0.tgz local
# Rechercher les charts disponibles
helm search repo local
# Installer depuis le référentiel local
helm install my-release local/nom-du-chart
L’instance ChartMuseum est configurée avec :
Les sauvegardes sont automatiquement programmées quotidiennement à 7h35 et stockées dans le PVC de sauvegarde avec une capacité de 32Go.
Pour plus d’informations, visitez : https://github.com/chartmuseum/chartmuseum
Bien que ChartMuseum gère les charts Helm, vous pouvez créer un référentiel local de paquets Debian en utilisant Nginx pour servir les paquets .deb.
Créez les répertoires pour votre référentiel Debian :
mkdir -p /var/www/debian-repo/{pool,dists/stable/main/binary-amd64}
Placez vos paquets .deb dans le répertoire pool :
cp *.deb /var/www/debian-repo/pool/
Créez les fichiers d’index des paquets :
cd /var/www/debian-repo
# Générer le fichier Packages
dpkg-scanpackages pool/ /dev/null > dists/stable/main/binary-amd64/Packages
# Compresser le fichier Packages
gzip -c dists/stable/main/binary-amd64/Packages > dists/stable/main/binary-amd64/Packages.gz
# Générer le fichier Release
cd dists/stable
cat > Release << EOF
Origin: Référentiel Debian Local
Label: local-debian-repo
Suite: stable
Codename: stable
Architectures: amd64
Components: main
Description: Référentiel Local de Paquets Debian
EOF
Créez un déploiement Nginx pour servir le référentiel :
# Créer un PVC pour les données du référentiel
kubectl create pvc debian-repo-pvc --size=10Gi
# Déployer Nginx
kubectl run debian-repo --image=nginx:alpine --port=80
kubectl expose pod debian-repo --port=80 --target-port=80 --name=debian-repo-service
# Monter les données du référentiel
kubectl patch pod debian-repo -p '{"spec":{"volumes":[{"name":"repo-data","persistentVolumeClaim":{"claimName":"debian-repo-pvc"}}],"containers":[{"name":"debian-repo","volumeMounts":[{"name":"repo-data","mountPath":"/usr/share/nginx/html"}]}]}}'
Sur les machines clientes, ajoutez le référentiel :
# Ajouter le référentiel à la liste des sources
echo "deb http://debian-repo.aipice.local/ stable main" | sudo tee /etc/apt/sources.list.d/local-debian-repo.list
# Mettre à jour l'index des paquets
sudo apt update
# Installer des paquets depuis le référentiel local
sudo apt install nom-de-votre-paquet
Créez un script pour mettre à jour le référentiel quand de nouveaux paquets sont ajoutés :
#!/bin/bash
# update-debian-repo.sh
REPO_DIR="/var/www/debian-repo"
cd $REPO_DIR
# Régénérer l'index des paquets
dpkg-scanpackages pool/ /dev/null > dists/stable/main/binary-amd64/Packages
gzip -c dists/stable/main/binary-amd64/Packages > dists/stable/main/binary-amd64/Packages.gz
echo "Référentiel mis à jour avec succès"
Votre structure finale de référentiel devrait ressembler à :
/var/www/debian-repo/
├── pool/
│ ├── paquet1.deb
│ ├── paquet2.deb
│ └── ...
└── dists/
└── stable/
├── Release
└── main/
└── binary-amd64/
├── Packages
└── Packages.gz
Cette configuration fournit un référentiel simple de paquets Debian local servi par Nginx aux côtés de votre référentiel Helm ChartMuseum.
Vous pouvez créer un registre Docker local pour stocker et distribuer des images Docker de manière privée.
Créez un déploiement de registre Docker :
# Créer un PVC pour les données du registre
kubectl create pvc docker-registry-pvc --size=50Gi
# Créer le déploiement du registre
kubectl create deployment docker-registry --image=registry:2.8.3
kubectl patch deployment docker-registry -p '{"spec":{"template":{"spec":{"volumes":[{"name":"registry-data","persistentVolumeClaim":{"claimName":"docker-registry-pvc"}}],"containers":[{"name":"registry","volumeMounts":[{"name":"registry-data","mountPath":"/var/lib/registry"}],"env":[{"name":"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY","value":"/var/lib/registry"}]}]}}}}'
# Exposer le service du registre
kubectl expose deployment docker-registry --port=5000 --target-port=5000 --name=docker-registry-service
Configurez le port forwarding ou ingress pour accéder au registre :
# Port forward pour l'accès local
kubectl port-forward service/docker-registry-service 5000:5000 &
# Ou créer un ingress (exemple)
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: docker-registry-ingress
spec:
rules:
- host: docker-registry.aipice.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: docker-registry-service
port:
number: 5000
EOF
Configurez votre client Docker pour utiliser le registre local :
# Ajouter un registre non sécurisé (pour HTTP)
sudo tee /etc/docker/daemon.json <<EOF
{
"insecure-registries": ["localhost:5000", "docker-registry.aipice.local:5000"]
}
EOF
# Redémarrer le service Docker
sudo systemctl restart docker
Taguez et poussez des images vers votre registre local :
# Taguer une image existante
docker tag nginx:latest localhost:5000/nginx:latest
# ou
docker tag nginx:latest docker-registry.aipice.local:5000/nginx:latest
# Pousser vers le registre local
docker push localhost:5000/nginx:latest
# ou
docker push docker-registry.aipice.local:5000/nginx:latest
Récupérez des images depuis votre registre local :
# Récupérer une image
docker pull localhost:5000/nginx:latest
# Utiliser dans les déploiements Kubernetes
kubectl create deployment my-nginx --image=localhost:5000/nginx:latest
Listez les référentiels et tags dans votre registre :
# Lister les référentiels
curl http://localhost:5000/v2/_catalog
# Lister les tags pour un référentiel
curl http://localhost:5000/v2/nginx/tags/list
# Obtenir le manifeste d'une image
curl http://localhost:5000/v2/nginx/manifests/latest
Créez un script simple pour gérer votre registre :
#!/bin/bash
# docker-registry-manager.sh
REGISTRY_URL="localhost:5000"
case "$1" in
"list")
echo "Référentiels dans le registre :"
curl -s http://$REGISTRY_URL/v2/_catalog | jq -r '.repositories[]'
;;
"tags")
if [ -z "$2" ]; then
echo "Usage : $0 tags <nom-référentiel>"
exit 1
fi
echo "Tags pour $2 :"
curl -s http://$REGISTRY_URL/v2/$2/tags/list | jq -r '.tags[]'
;;
"cleanup")
echo "Le nettoyage du registre nécessite la collecte des déchets du registre"
kubectl exec deployment/docker-registry -- registry garbage-collect /etc/docker/registry/config.yml
;;
*)
echo "Usage : $0 {list|tags <repo>|cleanup}"
exit 1
;;
esac
Pour un usage en production, considérez l’ajout d’authentification :
# Créer un fichier htpasswd pour l'authentification de base
htpasswd -Bbn utilisateur motdepasse > /tmp/htpasswd
# Créer un secret
kubectl create secret generic docker-registry-auth --from-file=/tmp/htpasswd
# Mettre à jour le déploiement avec l'authentification
kubectl patch deployment docker-registry -p '{"spec":{"template":{"spec":{"containers":[{"name":"registry","env":[{"name":"REGISTRY_AUTH","value":"htpasswd"},{"name":"REGISTRY_AUTH_HTPASSWD_REALM","value":"Registry Realm"},{"name":"REGISTRY_AUTH_HTPASSWD_PATH","value":"/auth/htpasswd"}],"volumeMounts":[{"name":"auth","mountPath":"/auth"}]}],"volumes":[{"name":"auth","secret":{"secretName":"docker-registry-auth"}}]}}}}'
Ce registre Docker local complète votre configuration ChartMuseum et référentiel Debian, fournissant une solution complète de gestion d’artefacts.