2026 OpenClaw 「コンテナ化と Kubernetes オーケストレーション」完全ガイド: Docker のデプロイメントから macOS ノード オペレーターの実践まで

Dockerイメージの最適化・K8sリソースリスト・macOSノードオペレーター・HPA自動伸縮

2026 OpenClaw コンテナ化と Kubernetes オーケストレーション

OpenClaw はまだローカルで直接実行されますか?マルチチームのコラボレーション、柔軟なスケーリング、クロスリージョン展開のニーズに直面して、ネイティブ インストール方法では不十分になってきています。この記事では、完全なコンテナ化と K8s オーケストレーション ソリューション: OpenClaw を標準 Docker イメージに変換し、macOS ノードで Kubernetes Operator を使用して、自動デプロイメント、サービス公開、カスタム インジケーターに基づく HPA の拡張と縮小を実現する方法。この記事の最後には、多段階のビルド最適化チェックリスト、macOS 権限の構成、コストと回復力のトレードオフ マトリックスが含まれています。

01

OpenClaw をコンテナ化する理由: オンプレミスからクラウドネイティブへの進化

OpenClaw をローカル ノード環境から Docker コンテナに移行し、さらにそれを Kubernetes にデプロイすることは、「技術的なホット スポットを追跡する」ことではなく、運用環境の本当の問題点を解決することです。

  1. 01

    環境の一貫性の欠如: 開発者や CI ノードごとにノードのバージョンや npm パッケージの依存関係が異なるため、「私のマシンで実行できるか」という問題が頻繁に発生します。コンテナ化により、ランタイム環境の完全な一貫性が保証されます。

  2. 02

    非効率な膨張と収縮: ローカルにインストールされた OpenClaw を複製したり、水平方向に迅速にスケーリングしたりすることはできません。タスクキューが蓄積すると、新しいインスタンスは手動でしか起動できなくなり、応答速度が予想よりも大幅に遅くなります。

  3. 03

    リージョンを越えた展開の難しさ:OpenClaw を複数のリージョンのリモート Mac ノードに展開する必要がある場合、手動操作ではエラーが発生しやすく、均一に管理することが困難です。 K8s の宣言型構成により、ゾーン間の一貫性が可能になります。

  4. 04

    障害回復が遅い: ノードがダウンした後、ノードを再インストールして構成するには手動介入が必要です。コンテナ オーケストレーターは障害を自動的に検出して再スケジュールできるため、MTTR が大幅に削減されます。

  5. 05

    リソース使用率が低い: 各 OpenClaw インスタンスは 1 台のマシンを占有するため、リソースが大幅に浪費されます。 K8s はマルチテナント共有とリソース割り当て制御を実現し、全体的な使用率を向上させます。

コンテナ化の利点: 2026 年の DevOps 調査によると、コンテナ化された AI エージェント サービスの平均障害復旧時間は 70% 短縮され、リソース使用率は 40% 以上増加しました。

02

OpenClaw コンテナ化の事前準備:環境変数化と永続ボリューム設計

Dockerfile を作成する前に、OpenClaw の構成をファイル システムから環境変数と外部ストレージに移行する必要があります。これはコンテナ化の重要な最初のステップです。

元の構成(ファイル)コンテナ化の方針説明
openclaw.jsonAPI キー構成マップ/シークレット機密情報は、K8s Secret または外部ボールトを使用して管理する必要があります
storage.type = "file"に変更しますredisまたはクラウドストレージコンテナ ファイル システムは一時的なものであるため、外部化する必要があります
gateway.address = "0.0.0.0:8080"環境変数GATEWAY_ADDRDocker経由のポートマッピング-pまたは K8s サービス処理
skillsローカルパスConfigMap またはサイドカー コンテナー更新を容易にするために、スキル定義は画像から独立している必要があります
logsローカルに書き込むstdout/stderr + サイドカーコレクション12FA アプリケーションの仕様に従い、コンソールにログを出力します。

主な変更点: 環境変数から読み取るように「openclaw.json」を変更します。例:

openclaw.json (環境変数バージョン)
{
  "storage": {
    "type": "redis",
    "host": "${REDIS_HOST}",
    "port": 6379,
    "password": "${REDIS_PASSWORD}"
  },
  "gateway": {
    "address": "${GATEWAY_ADDR}",
    "adminPort": "${ADMIN_PORT}"
  },
  "llm": {
    "provider": "${LLM_PROVIDER}",
    "apiKey": "${LLM_API_KEY}"
  }
}
03

