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¶
- Conserver Traefik au lieu d'un ingress cloud-native (fonctionne de manière identique sur EKS, GKE, AKS)
- Conserver cert-manager au lieu d'ACM/Google certs (TLS indépendant du cloud)
- Conserver PostgreSQL on k8s pour éviter la dépendance fournisseur (compromis : plus de charge opérationnelle)
- 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).