OpenClawをKubernetesへデプロイ:最短で構築する方法
Kubernetes で新しいツールを動かそうとするとき、複雑な設定やマニフェストの管理に圧倒されてしまうことはありませんか?「もっとシンプルに、まずは動く環境を手に入れたい」というのは、多くの開発者が抱える共通の悩みです。
OpenClaw を Kubernetes 上で動かすための、最小限のスタート地点をご紹介します。これは本番環境用ではなく、コアとなるリソースを把握し、自分の環境に合わせて調整していくためのベースとして活用してください。
なぜ Helm ではないのか?
Section titled “なぜ Helm ではないのか?”OpenClaw は、いくつかの設定ファイルを持つシンプルな単一コンテナです。カスタマイズの肝は、インフラのテンプレート化ではなく、エージェントの内容(Markdown ファイル、スキル、設定の上書き)にあります。Kustomize を使えば、Helm チャートのようなオーバーヘッドなしでオーバーレイを処理できます。もしデプロイがより複雑になった場合は、これらのマニフェストの上に Helm チャートを重ねることも可能です。
kubectlが接続された、実行中の Kubernetes クラスター(AKS, EKS, GKE, k3s, kind, OpenShift など)- 少なくとも 1 つのモデルプロバイダーの API key
クイックスタート
Section titled “クイックスタート”# Replace with your provider: ANTHROPIC, GEMINI, OPENAI, or OPENROUTERexport <PROVIDER>_API_KEY="..."./scripts/k8s/deploy.sh
kubectl port-forward svc/openclaw 18789:18789 -n openclawopen http://localhost:18789Gateway のトークンを取得して、Control UI に貼り付けてください:
kubectl get secret openclaw-secrets -n openclaw -o jsonpath='{.data.OPENCLAW_GATEWAY_TOKEN}' | base64 -dローカルでのデバッグ用に、./scripts/k8s/deploy.sh --show-token を実行すると、デプロイ後にトークンを表示できます。
Kind を使ったローカルテスト
Section titled “Kind を使ったローカルテスト”クラスターが手元にない場合は、Kind を使ってローカルに作成しましょう:
./scripts/k8s/create-kind.sh # auto-detects docker or podman./scripts/k8s/create-kind.sh --delete # tear down作成後は、通常通り ./scripts/k8s/deploy.sh でデプロイできます。
ステップ・バイ・ステップ
Section titled “ステップ・バイ・ステップ”1) デプロイ
Section titled “1) デプロイ”オプション A — 環境変数に API key を設定(ワンステップ):
# Replace with your provider: ANTHROPIC, GEMINI, OPENAI, or OPENROUTERexport <PROVIDER>_API_KEY="..."./scripts/k8s/deploy.shこのスクリプトは、API key と自動生成された Gateway トークンを含む Kubernetes Secret を作成し、デプロイを実行します。すでに Secret が存在する場合は、現在の Gateway トークンと、変更されていないプロバイダーのキーを保持します。
オプション B — Secret を個別に作成:
export <PROVIDER>_API_KEY="..."./scripts/k8s/deploy.sh --create-secret./scripts/k8s/deploy.shローカルテストでトークンを標準出力に表示したい場合は、どちらのコマンドでも --show-token を使用してください。
2) Gateway へのアクセス
Section titled “2) Gateway へのアクセス”kubectl port-forward svc/openclaw 18789:18789 -n openclawopen http://localhost:18789デプロイされるリソース
Section titled “デプロイされるリソース”Namespace: openclaw (configurable via OPENCLAW_NAMESPACE)├── Deployment/openclaw # Single pod, init container + gateway├── Service/openclaw # ClusterIP on port 18789├── PersistentVolumeClaim # 10Gi for agent state and config├── ConfigMap/openclaw-config # openclaw.json + AGENTS.md└── Secret/openclaw-secrets # Gateway token + API keysカスタマイズ
Section titled “カスタマイズ”エージェントの指示(Agent instructions)
Section titled “エージェントの指示(Agent instructions)”scripts/k8s/manifests/configmap.yaml 内の AGENTS.md を編集して再デプロイします:
./scripts/k8s/deploy.shGateway の設定
Section titled “Gateway の設定”scripts/k8s/manifests/configmap.yaml 内の openclaw.json を編集します。詳細なリファレンスは Gateway configuration を参照してください。
プロバイダーの追加
Section titled “プロバイダーの追加”追加のキーをエクスポートして再実行します:
export ANTHROPIC_API_KEY="..."export OPENAI_API_KEY="..."./scripts/k8s/deploy.sh --create-secret./scripts/k8s/deploy.sh既存のプロバイダーキーは、上書きしない限り Secret 内に保持されます。
または、Secret に直接パッチを当てることもできます:
kubectl patch secret openclaw-secrets -n openclaw \ -p '{"stringData":{"<PROVIDER>_API_KEY":"..."}}'kubectl rollout restart deployment/openclaw -n openclawカスタム Namespace
Section titled “カスタム Namespace”OPENCLAW_NAMESPACE=my-namespace ./scripts/k8s/deploy.shカスタムイメージ
Section titled “カスタムイメージ”scripts/k8s/manifests/deployment.yaml の image フィールドを編集します:
image: ghcr.io/openclaw/openclaw:2026.3.1port-forward 以外での公開
Section titled “port-forward 以外での公開”デフォルトのマニフェストでは、Gateway は Pod 内部のループバックにバインドされています。これは kubectl port-forward では機能しますが、Pod の IP に到達する必要がある Kubernetes の Service や Ingress パスでは機能しません。
Ingress やロードバランサー経由で Gateway を公開したい場合は、以下の対応が必要です:
scripts/k8s/manifests/configmap.yaml内の Gateway のバインド設定を、loopbackからデプロイモデルに合わせた非ループバックのバインドに変更する- Gateway の認証を有効にしたまま、適切な TLS 終端ポイントを使用する
- リモートアクセス用に、サポートされている Web セキュリティモデル(HTTPS/Tailscale Serve や、必要に応じた明示的な許可オリジンの設定など)を使用して Control UI を構成する
./scripts/k8s/deploy.shこれにより、すべてのマニフェストが適用され、Pod が再起動して設定や Secret の変更が反映されます。
クリーンアップ
Section titled “クリーンアップ”./scripts/k8s/deploy.sh --deleteこれにより、Namespace とその中のすべてのリソース(PVC を含む)が削除されます。
アーキテクチャに関する注意点
Section titled “アーキテクチャに関する注意点”- Gateway はデフォルトで Pod 内のループバックにバインドされるため、同梱のセットアップは
kubectl port-forward用となっています。 - クラスター全体に影響するリソース(Cluster-scoped resources)は使用せず、すべてが単一の Namespace 内で完結します。
- セキュリティ面では、
readOnlyRootFilesystem、drop: ALLケーパビリティ、非ルートユーザー(UID 1000)の使用を採用しています。 - デフォルト設定では、Control UI はより安全なローカルアクセスパス(ループバックバインドと
kubectl port-forwardによるhttp://127.0.0.1:18789へのアクセス)を維持します。 - localhost 以外のアクセスに移行する場合は、サポートされているリモートモデル(HTTPS/Tailscale と適切な Gateway バインド、Control UI のオリジン設定)を使用してください。
- Secret は一時ディレクトリで生成され、クラスターに直接適用されます。リポジトリのチェックアウト内に Secret の情報が書き込まれることはありません。
ファイル構成
Section titled “ファイル構成”scripts/k8s/├── deploy.sh # Creates namespace + secret, deploys via kustomize├── create-kind.sh # Local Kind cluster (auto-detects docker/podman)└── manifests/ ├── kustomization.yaml # Kustomize base ├── configmap.yaml # openclaw.json + AGENTS.md ├── deployment.yaml # Pod spec with security hardening ├── pvc.yaml # 10Gi persistent storage └── service.yaml # ClusterIP on 18789次のステップ
Section titled “次のステップ”困ったときは AI Setup Assistant に相談してみてください。
OpenClaw Expert
まだ解決しませんか?
このページで解決しない場合は、OpenClaw Expertに直接質問してください。