Déployer Kuploy sur Kubernetes
Déployez Kuploy ou Kuploy Cloud sur un cluster Kubernetes existant, à l'aide de kuploy-k8s.
Prérequis
- Un cluster Kubernetes (v1.23 ou plus) — vous n'en avez pas ? Voir Cluster de développement local pour en monter un avec k3d
kubectlconfiguré avec un accès au cluster- PostgreSQL, dans le cluster ou à l'extérieur
- Redis, dans le cluster ou à l'extérieur
- Un contrôleur d'ingress nginx
- Une classe de stockage pour les PVC (
--storage-class,longhornpar défaut) - Facultatif : cert-manager, pour le TLS automatique
Démarrage rapide
git clone https://github.com/kuploy/kuploy-k8s.git
cd kuploy-k8s
pip install -r requirements.txt
# Vérifier les prérequis
python deploy.py preflight
# Déployer l'édition open source
python deploy.py
# Déployer l'édition Cloud (avec facturation et quotas)
python deploy.py --edition cloud
Les éditions
| Édition | Image | Description |
|---|---|---|
oss | ceduth/kuploy:latest | La version open source, auto-hébergée |
cloud | ceduth/kuploy-cloud:latest | Multi-locataire, avec facturation, licences et quotas |
La configuration de l'édition Cloud
Au déploiement de l'édition Cloud, les valeurs suivantes vous sont demandées :
| Variable | Obligatoire | Description |
|---|---|---|
STRIPE_SECRET_KEY | Oui | La clé secrète d'API Stripe |
STRIPE_WEBHOOK_SECRET | Oui | Le secret de signature des webhooks Stripe |
BETTER_AUTH_SECRET | Oui | Le secret d'authentification, 32 caractères au minimum |
LICENSE_KEY | Oui | La clé de licence obtenue sur kuploy.app |
LICENSE_HUB_URL | Non | L'URL du centre de licences (par défaut : https://kuploy.app) |
PLATFORM_ADMIN_EMAIL | Oui | L'adresse du premier administrateur de plateforme |
La configuration SMTP est facultative et vous est demandée séparément.
Exemple de déploiement Cloud
python deploy.py --edition cloud \
--domain console.example.com \
--cert-issuer letsencrypt-prod \
--db-namespace database \
--postgres-service postgresql \
--redis-service redis-master
Les options de la ligne de commande
| Option | Défaut | Description |
|---|---|---|
--edition | oss | L'édition : oss ou cloud |
--domain | (demandé) | Le domaine du tableau de bord Kuploy |
--db-namespace | database | L'espace de noms où tournent PostgreSQL et Redis |
--app-namespace | kuploy | L'espace de noms du déploiement Kuploy |
--postgres-service | postgresql | Le nom du service PostgreSQL |
--postgres-secret | (aucun) | Le secret d'administration, pour créer l'utilisateur et la base |
--redis-service | redis-master | Le nom du service Redis |
--redis-secret | redis | Le secret Redis, pour le mot de passe |
--storage-class | longhorn | La classe de stockage des PVC |
--ingress-class | nginx | La classe d'ingress |
--ingress-ip | (auto) | L'adresse IP externe du LoadBalancer |
--cert-issuer | letsencrypt-prod | Le ClusterIssuer cert-manager |
--replicas | 1 | Le nombre de réplicas |
L'adresse IP de l'ingress
Le déployeur a besoin de connaître l'adresse IP externe de votre contrôleur d'ingress pour configurer le DNS.
La détection automatique (recommandée)
Par défaut, deploy.py découvre seul les services de type LoadBalancer de votre cluster :
- il trouve tous les services
type: LoadBalancer; - il en liste les adresses IP externes ;
- il vous demande d'en choisir une — ou prend la première par défaut.
Cela convient bien à un déploiement interactif, chez la plupart des hébergeurs.
Forcer la valeur
Utilisez --ingress-ip quand :
- vous automatisez — aucune invite interactive n'est possible ;
- l'équilibreur de charge tarde — l'adresse IP n'est pas encore attribuée au moment du déploiement ;
- vous avez plusieurs LoadBalancers — pour éviter l'invite de sélection ;
- vous êtes sur matériel nu ou MetalLB — la détection automatique peut s'y révéler peu fiable.
python deploy.py --ingress-ip 203.0.113.50 --domain console.example.com
astuce
Pour un déploiement scripté ou automatisé, renseignez toujours --ingress-ip, afin d'éviter toute invite interactive.
Ce qui est déployé
kuploy/ # espace de noms
├── kuploy (Deployment) # le serveur Kuploy
├── kuploy (Service) # service ClusterIP
├── kuploy (Ingress) # ingress nginx + TLS
├── kuploy-data (PVC) # stockage persistant
├── kuploy-secrets (Secret) # identifiants base/Redis + secrets de l'édition
├── kuploy (ServiceAccount) # avec le ClusterRole nécessaire au déploiement d'applications
└── buildkitd (StatefulSet) # le constructeur d'images de conteneurs
Les ressources nécessaires
Le serveur Kuploy
| Ressource | Demande | Limite |
|---|---|---|
| Processeur | 100m | 2000m |
| Mémoire | 256 Mio | 2 Gio |
Buildkit
| Ressource | Demande | Limite |
|---|---|---|
| Processeur | 500m | 4000m |
| Mémoire | 1 Gio | 8 Gio |
| Stockage | 20 Gio de cache + 10 Gio d'espace de travail |
Pour la suite
Une fois le déploiement terminé :
- Rattachez votre licence — indispensable pour l'édition Cloud
- Mettez en place la facturation — configurez Stripe et amorcez vos offres (édition Cloud)
- Configurez le tableau de bord d'administration — la mise en place côté administrateur de plateforme
- Déployez votre première application — passez à la pratique
- Exploitation Kubernetes — le quotidien et le dépannage