Déploiement d’un container registry interne au cluster
(distribution v3, image
officielle registry:3.1.1), avec un volume persistant 1 Ti sur la StorageClass
par défaut (rook-ceph-block-replicated, réplicat ×3).
replicas: 1 (SPOF applicatif) : RBD = ReadWriteOnce, donc pas de
scale-out simple ; suffisant pour un usage recherche. HA réelle = passer sur
CephFS (ReadWriteMany).
Suppression de blobs activée (REGISTRY_STORAGE_DELETE_ENABLED=true) pour
permettre la garbage collection mensuelle.
Pré-requis
Cluster bootstrap (CNI + Rook-Ceph + StorageClass par défaut) en place.
Installation
Fenêtre de terminal
kubectlapply-fnamespace.yaml
kubectlapply-fpersistent-volume-claim.yaml
kubectlapply-fdeployment.yaml
kubectlapply-fservice.yaml
kubectlapply-fgarbage-collect-cronjob.yaml# suspended par défaut
Vérifier que tout est Ready :
Fenêtre de terminal
kubectl-nregistrygetpods,svc,pvc,cronjob
Utilisation
Depuis un poste distant
Depuis un poste autorisé à parler à l’API K8s, le registry est joignable via
kubectl port-forward :
Fenêtre de terminal
kubectl-nregistryport-forwardsvc/registry8080:80
# puis sur le poste local :
# "insecure-registries": ["localhost:8080"]
dockerpullalpine:3.20
dockertagalpine:3.20localhost:8080/alpine:3.20
dockerpushlocalhost:8080/alpine:3.20
dockerpulllocalhost:8080/alpine:3.20
Depuis le cluster
Depuis un nœud du cluster, le registry est directement résolvable comme
registry.registry.svc.cluster.local:80.
Garbage collection
registry garbage-collect supprime les blobs orphelins (référencés par aucun
manifest). Sans GC, ces blobs s’accumulent à chaque retag/écrasement.
Le CronJob automatique tourne en arrière-plan sans scale-down : on accepte
le risque de race (rare, pertes minimes) pour la simplicité. Pour un usage
critique, désactiver le CronJob et utiliser la procédure manuelle.
Désinstallation
Fenêtre de terminal
kubectldelete-fgarbage-collect-cronjob.yaml
kubectldelete-fservice.yaml
kubectldelete-fdeployment.yaml
kubectldelete-fpersistent-volume-claim.yaml# ⚠️ supprime les images