クラウド移植性¶
KanjiIQのKubernetesマニフェストは、クラウドプロバイダー間で約90%移植可能です。このページでは、AWSおよびGCPへの移行パスを詳述し、同じままのものと変更が必要なものを説明します。
どこでも同じままのもの¶
これらのリソースは、CNCF準拠のあらゆるKubernetesクラスターで同様に動作します:
- Deployment:Pod仕様、コンテナ定義、リソース制限、ヘルスプローブ
- Service:ClusterIPサービス、ポートマッピング、セレクター
- Secret:
stringDataを持つOpaqueシークレット - PersistentVolumeClaim:ストレージリクエスト(クラウドプロビジョナーが処理)
- Namespace:分離境界
- Dockerイメージ:OCI準拠、任意のコンテナランタイムで動作
AWSへの移行(EKS)¶
アーキテクチャマッピング¶
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
コンポーネントごとの比較¶
| 現在 | AWSの同等サービス | 必要な変更 |
|---|---|---|
| k3s | EKS | クラスタープロビジョニング(eksctl/Terraform) |
| Traefik | ALB Ingress ControllerまたはTraefik継続 | Ingressアノテーションの変更 |
| PostgreSQL on k8s | RDS | DATABASE_URLシークレットの更新;PGマニフェストの削除 |
| Forgejo Registry | ECR | DeploymentのイメージURLを更新;CI/CDの更新 |
| cert-manager | ACM | cert-managerアノテーションをACM ARNに置換 |
| Forgejo Actions | GitHub ActionsまたはCodePipeline | ワークフローファイルの書き換え |
| Local PV | EBS (gp3) | PVCはそのまま動作;EKSがEBSを自動プロビジョニング |
マニフェスト変更¶
Ingress(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
データベース(RDSに切り替え):
# Update the secret with RDS endpoint
stringData:
database-url: "postgresql://user:[email protected]:5432/jlpt_flashcard"
その後02-postgres-pvc.yamlと03-postgres-deployment.yamlを削除 — RDSがすべてを処理します。
見積もり工数¶
- クラスターセットアップ:1〜2日(EKS + ネットワーキング)
- マニフェスト適応:1日(ingress、secret、イメージURL)
- CI/CD書き換え:1日(GitHub ActionsまたはCodePipeline)
- データ移行:1日(pg_dump → RDSインポート)
- DNS切り替え:1時間
- 合計:約4〜5日
GCPへの移行(GKE)¶
コンポーネントマッピング¶
| 現在 | GCPの同等サービス | 必要な変更 |
|---|---|---|
| k3s | GKE | クラスタープロビジョニング(gcloud/Terraform) |
| Traefik | GKE IngressまたはTraefik継続 | Ingressアノテーションの変更 |
| PostgreSQL on k8s | Cloud SQL | DATABASE_URLの更新;PGマニフェストの削除 |
| Forgejo Registry | Artifact Registry | イメージURLの更新 |
| cert-manager | Googleマネージド証明書またはcert-manager継続 | アノテーションの変更 |
| Forgejo Actions | Cloud BuildまたはGitHub Actions | パイプラインの書き換え |
| Local PV | Persistent Disk | PVCはそのまま動作 |
マニフェスト変更¶
Ingress(GKEネイティブ):
metadata:
annotations:
networking.gke.io/managed-certificates: kanjiiq-cert
spec:
ingressClassName: gce
見積もり工数¶
- クラスターセットアップ:1〜2日
- マニフェスト適応:1日
- CI/CD書き換え:1日
- データ移行:1日
- 合計:約4〜5日
マルチクラウド戦略¶
マルチクラウドデプロイメントが必要な組織向け:
移植性を維持¶
- クラウドネイティブingressの代わりにTraefikを維持(EKS、GKE、AKSで同様に動作)
- ACM/Google証明書の代わりにcert-managerを維持(クラウド非依存のTLS)
- ベンダーロックインを避けるためにPostgreSQL on k8sを維持(トレードオフ:運用負荷の増加)
- Harborのようなクラウド非依存のレジストリを使用(セルフホスト、任意のk8sで動作)
クラウドサービスを受け入れる¶
運用を簡素化するために、クラウドごとのマネージドサービスを活用:
- データベース:RDS (AWS) / Cloud SQL (GCP) — 運用負荷を大幅に軽減
- レジストリ:ECR (AWS) / Artifact Registry (GCP) — IAMとの緊密な統合
- TLS:ACM (AWS) / Managed Certs (GCP) — メンテナンス不要の証明書
正しい選択は、移植性(クラウド非依存を維持)と運用のシンプルさ(マネージドサービスを使用)のどちらを優先するかによります。