
Ce guide déploie Pulp sur Kubernetes avec l'operator officiel : on installe le contrôleur avec Helm, puis on décrit l'instance dans une custom resource Pulp, et l'operator provisionne toute la pile (API, contenu, workers, PostgreSQL, Redis, reverse proxy). Public visé : équipes plateforme qui veulent un gestionnaire d'artefacts déclaratif et scalable. Prérequis : un cluster Kubernetes, kubectl et helm. Vous verrez l'installation en épinglant les bonnes versions, la ressource Pulp, l'accès à l'instance, et le réglage de version PostgreSQL qui conditionne aussi bien le démarrage que la sauvegarde.
Sur Kubernetes, on n'installe pas Pulp à la main : on installe le Pulp Operator, un contrôleur qui surveille des ressources Pulp et réconcilie le cluster pour les faire correspondre. C'est le modèle operator, déclaratif et auto-réparateur.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Installer le Pulp Operator avec Helm, en épinglant les bonnes versions.
- Décrire une instance avec une custom resource
Pulp. - Accéder à l'API et récupérer le mot de passe admin.
- Choisir la version PostgreSQL compatible avec la sauvegarde.
Prérequis
Section intitulée « Prérequis »- Un cluster Kubernetes fonctionnel et
kubectlconfiguré. - Helm 3+ installé.
- Une StorageClass disponible. Sur un cluster mono-nœud (k3d, Minikube), la classe
local-pathenReadWriteOncesuffit.
Installer l'operator
Section intitulée « Installer l'operator »L'operator se déploie via son chart Helm. Il installe le contrôleur et les custom resource definitions (pulps, pulpbackups, pulprestores).
Un point mérite d'être posé d'emblée : le chart Helm publié épingle des versions par défaut anciennes (l'operator 1.3 et PostgreSQL 13). Or pulpcore exige PostgreSQL 14 ou plus. On installe donc en surchargeant l'image de l'operator (dernière version, ici 2.0) et l'image PostgreSQL (version 15).
-
Ajouter le dépôt Helm et créer un namespace :
Fenêtre de terminal helm repo add pulp-operator https://github.com/pulp/pulp-k8s-resources/raw/main/helm-charts/ --force-updatekubectl create namespace pulp -
Installer l'operator en épinglant les versions :
Fenêtre de terminal helm -n pulp install pulp pulp-operator/pulp-operator \--set image=quay.io/pulp/pulp-operator:v2.0.0 \--set operator.relatedImages.postgres=docker.io/library/postgres:15 -
Vérifier que le contrôleur tourne :
Fenêtre de terminal kubectl -n pulp rollout status deploy/pulp-operator-controller-managerkubectl get crd | grep pulpprojectLes trois CRD
pulps,pulpbackupsetpulprestoresdoivent apparaître : l'operator est prêt à recevoir une ressourcePulp.
Déployer Pulp avec une custom resource
Section intitulée « Déployer Pulp avec une custom resource »L'instance se décrit dans un objet Pulp. L'operator lit cette ressource et crée les deployments, services, secrets et volumes correspondants.
apiVersion: repo-manager.pulpproject.org/v1kind: Pulpmetadata: name: pulp namespace: pulpspec: image_version: stable ingress_type: nodeport api: replicas: 1 content: replicas: 1 worker: replicas: 1 file_storage_access_mode: "ReadWriteOnce" file_storage_size: "10Gi" file_storage_storage_class: local-path database: postgres_storage_class: local-path postgres_image: docker.io/library/postgres:15kubectl apply -f pulp.yamlDeux réglages de la partie database sont déterminants :
postgres_storage_classest obligatoire. Sans lui, l'operator s'arrête avec l'erreurcould not find any storage definition for Database.postgres_image: postgres:15aligne la base sur la même version que l'outillage de sauvegarde (voir l'encadré ci-dessus). Gardez cette valeur cohérente avec le--set operator.relatedImages.postgresde l'installation.
Suivre le déploiement et se connecter
Section intitulée « Suivre le déploiement et se connecter »L'operator provisionne les composants dans l'ordre : base, migrations, contenu, API, workers, reverse proxy. Le premier déploiement télécharge des images volumineuses, comptez quelques minutes.
-
Attendre que les pods soient prêts :
Fenêtre de terminal kubectl -n pulp get pods -wVous devez voir
pulp-database-0,pulp-api,pulp-contentetpulp-workerenRunning, et les jobsmigrationetreset-admin-passwordenCompleted. -
Récupérer le mot de passe admin, généré automatiquement dans un secret :
Fenêtre de terminal kubectl -n pulp get secret pulp-admin-password \-o jsonpath='{.data.password}' | base64 -d -
Tester l'API. Le service
pulp-web-svc(ici en NodePort) expose l'instance ; pour un test rapide, un port-forward suffit :Fenêtre de terminal kubectl -n pulp port-forward svc/pulp-api-svc 24817:24817 &curl -s http://localhost:24817/pulp/api/v3/status/ | headLa réponse en 200 listant les composants (
core,file,container...) confirme que l'instance est opérationnelle.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause | Solution |
|---|---|---|
Operator bloqué, could not find any storage definition for Database | postgres_storage_class absent | L'ajouter sous database: dans la ressource Pulp |
pulp-api en CrashLoopBackOff, log PostgreSQL 14 or later is required | Image PostgreSQL 13 par défaut du chart | Épingler postgres:15 à l'installation et dans le CR |
pulp-database en CrashLoop, data directory ... version X ... not compatible | PVC résiduelle d'une autre version majeure | Supprimer la ressource Pulp et la PVC, redéployer |
PulpBackup échoue, Failed to run pg_dump | Base en 16 face à un pg_dump 15 | Utiliser PostgreSQL 15 pour la base |
Pods api/worker Pending sur volume | ReadWriteOnce sur cluster multi-nœuds | Passer à ReadWriteMany ou au stockage objet S3 |
À retenir
Section intitulée « À retenir »- Sur Kubernetes, Pulp se déploie via le Pulp Operator et une custom resource
Pulpdéclarative. - Le chart Helm épingle des versions anciennes : surchargez l'image de l'operator (2.0) et PostgreSQL (15) à l'installation.
- L'operator provisionne toute la pile : API, contenu, workers, PostgreSQL, Redis, reverse proxy.
postgres_storage_classest obligatoire ; PostgreSQL 15 satisfait pulpcore et l'outil de sauvegarde.- En production multi-nœuds, le stockage d'artefacts doit être
ReadWriteManyou S3, jamaisReadWriteOncelocal.