クラウドネイティブ概要¶
KanjiIQはクラウドネイティブの原則に従って設計されており、Kubernetes準拠のあらゆるプラットフォーム間で移植可能です。アプリケーションは標準のKubernetes APIを使用し、プロプライエタリなクラウドプロバイダー拡張は使用していません。
12-Factor Appへの準拠¶
| ファクター | KanjiIQの実装 |
|---|---|
| I. コードベース | バージョン管理で追跡される単一のGitリポジトリ(Forgejo) |
| II. 依存関係 | pubspec.yaml(Dart)およびrequirements-docs.txt(Python)で明示的に宣言 |
| III. 設定 | Kubernetes SecretとConfigMapを通じて注入される環境変数 |
| IV. バッキングサービス | DATABASE_URLを通じてアクセスするPostgreSQL — コード変更なしで交換可能 |
| V. ビルド、リリース、実行 | マルチステージDockerビルド → タグ付きイメージ → Kubernetesローリングアップデート |
| VI. プロセス | ステートレスなアプリケーションコンテナ;状態はPostgreSQLに保存 |
| VII. ポートバインディング | 自己完結型サービス:frontend :80、backend :8080 |
| VIII. 並行性 | Kubernetesレプリカによる水平スケーリング |
| IX. 廃棄容易性 | 高速起動、グレースフルシャットダウン、ヘルスプローブ |
| X. 開発/本番一致 | ステージングnamespaceが本番マニフェストをミラーリング |
| XI. ログ | 標準出力/標準エラー(Kubernetesがノードファイルシステムにキャプチャ) |
| XII. 管理プロセス | データベースマイグレーションをワンオフコマンドとして実行 |
KanjiIQがクラウドネイティブである理由¶
標準Kubernetes APIのみ¶
すべてのリソースは標準のapps/v1、v1、networking.k8s.io/v1 APIグループを使用しています:
Deployment(クラウド固有のマネージドサービスではない)Service(ClusterIP — どこでも動作)Ingress(標準ネットワーキングAPI)PersistentVolumeClaim(クラウド非依存のストレージリクエスト)Secret(標準設定管理)
唯一の非標準CRDはTraefik Middlewareです — これはあらゆるプラットフォームで同等のingressコントローラー機能に置き換えることができます。
すべてをコンテナ化¶
すべてのコンポーネントに本番用のDockerfileがあります:
| コンポーネント | Dockerfile | ベースイメージ |
|---|---|---|
| Frontend | Dockerfile.frontend |
nginx:alpine |
| Backend | Dockerfile.backend |
dart:stable |
| Documentation | Dockerfile.docs |
nginx:alpine |
すべてのイメージは:
- マルチステージビルドを使用(小さな本番イメージ)
- 非root(UID 1000)で実行
- ヘルスチェックを含む
- コンテナレジストリにプッシュ(任意のレジストリに移植可能)
Infrastructure as Code¶
インフラストラクチャの100%がバージョン管理されたYAMLで定義されています:
k8s/
├── 00-namespace.yaml
├── 01-secrets.yaml (template)
├── 02-postgres-pvc.yaml
├── 03-postgres-deployment.yaml
├── 05-deployment.yaml
├── 06-service.yaml
├── 07-ingress.yaml
├── 08-security-middlewares.yaml
└── ...
環境全体をゼロから再作成するには以下のみが必要です:
移植性の評価¶
| コンポーネント | 移植性 | 備考 |
|---|---|---|
| アプリケーションDeployment | 完全に移植可能 | 標準k8sマニフェスト |
| Service | 完全に移植可能 | ClusterIPはどこでも動作 |
| Ingress | ほぼ移植可能 | ingressクラスの変更が必要な場合あり |
| PVC | 完全に移植可能 | クラウドプロバイダーが自動プロビジョニング |
| Secret | 完全に移植可能 | すべてのクラウドで同じAPI |
| Traefik Middleware | 適応が必要 | クラウドネイティブの代替手段に置換 |
| コンテナイメージ | 完全に移植可能 | 任意のOCIレジストリにプッシュ |
| CI/CD | 適応が必要 | Forgejo Actions → GitHub Actions / Cloud Build |
AWSおよびGCPへの詳細な移行ガイドは移植性を参照してください。