Docker イメージの最適化: 多段階のビルドとヘルスチェック

効率的で安全な Docker イメージは、K8s オーケストレーションの基盤です。マルチステージ ビルドを使用してサイズを削減し、セキュリティを強化し、K8s 監視のヘルス チェックを追加します。

  1. 01

    適切なベース画像を選択してください: 公式の Node.js イメージを使用します (例:node:18-alpine) サイズと攻撃対象領域を削減するために、完全な OS ではなくランタイム フェーズの基礎として使用されます。

  2. 02

    多段階ビルド: 第 1 段階では依存関係をインストールして (存在する場合) コンパイルし、第 2 段階では実行環境だけを作成し、最終イメージには実行時に必要なファイルのみが含まれるため、サイズを 60% 以上削減できます。

  3. 03

    非 root ユーザーとして実行する:Dockerfile に専用ユーザーを作成します (例:openclaw) 一緒に使用されますUSERコンテナー内で root として実行されないようにコマンドを切り替えます。

  4. 04

    ヘルスチェックを追加する:Dockerfileで宣言するHEALTHCHECK、OpenClaw を呼び出します/healthコンテナーの起動後にサービスが利用可能であることを確認するためのエンドポイント。

  5. 05

    公開ポート:合格EXPOSE 8080サービス ポートを宣言すると、K8s サービスはそれに応じてトラフィックを転送します。

  6. 06

    レイヤーの最適化: 依存関係のインストールとソース コードのコピーを分離し、Docker レイヤー キャッシュを使用してビルドを高速化します。使用npm ci --only=production開発の依存関係が運用イメージに入らないようにします。

Dockerfile (多段階ビルドの例)
# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 运行阶段
FROM node:18-alpine
WORKDIR /app
RUN addgroup -g 1001 -S openclaw && adduser -u 1001 -S openclaw -G openclaw
COPY --from=builder --chown=openclaw:openclaw /app/dist ./dist
COPY --from=builder --chown=openclaw:openclaw /app/node_modules ./node_modules
COPY --from=builder --chown=openclaw:openclaw /app/package*.json ./
USER openclaw
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
  CMD node -e "require('http').get('http://localhost:8080/health', (r) => {if(r.statusCode!==200)throw new Error('unhealthy')})"
CMD ["node", "dist/index.js"]
04

K8s リソース リスト: デプロイメント、サービス、イングレス、および ConfigMap

Kubernetes を完全にデプロイするには、複数のリソース オブジェクトのコラボレーションが必要です。以下は、リモート Mac ノードで OpenClaw を実行するための最小限の実行可能なセットです。

リソースの種類効果主要なフィールド
導入Pod レプリカとローリング アップデートの数を管理するレプリカ、セレクター、テンプレート、ストラテジー
サービス内部負荷分散と DNS 検出タイプ (ClusterIP)、ポート、セレクター
イングレス外部HTTP/HTTPSルーティングルール、ホスト、パス、サービス名、サービスポート
構成マップ機密性の低い構成ストレージデータ、不変
秘密機密情報 (API キー、パスワード)タイプ: 不透明、データ (base64)

以下は、OpenClaw のデプロイメント、サービス、イングレス、および ConfigMap を含む完全な YAML の例です。 Secretは別途作成する必要があります。

openclaw-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: openclaw
  labels:
    app: openclaw
spec:
  replicas: 2
  selector:
    matchLabels:
      app: openclaw
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: openclaw
    spec:
      containers:
      - name: openclaw
        image: your-registry/openclaw:latest
        ports:
        - containerPort: 8080
        env:
        - name: GATEWAY_ADDR
          value: "0.0.0.0:8080"
        - name: REDIS_HOST
          valueFrom:
            configMapKeyRef:
              name: openclaw-config
              key: redis.host
        - name: REDIS_PASSWORD
          valueFrom:
            secretKeyRef:
              name: openclaw-secret
              key: redis.password
        readinessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 15
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 30
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
  name: openclaw
spec:
  selector:
    app: openclaw
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: openclaw
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: openclaw.vpsmesh.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: openclaw
            port:
              number: 80
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: openclaw-config
data:
  redis.host: "redis-cluster.vpsmesh.com"
  llm.provider: "openai"
05

macOS ノードの特異性とオペレーターの実戦

