Kubernetes デプロイ
この手順は単一バックエンド構成の参考です。SQLite とインメモリキューを使用する現在の設計では、バックエンドを水平スケールしません。
前提条件
- Kubernetes クラスタと
kubectl - コンテナイメージを保存するレジストリ
- SQLite とメディアファイルを保持する永続ボリューム
- コンテナイメージに
yt-dlpとffmpegが含まれていること
デプロイ前の設定
リポジトリの Kubernetes マニフェストをコピーまたは環境に合わせて管理し、次の値を必ず置き換えます。
| 対象 | 設定する内容 |
|---|---|
| Backend / Frontend イメージ | REGISTRY.example.com/media-server/<component>:<tag> |
| ノードセレクター | 永続ボリュームを利用できるノード名 |
| PersistentVolume | DB とメディアの保存場所・容量 |
| Service | クラスタ内公開または外部公開の方式 |
WARNING
実ノード名、内部 DNS、レジストリの認証情報、アクセス用トークンを Git にコミットしないでください。認証情報は Kubernetes Secret またはデプロイ基盤のシークレット管理機能で渡します。
保存領域
DB 用とメディア用の PersistentVolumeClaim を作成します。バックエンドは次のパスへマウントする構成です。
| コンテナ内のパス | 用途 |
|---|---|
/data/db | SQLite データベース |
/data/downloads | 取得・アップロードしたメディア |
DB とメディアは同じ復旧単位としてバックアップしてください。PVC を削除する前に保持ポリシーとバックアップを必ず確認します。
適用順序
bash
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/pv-db.yaml
kubectl apply -f k8s/pv-downloads.yaml
kubectl apply -f k8s/pvc-db.yaml
kubectl apply -f k8s/pvc-downloads.yaml
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/backend-service.yaml
kubectl apply -f k8s/backend-deployment.yaml
kubectl apply -f k8s/frontend-service.yaml
kubectl apply -f k8s/frontend-deployment.yaml動作確認
bash
kubectl get pods -n media-server
kubectl get svc -n media-server
kubectl rollout status deployment/media-server-backend -n media-server
kubectl rollout status deployment/media-server-frontend -n media-serverバックエンドのヘルスエンドポイントは /api/health です。Service 経由でこのパスが 200 を返すことを確認してください。
更新時の注意
バックエンドは単一レプリカで Recreate 戦略を維持します。ReadWriteOnce のボリュームを複数 Pod が同時にマウントしないようにし、更新前には DB とメディアのバックアップを取得してください。