Kompox: クラウドネイティブコンテナ Web アプリ DevOps ツールの紹介

756 Views

September 25, 25

スライド概要

Kubernetes Novice Tokyo #38
https://k8s-novice-jp.connpass.com/event/365526/

profile-image

Microsoft MVP for Microsoft Azure

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Kubernetes Novice Tokyo #38 Kompox: クラウドネイティブコンテナ Web アプリ DevOps ツールの紹介 株式会社バンダイナムコスタジオ 八重樫 剛史 Takeshi Yaegashi 2025/09/25

2.

自己紹介 • 名前: 八重樫 剛史 Takeshi Yaegashi • 組織: 株式会社バンダイナムコスタジオ (BNS) • 部署: テックスタジオ 第1グループ オンラインテクノロジー部 基盤ソリューション課 • 肩書: テクニカルディレクター • 社内開発者向けのクラウドサービス導入推進 プラットフォームエンジニアリングのプロジェクトに従事 • Microsoft MVP for Microsoft Azure (2023-2025) https://mvp.microsoft.com/ja-jp/PublicProfile/5005134 • Kubernetes については素人です 2

3.

Kompox とは? https://github.com/kompox/kompox • Kubernetes をターゲットにした Docker Compose 準拠のオーケストレーションツール • ひとつの compose.yml がローカルでもクラウドの Kubernetes でもシームレスに動く • マネージド Kubernetes・ディスク・スナップショットのライフサイクル管理 • マルチクラウド対応 (予定): AKS, OKE, EKS, GKE, K3s • 様々なステートフルワークロードの運用を省力化する • 先行プロジェクト: Kompose [1] • Docker Compose → Kubernetes Manifest 変換ツール • Kompose は変換だけのツールだが、Kompox はクラウド各社の Kubernetes クラスタや ブロックデバイスボリュームなどのクラウドネイティブリソースの運用にも対応する [1] https://kompose.io 3

4.

従来の仮想マシン上の Docker Compose によるサービスインフラ • クラウドの多数の仮想マシン上で Docker Compose で記述した様々なサービスが稼働 • フロントを Traefik リバースプロキシとしてバックエンドのサービスコンテナに接続 • 非常に安定して動作しているが、仮想マシンのメンテナンスがつらいので K8s などでクラウドネイティブ化したい • Kompox が前提とする SLA・可用性要件もこのレベル (シングルポッド・シングルレプリカ) 4

5.

ステートフルワークロードとは? • Kubernetesの文脈では、移動が容易でないデータをメモリやファイルに保持する必要があるPodやコンテナのこと • ロストが許されないデータは永続ボリューム (PV) に格納して保持する必要がある データベース • MySQL, PostgreSQL, SQLite, Redis, etc. • クラスタリング拡張が発達 • マネージドサービスでも代替可能 リポジトリ • Git, Subversion, Perforce, etc. • GHES, GitLab, Gitea などのアプリも含む • 大規模プロジェクトでは数TBクラス 反復ビルド・自動テスト • 反復ビルド、自動テスト、アセットビルド、 映像編集レンダリング、AI/ML、EDA、etc. • 毎回リポジトリからファイル転送するのが 現実的ではないもの (> 10GB) 開発者作業環境 • 開発者が SSH/RDP/Web で接続してファイ ル編集やビルドなど様々な作業を行う • GitHub Codespaces, Code Server, etc. 5

6.

ReadWriteOnce(RWO), ReadWriteMany(RWX) ボリュームとは? • Kubernetes のノードに接続する永続ボリューム (PV) の種類を表す用語 • ReadWriteOnce (RWO) • 同時ひとつのノードにしか接続できない永続ボリューム • I/O 性能が非常に高い、仮想マシンに直結する SSD や HDD などのブロックデバイス • 例: Azure Managed Disks, Amazon EBS, Google Persistent Disks • ReadWriteMany (RWX) • 同時に複数のノードに接続できる永続ボリューム • I/O 性能がほどほどの NFS/SMB などのネットワークファイルサーバ • 例: Azure Files, Amazon EFS, Google Filestore • ステートフルワークロードは性能上 RWO PV を前提とするものが多い • App Service, Fargate, Cloud Run といった簡便なコンテナマネージドサービスは RWO PV に対応していない (RWX のみ) • SQL や Redis といったデータベースなどはマネージドサービスに逃がすのがベストプラクティス • マネージドサービスに逃がせない RWO PV は、覚悟を決めて Kubernetes でホスティングするしかない 6

7.

