Aller au contenu

Déployer AKKO sur Amazon EKS

AKKO tourne sur EKS 1.30+ avec AWS Load Balancer Controller (ALB), EBS CSI pour le stockage bloc, et IAM Roles for Service Accounts (IRSA) pour des permissions AWS fines.

Prérequis

Élément Version
EKS 1.30+ (3 nœuds, m6i.large minimum — plus pour OpenMetadata)
AWS Load Balancer Controller 2.9+ installé dans le cluster
EBS CSI Driver installé (addon AWS)
cert-manager 1.16+ pour TLS (ou utiliser ACM directement)
external-dns optionnel, pour enregistrements Route 53 automatiques
kubectl + CLI aws configurés contre le cluster
Helm ≥ 3.14

Configuration IAM / IRSA (one-time)

Créer les politiques IRSA pour tout composant nécessitant un accès AWS. AKKO n'en a pas besoin par défaut, mais un mirror object storage → S3 ou EFS → akko-docs (optionnel) en aurait besoin.

# Exemple : donner lecture S3 à un sidecar de stockage objet
eksctl create iamserviceaccount \
  --cluster mon-cluster-eks \
  --namespace akko \
  --name akko-minio \
  --attach-policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess \
  --approve

Installation en une commande

AKKO_DOMAIN=akko.client.example \
AKKO_VERSION=2026.04 \
AKKO_VALUES_EXTRA=helm/examples/values-eks.yaml \
  bash deploy-from-harbor.sh

Spécificités EKS

Stockage

AKKO utilise gp3-csi (SSD, RWO, moins cher que gp2). L'EFS CSI pour RWX n'est pas requis par AKKO 2026.04 (tous les PVC sont en RWO). Pour activer le RWX plus tard, installer l'addon aws-efs-csi-driver et basculer akko-docs.persistence.accessMode: ReadWriteMany.

Ingress ALB

AKKO 2026.04 injecte ces annotations ALB sur chaque Ingress :

alb.ingress.kubernetes.io/scheme: "internet-facing"
alb.ingress.kubernetes.io/target-type: "ip"
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
alb.ingress.kubernetes.io/ssl-redirect: "443"

Pour des ALB internes, positionnez ingressAnnotations."alb.ingress.kubernetes.io/scheme": internal.

Miroir ECR privé

Si votre cluster EKS ne peut pas joindre harbor.akko-ai.com (VPC isolé), mirrorrez vers ECR :

aws ecr create-repository --repository-name akko/akko-cockpit
for img in cockpit postgres spark notebook trino ai-service mlflow \
           airflow dbt mcp-trino mcp-openmetadata docs aden \
           catalog-manager; do
  aws ecr create-repository --repository-name akko/akko-${img} 2>/dev/null || true
  skopeo copy \
    docker://harbor.akko-ai.com/akko/akko-${img}:2026.04 \
    docker://<compte>.dkr.ecr.<région>.amazonaws.com/akko/akko-${img}:2026.04
done

Puis surcharger :

global:
  image:
    registry: <compte>.dkr.ecr.<région>.amazonaws.com

Leviers coûts

  • gp3-csi à la place de gp2 → ~20 % d'économie
  • Un ALB par Ingress par défaut ; grouper les routes sous un seul ALB en partageant alb.ingress.kubernetes.io/group.name
  • Activer Cluster Autoscaler ou Karpenter pour les jobs en rafale (Spark, Airflow)

Vérifier

kubectl -n akko get pods
kubectl -n akko get ingress
aws elbv2 describe-load-balancers --region <région> --query 'LoadBalancers[*].DNSName'
kubectl -n akko exec svc/akko-trino -c trino -- trino --execute "SHOW CATALOGS"

Dépannage

Symptôme Cause Correctif
Adresse Ingress vide AWS LBC non installé / pas dans ce namespace kubectl -n kube-system get deploy aws-load-balancer-controller
PVC reste en Pending EBS CSI non installé aws eks describe-addon --addon-name aws-ebs-csi-driver
Pod Init:CreateContainerConfigError Annotation IRSA mal formée kubectl describe sa -n akko akko-<svc>
503 via ALB Target group unhealthy, readiness probe KO kubectl describe pod + vérifier readiness
Image pull 403 ECR IRSA manque AmazonEC2ContainerRegistryReadOnly sur le rôle du node aws iam list-attached-role-policies --role-name <node-role>