コンテンツにスキップ

クラウド移植性

KanjiIQのKubernetesマニフェストは、クラウドプロバイダー間で約90%移植可能です。このページでは、AWSおよびGCPへの移行パスを詳述し、同じままのものと変更が必要なものを説明します。

どこでも同じままのもの

これらのリソースは、CNCF準拠のあらゆるKubernetesクラスターで同様に動作します:

  • Deployment:Pod仕様、コンテナ定義、リソース制限、ヘルスプローブ
  • Service:ClusterIPサービス、ポートマッピング、セレクター
  • SecretstringDataを持つ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.yaml03-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日

マルチクラウド戦略

マルチクラウドデプロイメントが必要な組織向け:

移植性を維持

  1. クラウドネイティブingressの代わりにTraefikを維持(EKS、GKE、AKSで同様に動作)
  2. ACM/Google証明書の代わりにcert-managerを維持(クラウド非依存のTLS)
  3. ベンダーロックインを避けるためにPostgreSQL on k8sを維持(トレードオフ:運用負荷の増加)
  4. Harborのようなクラウド非依存のレジストリを使用(セルフホスト、任意のk8sで動作)

クラウドサービスを受け入れる

運用を簡素化するために、クラウドごとのマネージドサービスを活用:

  • データベース:RDS (AWS) / Cloud SQL (GCP) — 運用負荷を大幅に軽減
  • レジストリ:ECR (AWS) / Artifact Registry (GCP) — IAMとの緊密な統合
  • TLS:ACM (AWS) / Managed Certs (GCP) — メンテナンス不要の証明書

正しい選択は、移植性(クラウド非依存を維持)と運用のシンプルさ(マネージドサービスを使用)のどちらを優先するかによります。