Kompox CLI (kompoxops) 使用例 • ローカル環境で Gitea [1] を動かす compose.yml services: gitea: image: docker.gitea.com/gitea:1.24.6 environment: - USER_UID=1000 - USER_GID=1000 env_file: - compose-gitea.env volumes: - ./data/gitea:/data ports: - "3000:3000" postgres: image: postgres:17 env_file: - compose-postgres.env volumes: - ./data/postgres:/var/lib/postgresql/data [1] https://about.gitea.com $ docker compose up -d [+] Running 3/3 ✔ Network aks-e2e-gitea_default ✔ Container aks-e2e-gitea-postgres-1 ✔ Container aks-e2e-gitea-gitea-1 Created Started Started 0.1s 0.3s 0.3d $ xdg-open http://127.0.0.1:3000 7

8.

Kompox CLI (kompoxops) 使用例 • kompoxops.yml を追加 version: v1 service: version: v1 service: name: aks-e2e-gitea-20250925-000412 name: aks-e2e-gitea-20250925-000412 provider: name: aks1 provider: cluster: driver: aks settings: name: name:aks1 cluster1 AZURE_AUTH_METHOD: azure_cli AZURE_SUBSCRIPTION_ID: 9473abf6-f25e-420e-b3f2-128c1c7b46f2 existing: driver: aks false AZURE_LOCATION: eastus cluster: ingress: settings: name: cluster1 certEmail: [email protected] existing: false AZURE_AUTH_METHOD: azure_cli ingress: certResolver: staging certEmail: [email protected] app: certResolver: staging AZURE_SUBSCRIPTION_ID: 9473abf6-f25e-420e-b3f2-128c1c7b46f2 domain: cluster1.aks1.exp.kompox.dev domain: cluster1.aks1.exp.kompox.dev name: app1 certificates: AZURE_LOCATION: certificates: eastus - name: l0wdevtls compose: file:compose.yml source: https://l0wdevtls-jpe-prd1.vault.azure.net/secrets/cluster1-aks1-exp-kompox-dev - name: l0wdevtls settings: ingress: AZURE_AKS_SYSTEM_VM_SIZE: Standard_D2ds_v4 source: https://l0wdevtls-jpe-prd1.vault.azure.net/secrets/cluster1... AZURE_AKS_SYSTEM_VM_DISK_TYPE: Ephemeral settings: AZURE_AKS_SYSTEM_VM_DISK_SIZE_GB: 64 certResolver: staging AZURE_AKS_SYSTEM_VM_PRIORITY: Regular AZURE_AKS_SYSTEM_VM_SIZE: Standard_D2ds_v4 AZURE_AKS_SYSTEM_VM_ZONES: rules: AZURE_AKS_USER_VM_SIZE: Standard_D2ds_v4 AZURE_AKS_SYSTEM_VM_DISK_TYPE: Ephemeral AZURE_AKS_USER_VM_DISK_TYPE: Ephemeral - name: main AZURE_AKS_USER_VM_DISK_SIZE_GB: 64 AZURE_AKS_SYSTEM_VM_DISK_SIZE_GB: 64 AZURE_AKS_USER_VM_PRIORITY: Regular port: 3000 AZURE_AKS_USER_VM_ZONES: 1 AZURE_AKS_SYSTEM_VM_PRIORITY: Regular app: hosts: [gitea.custom.exp.kompox.dev] name: app1 AZURE_AKS_SYSTEM_VM_ZONES: compose: file:compose.yml AZURE_AKS_USER_VM_SIZE: Standard_D2ds_v4 ingress: deployment: certResolver: staging AZURE_AKS_USER_VM_DISK_TYPE: Ephemeral rules: zone: "1" - name: main AZURE_AKS_USER_VM_DISK_SIZE_GB: 64 port: 3000 volumes: hosts: [gitea.custom.exp.kompox.dev] AZURE_AKS_USER_VM_PRIORITY: Regular deployment: - name: default zone: "1" AZURE_AKS_USER_VM_ZONES: 1 volumes: size: 10Gi - name: default size: 10Gi options: options: sku: PremiumV2_LRS sku: PremiumV2_LRS 8

9.

Kompox CLI (kompoxops) 使用例 • AKS クラスターをプロビジョン $ kompoxops cluster provision 2025/09/25 06:04:14 INFO provision start cluster=cluster1 2025/09/25 06:04:14 INFO aks cluster provision begin subscription=9473abf6-f25e-420e-b3f2-128c1c7b46f2 resource_gro up=k4x-50vf7y_cls_cluster1_62mpgv tags="map[kompox-cluster-hash:62mpgv kompox-cluster-name:cluster1 kompox-provider -name:aks1 kompox-service-name:aks-e2e-gitea-20250925-060355 managed-by:kompox]" 2025/09/25 06:10:39 INFO aks cluster provision succeeded subscription=9473abf6-f25e-420e-b3f2-128c1c7b46f2 resource _group=k4x-50vf7y_cls_cluster1_62mpgv 2025/09/25 06:10:39 INFO provision success cluster=cluster1 9