Kubernetes は通常、Linux クラスター上で実行されますが、OpenClaw をリモート Mac ノードにデプロイするには、ハードウェア バインディング、権限、特権モードなどの特性に対処する必要があります。 Kubernetes Operator はこれらの複雑さをカプセル化し、自動化された運用とメンテナンスを実現します。

  • ハードウェアバインディング: 特定の OpenClaw スキルには、macOS 固有のハードウェア (Apple Silicon Neural Engine など) へのアクセスが必要な場合があります。ノードタグ (例:node-role.kubernetes.io/macos=true) とアフィニティ ルールにより、ポッドが確実に Mac ノードにスケジュールされます。
  • 特権コンテナ: 一部のスキルには昇格された権限が必要です。合格securityContext.privileged: trueallowPrivilegeEscalation: true有効ですが、使用は厳密に制限する必要があります。
  • デバイスプラグイン: GPU/NPU にアクセスする必要がある場合は、対応するデバイス プラグイン (たとえば、k8s-device-plugin) リソース制限で宣言しますlimits: apple.com/metal: 1
  • 永続ボリューム: macOS ノード上のローカル ストレージ (/var/lib/openclaw など) には、次の方法でアクセスできます。hostPathLocalPV は公開されますが、データの永続性と移行の問題に注意する必要があります。
  • オペレーターモード: カスタム Operator を作成し (OperatorSDK または Kopf を使用)、次のような OpenClaw のカスタム リソース (CR) を追加します。OpenClawAgentデプロイメントやサービスなどのネイティブ リソースに変換して、ワンクリックでのデプロイメントとライフサイクル管理を実現します。

セキュリティ警告: macOS ノードがコンテナーを実行する場合、カーネル レベルの分離は Linux ほど厳密ではありません。常にサンドボックス環境で特権コンテナをテストし、スケジュール可能なノードの範囲を制限します。

Operator のスケルトンの例 (Kopf を使用):

openclaw_operator.py (Kopf スケルトン)
import kopf

@kopf.on.create('openclawvpsmesh.io', 'v1', 'openclawagents')
def create_fn(spec, **kwargs):
    # 提取 spec 中的配置
    image = spec.get('image', 'your-registry/openclaw:latest')
    replicas = spec.get('replicas', 1)
    redis_host = spec['redis']['host']
    redis_password = spec['redis'].get('password')

    # 创建 Deployment
    deployment = {
        "apiVersion": "apps/v1",
        "kind": "Deployment",
        "metadata": {"name": f"openclaw-{kwargs['name']}"},
        "spec": {
            "replicas": replicas,
            "selector": {"matchLabels": {"app": "openclaw"}},
            "template": {
                "metadata": {"labels": {"app": "openclaw"}},
                "spec": {
                    "containers": [{
                        "name": "openclaw",
                        "image": image,
                        "env": [
                            {"name": "REDIS_HOST", "value": redis_host},
                            {"name": "REDIS_PASSWORD", "value": redis_password}
                        ],
                        "ports": [{"containerPort": 8080}]
                    }]
                }
            }
        }
    }
    # 这里简化:实际需调用 K8s API 创建资源
    return {"status": "created"}
06

HPA 自動スケーリング: キューの深さに基づくカスタム メトリック

OpenClaw の負荷はタスク キューの深さに直接関係します。 K8s の horizo​​ntalPodAutoscaler は、カスタム指標 (キューの長さ、タスクの応答時間など) に基づいてレプリカの数を自動的に調整し、柔軟なスケーリングを実現できます。

インジケーターの種類説明する伸縮閾値冷却時間
CPU使用率ポッドの CPU 使用率拡大 >70%、縮小 <30%300年代
メモリ使用量ポッドのメモリ使用率拡大 >80%、縮小 <40%300s
キューの深さOpenClaw の保留中のタスク50 タスクを超える拡張、10 タスク未満のタスクの縮小180年代
タスクの応答時間P95 応答遅延拡張 > 2 秒、縮小 < 500 ミリ秒300s

キューの深さに基づいて拡張と縮小を実装するには、Prometheus モニタリング スタックをデプロイし、対応するカスタム メトリクス APIAdapter を作成する必要があります。 HPA 構成の例は次のとおりです。

