Aller au contenu principal

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
  • kubectl configuré 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, longhorn par 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​

ÉditionImageDescription
ossceduth/kuploy:latestLa version open source, auto-hébergée
cloudceduth/kuploy-cloud:latestMulti-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 :

VariableObligatoireDescription
STRIPE_SECRET_KEYOuiLa clé secrète d'API Stripe
STRIPE_WEBHOOK_SECRETOuiLe secret de signature des webhooks Stripe
BETTER_AUTH_SECRETOuiLe secret d'authentification, 32 caractères au minimum
LICENSE_KEYOuiLa clé de licence obtenue sur kuploy.app
LICENSE_HUB_URLNonL'URL du centre de licences (par défaut : https://kuploy.app)
PLATFORM_ADMIN_EMAILOuiL'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​

OptionDéfautDescription
--editionossL'édition : oss ou cloud
--domain(demandé)Le domaine du tableau de bord Kuploy
--db-namespacedatabaseL'espace de noms où tournent PostgreSQL et Redis
--app-namespacekuployL'espace de noms du déploiement Kuploy
--postgres-servicepostgresqlLe nom du service PostgreSQL
--postgres-secret(aucun)Le secret d'administration, pour créer l'utilisateur et la base
--redis-serviceredis-masterLe nom du service Redis
--redis-secretredisLe secret Redis, pour le mot de passe
--storage-classlonghornLa classe de stockage des PVC
--ingress-classnginxLa classe d'ingress
--ingress-ip(auto)L'adresse IP externe du LoadBalancer
--cert-issuerletsencrypt-prodLe ClusterIssuer cert-manager
--replicas1Le 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.

Par défaut, deploy.py découvre seul les services de type LoadBalancer de votre cluster :

  1. il trouve tous les services type: LoadBalancer ;
  2. il en liste les adresses IP externes ;
  3. 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​

RessourceDemandeLimite
Processeur100m2000m
Mémoire256 Mio2 Gio

Buildkit​

RessourceDemandeLimite
Processeur500m4000m
Mémoire1 Gio8 Gio
Stockage20 Gio de cache + 10 Gio d'espace de travail

Pour la suite​

Une fois le déploiement terminé :

  1. Rattachez votre licence — indispensable pour l'édition Cloud
  2. Mettez en place la facturation — configurez Stripe et amorcez vos offres (édition Cloud)
  3. Configurez le tableau de bord d'administration — la mise en place côté administrateur de plateforme
  4. Déployez votre première application — passez à la pratique
  5. Exploitation Kubernetes — le quotidien et le dépannage