10.

Kompox CLI (kompoxops) 使用例 • AKS クラスターに Ingress Controller (Traefik) をインストール $ kompoxops cluster install 2025/09/25 06:10:45 INFO install start cluster=cluster1 2025/09/25 06:10:45 INFO aks cluster install begin cluster=cluster1 provider=aks1 2025/09/25 06:11:01 INFO successfully assigned Key Vault Secrets User role key_vault=l0wdevtls-jpe-prd1 secret_name =cluster1-aks1-exp-kompox-dev cert_name=l0wdevtls principal_id=09331589-56b6-49d0-a440-6515949f2cbf 2025/09/25 06:11:01 INFO Key Vault role assignment summary success_count=1 error_count=0 total_count=1 2025/09/25 06:11:01 INFO applying kind=SecretProviderClass name=traefik-kv-l0wdevtls-jpe-prd1 namespace=traefik for ce=false 2025/09/25 06:11:03 INFO applying kind=ConfigMap name=traefik namespace=traefik force=false 2025/09/25 06:12:15 INFO aks cluster install succeeded cluster=cluster1 provider=aks1 2025/09/25 06:12:15 INFO install success cluster=cluster1 10

11.

Kompox CLI (kompoxops) 使用例 • AKS クラスターにアプリ (compose.yml) をデプロイ $ kompoxops app deploy --bootstrap-disks 2025/09/25 06:12:20 INFO bootstrap disks before deploy app=app1 2025/09/25 06:12:24 INFO ensuring resource group subscription=9473abf6-f25e-420e-b3f2-128c1c7b46f2 location=eastus resource_group=k4x-50vf7y_app_app1 _13o40q tags="map[kompox-app-id-hash:13o40q kompox-app-name:app1 kompox-provider-name:aks1 kompox-service-name:aks-e2e-gitea-20250925-060355 managedby:kompox]" 2025/09/25 06:12:26 INFO ensuring role assignment scope=/subscriptions/9473abf6-f25e-420e-b3f2-128c1c7b46f2/resourceGroups/k4x-50vf7y_app_app1_13o40q principal_id=bf4fc6cf-a899-4dad-85a7-48bf1c513373 role_definition_id=b24988ac-6180-42a0-ab88-20f7382dd24c 2025/09/25 06:12:41 INFO applying kind=Namespace name=k4x-50vf7y-app1-13o40q namespace="" force=true 2025/09/25 06:12:41 INFO applying kind=ServiceAccount name=app1 namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:41 INFO applying kind=NetworkPolicy name=app1 namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:41 INFO applying kind=PersistentVolume name=k4x-50vf7y-default-13o40q-5xmnms namespace="" force=true 2025/09/25 06:12:42 INFO applying kind=PersistentVolumeClaim name=k4x-50vf7y-default-13o40q-5xmnms namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:42 INFO applying kind=Secret name=app1-app-postgres-base namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:42 INFO applying kind=Secret name=app1-app-gitea-base namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:42 INFO applying kind=Deployment name=app1-app namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:43 INFO applying kind=Service name=app1-app namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:43 INFO applying kind=Service name=gitea namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:43 INFO applying kind=Service name=postgres namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:43 INFO applying kind=Ingress name=app1-app-default namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:44 INFO applying kind=Ingress name=app1-app-custom namespace=k4x-50vf7y-app1-13o40q force=true 2025/09/25 06:12:44 INFO deploy success app=app1 2025/09/25 06:12:45 INFO patched deployment secrets deployment=app1-app hashChanged=true imagePullSecretsChanged=false 11

12.
[beta]
Kompox CLI (kompoxops) 使用例
• AKS クラスターのステータス表示
$ kompoxops app status
{
"app_id": "d7a5e3f3326dc6bf",
"app_name": "app1",
"cluster_id": "3fdb93b7b0e964d2",
"cluster_name": "cluster1",
"ready": false,
"image": "docker.gitea.com/gitea:1.24.6",
"namespace": "k4x-50vf7y-app1-13o40q",
"node": "aks-npuser1-33452345-vmss000000",
"deployment": "app1-app",
"pod": "app1-app-5bb7f44495-ckbpt",
"container": "gitea",
"command": null,
"args": null,
"ingress_hosts": [
"app1-13o40q-3000.cluster1.aks1.exp.kompox.dev",
"gitea.custom.exp.kompox.dev"
]
}

12

13.