hpa-openclaw.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: openclaw-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: openclaw
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: Pods
    pods:
      metric:
        name: openclaw_queue_depth
      target:
        type: AverageValue
        averageValue: 50
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300
      policies:
      - type: Pods
        value: 1
        periodSeconds: 300
    scaleUp:
      stabilizationWindowSeconds: 60
      policies:
      - type: Pods
        value: 2
        periodSeconds: 60

コストと弾力性のトレードオフ: レプリカの下限値が高すぎるとリソースが浪費され、遅延しきい値が低すぎると頻繁な拡張と縮小 (フラッピング) が発生する可能性があります。オンラインにする前に、オフピーク時間にストレス テストを実行して、適切なベースライン値を決定することをお勧めします。

07

コスト弾力性のトレードオフ マトリックスと導入チェックリスト

コンテナ化と K8s オーケストレーションは「特効薬」ではありません。これらは運用の複雑さとリソースのオーバーヘッドをもたらします。次の 3 つの重要なデータは、投資する価値があるかどうかを判断するのに役立ちます。

  • ミラーボリューム効果: 最適化されたマルチステージ ビルドにより、イメージが 1.2 GB から 400 MB 未満に削減され、プルが高速化され、ストレージ コストが削減されます。クロスリージョンのシナリオでは、1 GB のデータのプッシュ/プルごとに 0.02 ~ 0.05 ドルのトラフィック料金が発生する可能性があります。
  • HPA拡張頻度: 頻繁な拡張と縮小 (1 日あたり 20 回を超える) により、K8s コントロール プレーンの負荷が増加し、リクエスト遅延ジッターが発生します。適度な値を設定することをお勧めしますstabilizationWindowSecondsそして「振動」を避けるための拡張と収縮のステップ。
  • macOS ノードのコスト: macOS 上で K8s ノードを実行する場合のリソース オーバーヘッド (例: K3s または minikube 経由) は、約 200 ~ 300 MB のメモリと 0.1 ~ 0.2 vCPU で、長期運用にかかる追加コストは TCO に考慮されます。それに比べて、Linux ノードのオーバーヘッドは低くなります。

自社構築のコンテナ化プラットフォームを構築するには、イメージの構築、リソースのスケジューリング、ネットワーク ポリシー、セキュリティの強化など、Kubernetes と macOS に関する深い基礎知識が必要です。ほとんどのチームにとって、この技術的なしきい値と継続的な運用とメンテナンスの負担は低くありません。

したがって、OpenClaw の高可用性と柔軟なスケーラビリティ機能をすぐに取得したい運用環境の場合、VpsMesh の OpenClaw ホスティング サービスは、多くの場合、より優れたソリューションです。当社では、OpenClaw がプリインストールされた Mac Mini M4 ノード、自動スケーリングおよびクロスゾーンの災害復旧機能を提供しているため、複雑な Operator および HPA 構成を自分で作成する必要がなくなります。最小限の初期コストでエンタープライズ グレードの OpenClaw 導入を実現する方法を知りたいですか?あなたは私たちのを閲覧することができます価格ページまたは直接オンラインで注文する

よくある質問

よくある質問

主な変更点は、構成ファイルを外部化することです。スキル定義は、ローカル ディレクトリから ConfigMap または ConfigMap ボリューム マウントに移動する必要があります。環境変数はハードコードされたパスを置き換えます。さらに、すべてのファイル アクセスは、コンテナー内にパスを直接書き込むのではなく、宣言型ボリュームを通じて行われるようにしてください。詳細な手順については、こちらを参照してください。ヘルプセンターコンテナ化された展開ページ。

macOS 上のコンテナ エコシステムは Linux ほど成熟していないため、特権コンテナ、デバイス プラグイン、およびネットワーク プラグイン (CNI など) のサポートは限られています。 k3s や minikube などの軽量ディストリビューションを使用し、特権のないワークロードまたは特権が制限されたワークロードのみを実行することをお勧めします。高パフォーマンスのニーズについては、コンテナ化する必要があるか、それとも VpsMesh のホストされた OpenClaw ノードを直接使用する必要があるかを評価してください。

カスタム メトリック API を通じてキューを HPA に深く公開するには、Prometheus モニタリング スタックと OpenClaw のメトリック エクスポーターをデプロイする必要があります。次にHPA YAMLで指定しますtype: Podsそして、対応するインジケーター名を引用します。特定のアダプター構成については、Kubernetes の公式ドキュメントの「カスタム インジケーター ソースとしての Prometheus の使用」を参照してください。