Skip to content

Kubernetes デプロイ

この手順は単一バックエンド構成の参考です。SQLite とインメモリキューを使用する現在の設計では、バックエンドを水平スケールしません。

前提条件

  • Kubernetes クラスタと kubectl
  • コンテナイメージを保存するレジストリ
  • SQLite とメディアファイルを保持する永続ボリューム
  • コンテナイメージに yt-dlpffmpeg が含まれていること

デプロイ前の設定

リポジトリの Kubernetes マニフェストをコピーまたは環境に合わせて管理し、次の値を必ず置き換えます。

対象設定する内容
Backend / Frontend イメージREGISTRY.example.com/media-server/<component>:<tag>
ノードセレクター永続ボリュームを利用できるノード名
PersistentVolumeDB とメディアの保存場所・容量
Serviceクラスタ内公開または外部公開の方式

WARNING

実ノード名、内部 DNS、レジストリの認証情報、アクセス用トークンを Git にコミットしないでください。認証情報は Kubernetes Secret またはデプロイ基盤のシークレット管理機能で渡します。

保存領域

DB 用とメディア用の PersistentVolumeClaim を作成します。バックエンドは次のパスへマウントする構成です。

コンテナ内のパス用途
/data/dbSQLite データベース
/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 とメディアのバックアップを取得してください。

Released under the MIT License.