Kompox CLI (kompoxops) 使用例 • AKS クラスタの接続情報取得 $ ./kompoxops cluster kubeconfig --merge --set-current $ kubectl get pod -o wide NAME app1-app-5bb7f44495-ckbpt READY 2/2 STATUS Running RESTARTS 0 AGE 52m IP 10.244.1.160 $ kubectl get ingress -o wide NAME CLASS HOSTS app1-app-custom traefik gitea.custom.exp.kompox.dev app1-app-default traefik app1-13o40q-3000.cluster1.aks1.exp.kompox.dev NODE aks-npuser1-33452345-vmss000000 ADDRESS 135.222.244.115 135.222.244.115 PORTS 80 80 NOMINATED NODE <none> READINESS GATES <none> AGE 52m 52m 13

14.

Kompox CLI (kompoxops) 使用例 • Gitea コンテナのログ表示 $ ./kompoxops app logs -c gitea Generating /data/ssh/ssh_host_ed25519_key... Generating /data/ssh/ssh_host_rsa_key... Generating /data/ssh/ssh_host_ecdsa_key... Server listening on :: port 22. Server listening on 0.0.0.0 port 22. 2025/09/25 06:13:54 cmd/web.go:261:runWeb() [I] Starting Gitea on PID: 15 2025/09/25 06:13:54 cmd/web.go:114:showWebStartupMessage() [I] Gitea version: 1.24.6 built with GNU Make 4.4.1, go1.24.7 : bindata, tim etzdata, sqlite, sqlite_unlock_notify 2025/09/25 06:13:54 cmd/web.go:115:showWebStartupMessage() [I] * RunMode: prod 2025/09/25 06:13:54 cmd/web.go:116:showWebStartupMessage() [I] * AppPath: /usr/local/bin/gitea 2025/09/25 06:13:54 cmd/web.go:117:showWebStartupMessage() [I] * WorkPath: /data/gitea 2025/09/25 06:13:54 cmd/web.go:118:showWebStartupMessage() [I] * CustomPath: /data/gitea 2025/09/25 06:13:54 cmd/web.go:119:showWebStartupMessage() [I] * ConfigFile: /data/gitea/conf/app.ini 2025/09/25 06:13:54 cmd/web.go:120:showWebStartupMessage() [I] Prepare to run install page 2025/09/25 06:13:54 cmd/web.go:323:listen() [I] Listen: http://0.0.0.0:3000 2025/09/25 06:13:54 cmd/web.go:327:listen() [I] AppURL(ROOT_URL): http://localhost:3000/ 2025/09/25 06:13:54 modules/graceful/server.go:50:NewServer() [I] Starting new Web server: tcp:0.0.0.0:3000 on PID: 15 14

15.

Kompox の開発進捗 • 今年のお盆休みより個人開発でプロジェクト開始 • 個人的に得意な言語である Go を採用 • 実装のほとんどは GitHub Copilot が担当 • Ask Mode でデザインドキュメントを一緒に考えた後、 Agent Mode に切り替えて実装をお願いする繰り返し • モデルは Premium Requests が必要な GPT-5 か Claude Sonnet 4 無料モデルでは性能が足りない • GPT-5 は遅いことを除けば概ね優秀だが、突然バカになることが あって困った GPT-5-Codex に期待 • Kubernetes や Helm の SDK についてはほとんど初心者 だが困ることはなかった • AKS (Azure) については当初予定していた仕様をほぼ実装完了 • 次は OKE (Oracle) をターゲットにドライバ実装する予定 15

16.

Kompox の開発ロードマップ • マルチクラウド対応 • AKS (Azure)・OKE (Oracle Cloud)・EKS (Amazon)・GKE (Google Cloud)・K3s (Self-hosted) • Kompox は Provider Driver という層でクラウドごとの差異を吸収する • Kompox CLI (kompoxops) をクラウドネイティブオーケストレーションツールとして普及をはかる • ローカルでの開発体験をそのまま Kubernetes クラスタに持ち込むことが可能 • 開発者は compose.yml と kompoxops.yml を用意するだけでアプリが公開できる • RWO PV の実体であるディスク・スナップショット管理、Podフェイルオーバーなどの運用メンテナンスが簡単に • PaaS 化する • 組織内のコンテナアプリホスティングプラットフォームとして整備する • RBAC やビリングなどの仕組みを整備する 16

17.

CloudNative Days Winter 2025 にプロポーザルを出しました 開催日時: 2025/11/18(火)-11/19(水) タイトル: Kompox: ステートフルワークロード運用が スケールする未来をつくる 投票よろしくお願いします! https://event.cloudnativedays.jp/cndw2025/proposals/1000 話す予定の内容 • Kompox CLI による実際のサービス運用事例 • マルチクラウド対応実装で得られた知見紹介 • Kubernetes 上のステートフルワークロード運用の 今後について考察 17

18.

Thank You!! 18