Aller au contenu

Déploiement Kubernetes

Déployez AKKO sur n'importe quel cluster Kubernetes en utilisant le chart Helm umbrella officiel. Kubernetes est la méthode de déploiement principale et recommandée pour AKKO -- aussi bien pour le développement local (via k3d) que pour les environnements de production avec haute disponibilité, mise à l'échelle horizontale et opérations automatisées.


Pourquoi Kubernetes ?

Capacité Kubernetes
Haute disponibilité Multi-nœuds, anti-affinité de pods
Mise à l'échelle horizontale HPA, replica sets
Mises à jour progressives Déploiements sans interruption
Gestion des secrets K8s Secrets, Vault, Sealed Secrets
Certificats TLS cert-manager (Let's Encrypt)
Stockage CSI, volumes persistants
Supervision kube-prometheus-stack, métriques natives
Multi-tenancy Namespaces, RBAC, quotas
Ordonnancement GPU Device plugin, sélecteurs de nœuds

Prérequis

Avant de déployer AKKO sur Kubernetes, assurez-vous de disposer de :

Outil Version Objectif
kubectl 1.28+ Gestion du cluster
helm 3.12+ Déploiement de charts
Cluster Kubernetes 1.28+ Toute distribution conforme CNCF
cert-manager 1.13+ Automatisation des certificats TLS (optionnel)
Classe de stockage Toute Provisionnement PVC pour les services avec état

Dimensionnement du cluster

Pour le profil minimal (services de base uniquement) : 8 CPU, 16 Go de RAM. Pour le profil standard (tout sauf governance) : 12 CPU, 24 Go de RAM. Pour le profil governance (inclut OpenMetadata) : 16 CPU, 32 Go de RAM.


Démarrage Rapide avec Helm

1. Ajouter les Dépôts Helm

helm repo add traefik https://traefik.github.io/charts
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add minio https://charts.min.io/
helm repo add trino https://trinodb.github.io/charts
helm repo add apache-airflow https://airflow.apache.org
helm repo add superset https://apache.github.io/superset
helm repo add jupyterhub https://hub.jupyter.org/helm-chart/
helm repo add prometheus https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo add openmetadata https://open-metadata.github.io/openmetadata-helm-charts
helm repo update

2. Préparer votre Fichier Values

Partez de l'un des exemples fournis :

cp helm/examples/values-dev.yaml my-values.yaml

Réplicas uniques, petits PVC, TLS auto-signé. Adapté aux ordinateurs portables et à la CI.

cp helm/examples/values-production.yaml my-values.yaml

Réplicas HA, tailles de PVC production, TLS cert-manager, affinité de nœuds.

cp helm/examples/values-ovhcloud.yaml my-values.yaml

Pré-configuré pour OVHcloud Managed Kubernetes avec la classe de stockage csi-cinder-high-speed et les annotations LoadBalancer OVH.

cp helm/examples/values-openshift.yaml my-values.yaml

Routes au lieu d'Ingress, annotations SCC, modèle de sécurité natif OpenShift.

Éditez my-values.yaml pour définir au minimum :

  • global.domain -- votre domaine DNS (ex. : akko.example.com)
  • Les mots de passe des bases de données (PostgreSQL, object storage, Keycloak)
  • Le nom de l'émetteur TLS (si vous utilisez cert-manager)

3. Installer

helm install akko ./helm/akko \
  --namespace akko --create-namespace \
  -f my-values.yaml

4. Vérifier

# Surveiller le démarrage des pods
kubectl -n akko get pods -w

# Vérifier que tous les services ont des endpoints
kubectl -n akko get svc

# Ouvrir le cockpit (une fois le DNS configuré)
open https://akko.example.com

Tous les pods devraient atteindre le statut Running dans les 5 à 10 minutes lors de la première installation (les images de conteneurs sont tirées depuis des registres publics).


Choisir un Profil de Déploiement

AKKO prend en charge trois profils de déploiement, contrôlés en activant ou désactivant les sous-charts dans votre values.yaml :

Minimal

Plateforme de données de base uniquement. Idéal pour le développement local, les tests CI/CD ou les environnements à ressources limitées.

Activé : PostgreSQL, object storage, Polaris, Trino, Spark, Airflow, Superset, JupyterHub, Keycloak, Cockpit, Docs, Prometheus, Dashboards

Désactivé : OpenMetadata, OpenSearch, logs layer, Ollama

Ressources : ~8 Go de RAM, ~4 cœurs CPU

Standard (par défaut)

Plateforme complète avec supervision et capacités IA. Point de départ recommandé pour les équipes évaluant AKKO.

Également activé : Ollama (LLM local), logs layer (agrégation des logs), log shipper, Alertmanager

Ressources : ~20 Go de RAM, ~12 cœurs CPU

Governance

Tout inclus, y compris le catalogue de données (OpenMetadata) et le moteur de recherche (OpenSearch). Pour les organisations ayant besoin de lignage des données, tests de qualité, gestion de glossaire et gouvernance des produits de données.

Également activé : OpenMetadata Server, OpenMetadata Ingestion, OpenSearch

Ressources : ~28 Go de RAM, ~16 cœurs CPU

Le profil governance est gourmand en ressources

OpenMetadata + OpenSearch nécessitent environ 4 Go de RAM supplémentaires. Sur les petits clusters, cela peut provoquer des OOM kills. Dédiez des nœuds spécifiques ou augmentez la capacité du cluster avant d'activer ce profil.


Guides par Plateforme

On-Premises

k3s

k3s est livré avec Traefik comme contrôleur d'ingress par défaut. Désactivez le Traefik du chart et utilisez celui intégré :

traefik:
  enabled: false
global:
  ingress:
    className: traefik

k3s inclut également un provisionneur local-path pour le stockage. Pour la production, envisagez Longhorn ou Rook-Ceph.

kubeadm

Déploiement standard. Installez un contrôleur d'ingress (Traefik ou nginx-ingress) et un pilote de stockage CSI avant de déployer AKKO.

RKE2

RKE2 inclut nginx-ingress par défaut :

traefik:
  enabled: false
global:
  ingress:
    className: nginx

OVHcloud Managed Kubernetes

OVHcloud fournit un service Kubernetes managé avec :

  • Mise à l'échelle automatique des nœuds
  • Classe de stockage csi-cinder-high-speed (SSD)
  • Intégration Load Balancer public
  • Centres de données européens conformes au RGPD
helm install akko ./helm/akko -n akko --create-namespace \
  -f helm/examples/values-ovhcloud.yaml

Voir l'exemple complet : helm/examples/values-ovhcloud.yaml

OpenShift

OpenShift utilise des Routes au lieu d'Ingress et impose des Security Context Constraints (SCC). Le fichier values OpenShift gère ces différences :

# Accorder les SCC requis
oc adm policy add-scc-to-user nonroot-v2 -z akko-postgresql -n akko
oc adm policy add-scc-to-user nonroot-v2 -z akko-minio -n akko

# Déployer
helm install akko ./helm/akko -n akko \
  -f helm/examples/values-openshift.yaml

Voir l'exemple complet : helm/examples/values-openshift.yaml


Stockage

Chaque service avec état utilise un PersistentVolumeClaim. Volumes clés :

Service Objectif Taille Dev Taille Prod
PostgreSQL Base de données relationnelle partagée 5 Gi 50 Gi
object storage Data lake S3 (tables Iceberg) 5 Gi 100 Gi
Prometheus Historique des métriques 2 Gi 50 Gi
logs layer Agrégation des logs 2 Gi 50 Gi
Ollama Fichiers de modèles LLM 5 Gi 20 Gi
Airflow Logs des DAG 1 Gi 10 Gi
OpenSearch Index du catalogue governance 2 Gi 30 Gi

Utilisez une classe de stockage SSD pour PostgreSQL, object storage et OpenSearch. Le stockage HDD est acceptable pour les logs (logs layer, Airflow) et Prometheus.


Supervision et Observabilité

AKKO déploie une pile de supervision complète via le chart kube-prometheus-stack :

  • Prometheus -- collecte les métriques de tous les services AKKO
  • Dashboards -- tableaux de bord pré-provisionnés pour chaque service
  • Alertmanager -- route les alertes vers Slack, email ou PagerDuty
  • logs layer + log shipper -- agrégation centralisée des logs
  • OpenLineage -- lignage des pipelines de données (transport console par défaut)

Accédez à Dashboards à https://grafana.<votre-domaine>.

Tableaux de Bord Pré-intégrés

AKKO est livré avec des tableaux de bord Dashboards pour :

  • Vue d'ensemble du cluster (CPU, mémoire, réseau)
  • Performance des requêtes Trino
  • Métriques des jobs Spark
  • Exécution des DAG Airflow
  • Connexions et requêtes PostgreSQL
  • Utilisation du stockage object storage
  • Événements d'authentification Keycloak

Dépannage

Pods bloqués en Pending

kubectl -n akko describe pod <pod-name>

Causes courantes : - CPU/mémoire insuffisants sur les nœuds (montez en charge ou réduisez les demandes de ressources) - Pas de classe de stockage correspondante (vérifiez avec kubectl get storageclass) - Incompatibilité de sélecteur de nœud (vérifiez les labels des nœuds)

Pods en CrashLoopBackOff

kubectl -n akko logs <pod-name> --previous

Causes courantes : - Échecs de connexion à la base de données (PostgreSQL pas encore prêt -- vérifiez les depends_on) - Mots de passe incorrects (incohérence entre les secrets générés et les données du PV) - OOM kills (augmentez les limites mémoire)

Problèmes de certificats TLS

# Vérifier le statut des certificats cert-manager
kubectl -n akko get certificate
kubectl -n akko describe certificate <name>

# Vérifier les logs de cert-manager
kubectl -n cert-manager logs deploy/cert-manager

Réinitialiser un service

# Supprimer le déploiement et le PVC, puis laisser Helm recréer
kubectl -n akko delete deploy <service-name>
kubectl -n akko delete pvc <pvc-name>
helm upgrade akko ./helm/akko -n akko -f my-values.yaml

Pour Aller Plus Loin