Aller au contenu

Portabilité cloud

Les manifestes Kubernetes de KanjiIQ sont portables à environ 90 % entre les fournisseurs cloud. Cette page détaille le chemin de migration vers AWS et GCP, en soulignant ce qui reste identique et ce qui doit changer.

Ce qui reste identique (partout)

Ces ressources fonctionnent de manière identique sur n'importe quel cluster Kubernetes conforme CNCF :

  • Deployments : Spécifications des pods, définitions des conteneurs, limites de ressources, sondes de santé
  • Services : Services ClusterIP, mappages de ports, sélecteurs
  • Secrets : Secrets opaques avec stringData
  • PersistentVolumeClaims : Requêtes de stockage (les provisionneurs cloud gèrent le reste)
  • Namespaces : Limites d'isolation
  • Images Docker : Conformes OCI, s'exécutent sur n'importe quel runtime de conteneurs

Migration vers AWS (EKS)

Correspondance architecturale

graph TB
    subgraph Current["Current: Hetzner k3s"]
        A1[k3s] --> A2[Traefik]
        A1 --> A3[PostgreSQL on k8s]
        A1 --> A4[Forgejo Registry]
        A1 --> A5[cert-manager]
    end

    subgraph AWS["Target: AWS EKS"]
        B1[EKS] --> B2[ALB Ingress Controller<br/>or Traefik]
        B1 --> B3[RDS PostgreSQL]
        B1 --> B4[ECR]
        B1 --> B5[ACM<br/>or cert-manager]
    end

    Current -.->|Migration| AWS

Composant par composant

Actuel Équivalent AWS Modification requise
k3s EKS Provisionnement du cluster (eksctl/Terraform)
Traefik ALB Ingress Controller ou conserver Traefik Les annotations Ingress changent
PostgreSQL on k8s RDS Mettre à jour le secret DATABASE_URL ; supprimer les manifestes PG
Forgejo Registry ECR Mettre à jour les URL d'images dans les Deployments ; mettre à jour le CI/CD
cert-manager ACM Remplacer les annotations cert-manager par l'ARN ACM
Forgejo Actions GitHub Actions ou CodePipeline Réécrire les fichiers de workflow
Local PV EBS (gp3) Le PVC fonctionne tel quel ; EKS provisionne automatiquement les EBS

Modifications des manifestes

Ingress (en cas de passage à ALB) :

# Before (Traefik)
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    traefik.ingress.kubernetes.io/router.entrypoints: websecure
spec:
  ingressClassName: traefik

# After (AWS ALB)
metadata:
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:...
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
spec:
  ingressClassName: alb

Base de données (passage à RDS) :

# Update the secret with RDS endpoint
stringData:
  database-url: "postgresql://user:[email protected]:5432/jlpt_flashcard"

Ensuite, supprimer 02-postgres-pvc.yaml et 03-postgres-deployment.yaml — RDS gère tout.

Effort estimé

  • Configuration du cluster : 1-2 jours (EKS + réseau)
  • Adaptation des manifestes : 1 jour (ingress, secrets, URL d'images)
  • Réécriture du CI/CD : 1 jour (GitHub Actions ou CodePipeline)
  • Migration des données : 1 jour (pg_dump vers import RDS)
  • Basculement DNS : 1 heure
  • Total : ~4-5 jours

Migration vers GCP (GKE)

Correspondance des composants

Actuel Équivalent GCP Modification requise
k3s GKE Provisionnement du cluster (gcloud/Terraform)
Traefik GKE Ingress ou conserver Traefik Les annotations Ingress changent
PostgreSQL on k8s Cloud SQL Mettre à jour DATABASE_URL ; supprimer les manifestes PG
Forgejo Registry Artifact Registry Mettre à jour les URL d'images
cert-manager Google-managed certs ou conserver cert-manager Modification d'annotation
Forgejo Actions Cloud Build ou GitHub Actions Réécrire les pipelines
Local PV Persistent Disk Le PVC fonctionne tel quel

Modifications des manifestes

Ingress (GKE natif) :

metadata:
  annotations:
    networking.gke.io/managed-certificates: kanjiiq-cert
spec:
  ingressClassName: gce

Effort estimé

  • Configuration du cluster : 1-2 jours
  • Adaptation des manifestes : 1 jour
  • Réécriture du CI/CD : 1 jour
  • Migration des données : 1 jour
  • Total : ~4-5 jours

Stratégie multi-cloud

Pour les organisations nécessitant un déploiement multi-cloud :

Rester portable

  1. Conserver Traefik au lieu d'un ingress cloud-native (fonctionne de manière identique sur EKS, GKE, AKS)
  2. Conserver cert-manager au lieu d'ACM/Google certs (TLS indépendant du cloud)
  3. Conserver PostgreSQL on k8s pour éviter la dépendance fournisseur (compromis : plus de charge opérationnelle)
  4. Utiliser un registre cloud-agnostique comme Harbor (auto-hébergé, fonctionne avec tout k8s)

Accepter les services cloud

Pour des opérations simplifiées, adopter les services managés par cloud :

  • Base de données : RDS (AWS) / Cloud SQL (GCP) — charge opérationnelle significativement réduite
  • Registre : ECR (AWS) / Artifact Registry (GCP) — intégration étroite avec l'IAM
  • TLS : ACM (AWS) / Managed Certs (GCP) — certificats sans maintenance

Le bon choix dépend de votre priorité : la portabilité (rester cloud-agnostique) ou la simplicité opérationnelle (utiliser les services managés).