> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ノード割り当て予算の設定

> すべてのノード、選択したNode Pool、またはノードのグループ全体でサンドボックスのCPUとメモリリクエストを制限します

ノード割り当て予算は、各ノードの割り当て可能なCPUとメモリのうち、サンドボックスがリクエストできる量を制御します。

このガイドでは、クラスター管理者がすべてのノード、選択したNode Pool、またはノードのグループに対して予算を設定して有効にする方法を説明します。

たとえば、ノードに32の割り当て可能なCPUと128 GiBの割り当て可能なメモリがある場合、50%の予算により、16 CPUと64 GiBの集約サンドボックスリクエストが可能になります。

パーセンテージは、測定された使用率ではなく、リソースリクエストに適用されます。予算が減少しても、既存のサンドボックスは退避されません。

<h2 id="before-you-begin">
  開始前の準備
</h2>

予算を設定する前に、以下の前提条件を満たしてください：

* CoreWeave に、ノード割り当て予算サポートと必要な権限がクラスターで有効になっていることを確認します。
* [必要なマネージドランナー更新を適用する](/ja/products/sandboxes/operations/managed-runners#trigger-an-on-demand-runner-update) し、ランナーが準備完了して接続されるまで待機します。
* [CoreWeave Intelligent CLI](https://github.com/coreweave/cwic) v1.44.0 以降を使用し、正しい組織に認証済みで、サンドボックス管理者権限を持っている必要があります。
* `jq` をインストールします。
* ノードラベルと公開された予算を検査するための Kubernetes アクセスが必要です。予算を減らす前に、影響を受けるノードを cordon/uncordon する権限も必要です。
* デフォルトの Kubernetes スケジューラーを使用するか、スケジューラーが予算の拡張リソースを強制することを確認します。
* サンドボックスが RuntimeClass を選択する場合、クラスター管理者に nonempty `overhead.podFixed` マップを宣言していることを確認します。オーバーヘッドのないランタイムは明示的なゼロ値を宣言する必要があります。RuntimeClass なしのサンドボックスはこの設定を必要としません。

CoreWeave Intelligent CLI v1.44.0 は、このガイドの環境のみのワークフローをサポートします。ランナー更新は、設定を適用するまで予算を有効にしません。

同じ物理 Kubernetes クラスターを共有するすべての論理ランナーは、同じ予算設定とモードを使用する必要があります。別々のクラスターは異なる設定を使用できます。

<h2 id="identify-the-runner-and-node-labels">
  ランナーとノードのラベルを特定する
</h2>

更新するランナーと、予算セレクターで使用するノードのラベルを特定します。

利用可能なランナーを一覧表示します。

```bash theme={"system"}
cwic sandbox runner get
```

オプション: クラスターでフィルタリングします。`[CLUSTER-ID]` を CoreWeave Kubernetes Service (CKS) のクラスター ID に置き換えてください。

```bash theme={"system"}
cwic sandbox runner get --cluster "[CLUSTER-ID]"
```

ランナーと Kubernetes コンテキストを選択します。`[RUNNER-ID]` をランナー ID に、`[KUBE-CONTEXT]` をその Kubernetes コンテキストに置き換えてください。

```bash theme={"system"}
export RUNNER_ID="[RUNNER-ID]"
export KUBE_CONTEXT="[KUBE-CONTEXT]"
```

Node Pool とホスト名のラベルを確認します:

```bash theme={"system"}
kubectl --context "$KUBE_CONTEXT" get nodes \
  -L compute.coreweave.com/node-pool,kubernetes.io/hostname
```

CKS ノードでは、次のラベルを公開できます。

| ラベル | 用途 |
| - | - |
| `compute.coreweave.com/node-pool` | Node Pool 名でノードを選択します |
| `compute.coreweave.com/node-pool-uid` | 特定の Node Pool アイデンティティを選択します |
| `kubernetes.io/hostname` | 個々のノードを選択します |
| カスタムラベル | 任意のノードグループを選択します |

クラスターに存在するラベルのキーと値を使用してください。

予算セレクターが選択するのは Kubernetes ノードです。API ランナーグループを選択したり、サンドボックスの配置制約、taint、トレランス、RuntimeClass を上書きしたりすることはありません。

<h2 id="create-a-budget-configuration">
  予算の設定を作成する
</h2>

以下のいずれかの例を `node-budget.json` ファイルとして保存します。

まず `"mode": "prepare"` から始めます。準備段階では予算リソースがパブリッシュされます。適用は後のステップで有効にします。

<h3 id="95-cpu-and-memory-on-every-node">
  すべてのノードで CPU とメモリを 95%
</h3>

空のセレクターはすべてのノードに一致します。

```json theme={"system"}
{
  "version": 1,
  "mode": "prepare",
  "managedNodes": {
    "selector": {},
    "defaultBudget": {
      "cpuPercent": 95,
      "memoryPercent": 95
    }
  }
}
```

両方の割合は必須で、`0` から `100` までの整数である必要があります。値が `0` の場合、サンドボックスのキャパシティはゼロになります。

<h3 id="50-on-selected-node-pools-only">
  選択した Node Pools のみに 50%
</h3>

これにより、2 つの Node Pools のいずれかのノードが選択されます。`[BATCH-POOL]` と `[INTERACTIVE-POOL]` をそれぞれの Node Pool ラベルの値に置き換えてください：

```json theme={"system"}
{
  "version": 1,
  "mode": "prepare",
  "managedNodes": {
    "selector": {
      "matchExpressions": [
        {
          "key": "compute.coreweave.com/node-pool",
          "operator": "In",
          "values": [
            "[BATCH-POOL]",
            "[INTERACTIVE-POOL]"
          ]
        }
      ]
    },
    "defaultBudget": {
      "cpuPercent": 50,
      "memoryPercent": 50
    }
  }
}
```

`managedNodes.selector` の外にあるノードは、サンドボックス予算をゼロで受け取ります。適用が有効になると、予算トークンを必要とするサンドボックスはそれらのノードを使用できません。

選択内容をプレビュー:

```bash theme={"system"}
kubectl --context "$KUBE_CONTEXT" get nodes \
  -l 'compute.coreweave.com/node-pool in ([BATCH-POOL],[INTERACTIVE-POOL])'
```

他のノード上のサンドボックスのキャパシティを維持するためには、[Node Pool とグループのオーバーライド](#different-budgets-for-node-pools-and-custom-groups) を使用します。

<h3 id="different-budgets-for-node-pools-and-custom-groups">
  Node Pools と独自のグループの異なる予算
</h3>

この設定では、次の予算が提供されます。

* デフォルトで CPU とメモリの 95%。
* `[CPU-POOL]` Node Pool 内のノードに対して CPU とメモリの 50%。
* `[BUDGET-GROUP-LABEL]=[TRAINING-GROUP]` のラベルが付いたノードに対して CPU の 25% とメモリの 40%。

`[CPU-POOL]` を Node Pool のラベル値に置き換えてください。`[BUDGET-GROUP-LABEL]` を独自のラベルキーに、`[TRAINING-GROUP]` をその値に置き換えてください。

```json theme={"system"}
{
  "version": 1,
  "mode": "prepare",
  "managedNodes": {
    "selector": {},
    "defaultBudget": {
      "cpuPercent": 95,
      "memoryPercent": 95
    },
    "overrides": [
      {
        "name": "shared-cpu",
        "selector": {
          "matchLabels": {
            "compute.coreweave.com/node-pool": "[CPU-POOL]"
          }
        },
        "budget": {
          "cpuPercent": 50,
          "memoryPercent": 50
        }
      },
      {
        "name": "training",
        "selector": {
          "matchLabels": {
            "[BUDGET-GROUP-LABEL]": "[TRAINING-GROUP]"
          }
        },
        "budget": {
          "cpuPercent": 25,
          "memoryPercent": 40
        }
      }
    ]
  }
}
```

セレクター have the following 動作:

* A matching オーバーライド replaces the default percentages.
* If 複数のオーバーライド match, the 最小値 percentage in each dimension wins.
* Rule 順序 doesn't establish priority.
* Overlap is reported as `selector_conflict`. Prefer disjoint groups when overlap is unintended.
* エントリ in `matchLabels` and separate 式 must all match.
* Values within one `In` expression are alternatives.

In this example, a ノード matching both オーバーライド receives 25% CPU and 40% メモリ.

For custom groups, configure labels through your Node Pool 設定 where possible so replacement ノード inherit them.

<h3 id="50-on-specific-nodes">
  特定のノードに 50%
</h3>

選択したいノードの観測された `kubernetes.io/hostname` ラベル値に `[HOSTNAME-A]` と `[HOSTNAME-B]` を置き換えてください：

```json theme={"system"}
{
  "version": 1,
  "mode": "prepare",
  "managedNodes": {
    "selector": {
      "matchExpressions": [
        {
          "key": "kubernetes.io/hostname",
          "operator": "In",
          "values": [
            "[HOSTNAME-A]",
            "[HOSTNAME-B]"
          ]
        }
      ]
    },
    "defaultBudget": {
      "cpuPercent": 50,
      "memoryPercent": 50
    }
  }
}
```

ホスト名ラベルの値は、ノードオブジェクトの名と異なる場合があります。

他のノードはサンドボックスの予算をゼロで受け取ります。Node Pool または custom-group セレクターは、置き換えノードが設定を自動的に継承する場合に推奨されます。

<h2 id="apply-the-configuration">
  設定を適用する
</h2>

設定を JavaScript Object Notation (JSON) の `string` として次のフィールドに保存します。

```text theme={"system"}
spec.overrides.env.SANDBOX_NODE_BUDGET_CONFIG
```

適用する設定ファイルを選択します:

```bash theme={"system"}
export BUDGET_FILE=node-budget.json
```

以下のコマンドは、現在のランナーを読み取り、既存のデプロイメントのオーバーライドフィールドと環境変数を保持します。元のランナー設定ファイルやポリシーファイルは必要ありません。別の設定を適用するには、`BUDGET_FILE` を変更したうえで、このブロックを再利用してください：

```bash theme={"system"}
umask 077

# cwic は、ランナーを 1 つだけ取得する場合でも配列を返します。
cwic sandbox runner get "$RUNNER_ID" -o json > current-runner.json

jq --slurpfile budget "$BUDGET_FILE" '
  if length != 1 then
    error("expected one runner")
  else
    .[0]
  end |
  {
    spec: {
      overrides: (
        (.spec.overrides // {}) |
        .env = (
          (.env // {}) + {
            SANDBOX_NODE_BUDGET_CONFIG: ($budget[0] | tojson)
          }
        )
      )
    }
  }
' current-runner.json > node-budget-patch.json

cwic sandbox runner edit "$RUNNER_ID" -f node-budget-patch.json
cwic sandbox runner describe "$RUNNER_ID"
```

同じ物理クラスター内のすべての論理ランナーに対して、このプロセスを繰り返します。パッチを作成する前に、各ランナーを読み取ってください。

`spec.overrides` はオブジェクト全体として置き換えられるため、その兄弟フィールドを保持する必要があります。

CoreWeave Intelligent CLI v1.44.0 では、この環境変数のみのパッチを使用してください。このリリースの古いポリシースキーマでは、新しいサーバーからリネームされた HTTPS ホスト名フィールドを完全にエクスポートできません。そのため、ランナーのドキュメント全体を再適用すると、ポリシーが不完全なデータで置き換えられる可能性があります。上記のパッチには、ポリシーは含まれず、更新もされません。

ランナーのエクスポートは非公開にし、作業後は一時ファイルを削除してください。

```bash theme={"system"}
rm current-runner.json node-budget-patch.json
```

<h2 id="verify-preparation">
  検証の準備
</h2>

準備により、ノードのステータスにこれらの拡張リソースがパブリッシュされます:

```text theme={"system"}
sandbox.coreweave.com/cpu-millicores
sandbox.coreweave.com/memory-bytes
```

それらのキャパシティと割り当て可能値を確認します：

```bash theme={"system"}
kubectl --context "$KUBE_CONTEXT" get nodes -o json | jq '
  .items[] | {
    node: .metadata.name,
    cordoned: (.spec.unschedulable // false),
    physical: {
      cpu: .status.allocatable.cpu,
      memory: .status.allocatable.memory
    },
    budgetCapacity: {
      cpuMillicores:
        .status.capacity["sandbox.coreweave.com/cpu-millicores"],
      memoryBytes:
        .status.capacity["sandbox.coreweave.com/memory-bytes"]
    },
    budgetAllocatable: {
      cpuMillicores:
        .status.allocatable["sandbox.coreweave.com/cpu-millicores"],
      memoryBytes:
        .status.allocatable["sandbox.coreweave.com/memory-bytes"]
    }
  }'
```

キャパシティと割り当て可能値がすべてのノードの予算リソースの両方で一致するまで待機します。

予算アカウンティングには以下の詳細が含まれます：

* 予算トークンのない既存のバインド済みサンドボックスは、終了するまでパブリッシュされた予算から差し引かれます。
* その他のワークロードは物理リソースを消費するため、利用可能なサンドボックスキャパシティは設定された予算より低くなる場合があります。
* サンドボックスの料金には、ヘルパーコンテナー、init-containerのピーク、RuntimeClassのオーバーヘッドが含まれます。
* CPUとメモリの割合はGPUキャパシティを分割しません。

メトリクスが利用可能な場合は、以下のメトリクスを確認してください：

```text theme={"system"}
sandbox_runner_node_budget_ready
sandbox_runner_node_budget_writer
sandbox_runner_node_budget_nodes{state="converged"}
sandbox_runner_node_budget_policy
```

`sandbox_runner_node_budget_policy` メトリクスは `mode` と `policy_hash` ラベルを公開します。クラスター内のすべてのランナーが `mode="prepare"` および同じ `policy_hash` 値を report していることを確認してください。これらのメトリクスにアクセスできない場合は、適用を有効にする前に CoreWeave に準備完了を検証するよう依頼してください。

<h2 id="enable-enforcement">
  適用を有効にする
</h2>

準備が正常な状態になったら、モードのみを変更します。

```bash theme={"system"}
jq '.mode = "enforce"' node-budget.json > node-budget-enforce.json
export BUDGET_FILE=node-budget-enforce.json
```

[設定を適用する](#apply-the-configuration)の読み取り、パッチの作成、適用の各コマンドを、クラスター内のすべてのランナーに対して繰り返し実行します。

`cwic sandbox runner describe "$RUNNER_ID"` を使用してランナーのロールアウトを確認し、クラスターの受け入れの遷移が完了したことを CoreWeave に確認してもらいます。この遷移によって、クラスターが予算の適用を開始するタイミングが調整されます。遷移には、古いシャードの廃止や、適用前から保留中だったワークロードのバインドまたは終了も含まれます。

適用を検証するには、次の手順を実行します。

1. 各ランナー上に小規模なサンドボックスを作成します。
2. その Pod が両方の予算リソースをリクエストしていることを確認します。
3. 制御された飽和テストを実施する場合は、CPU またはメモリのいずれかの予算を使い切った時点で新しい割り当てが停止することを検証します。
4. テスト用のサンドボックスを削除します。

次のキャパシティ枯渇の理由が表示されるのは想定どおりの動作です。

```text theme={"system"}
CWSANDBOX_RUNNER_CAPACITY_EXHAUSTED
```

<h2 id="configure-terraform-managed-runners">
  Terraform 管理のランナーを設定する
</h2>

Terraform がランナーを管理している場合は、次の `spec.overrides.env` 設定を既存の `coreweave_sandbox_managed_runner` リソースにマージしてください:

```hcl theme={"system"}
spec = {
  overrides = {
    env = {
      # 他の設定された環境変数を保持します。
      SANDBOX_NODE_BUDGET_CONFIG = file("${path.module}/node-budget.json")
    }

    # 他の設定されたオーバーライドフィールドを保持します。
  }

  # 他の設定された spec フィールドを保持します。
}
```

準備が健全になったら、JSON ファイルを `prepare` から `enforce` に更新し、対応する Terraform の変更を適用します。

Terraform がランナーを管理している場合、変更を Terraform に保持して、後続の apply が意図した設定を維持するようにします。

<h2 id="reduce-budgets-or-change-node-membership">
  予算を削減する、またはノードのメンバーシップを変更する
</h2>

ノードが自動的に cordon またはドレインされることはありません。

キャパシティが減少するような形でパーセンテージを下げたり、セレクターやラベルを変更したりする場合は、事前に次の手順を実行してください。

1. 影響を受けるノードを cordon します。
2. 更新した設定を、そのクラスター内のすべてのランナーに適用します。
3. 予算が収束するまで待ちます。
4. この変更のために cordon したノードのみを uncordon します。

cordon を実行すると新たなスケジューリングは行われなくなりますが、既存の Pod は引き続き実行されます。既存の割り当ては、終了するまで新しい上限を超えた状態のままになることがあります。予算を削減しても、それらが退避されることはありません。

cordon せずに削減を行った場合は、次のメッセージがログに記録されます。

```text theme={"system"}
decrease_without_cordon
```

予算を完全に無効にするには、廃止手順について CoreWeave と調整してください。環境変数を削除したり、機能ゲートを直接無効にしたりしても、必要なロールバック手順は実行されません。

<h2 id="see-also">
  関連項目
</h2>

詳細については、以下のページを参照してください。

* [ランナーのデプロイと管理](/ja/products/sandboxes/operations/managed-runners)。
* [サンドボックスポリシーを設定する](/ja/products/sandboxes/profiles/configure)。
