すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ノードリソース予約ポリシー

最終更新日:Mar 08, 2026

Alibaba Cloud Container Service for Kubernetes (ACK) では、各ノードのリソースの一部を Kubernetes コンポーネントおよびシステムプロセス用に予約します。これにより、オペレーティングシステムカーネル、システムサービス、Kubernetes デーモンプロセスが安定して動作します。その結果、ノードの合計容量とその割り当て可能リソースは異なります。ACK ではデフォルトのリソース予約ポリシーが適用されます。また、kubelet の構成を設定することで、リソース予約をカスタマイズすることもできます。

使用制限

カスタムノードのリソース予約は、Kubernetes バージョン 1.20 以降を実行しているクラスターでのみサポートされています。クラスターをアップグレードするには、「手動でクラスターをアップグレードする」をご参照ください。

影響範囲

カスタムリソース予約およびその影響範囲

リソース予約値を変更するには、「ノードプール向け kubelet の構成設定」をご参照ください。構成を更新すると、既存のノードプール内のノードに即座に反映されます。スケーリング操作時に追加されるノードや、既存のインスタンスの追加 機能を使用して追加されるノードについても、更新後の構成が適用されます。

重要
  • コマンドラインで kubelet 構成ファイルを手動編集しないでください。 これにより、構成の競合やノードプールの運用・保守(O&M)中に予期せぬ動作が発生する可能性があります。

  • リソース予約量を増加させると、割り当て可能リソースが減少します。リソース使用率が高いノードでは、Pod のエビクションが発生する可能性があるため、値の設定には十分ご注意ください。

デフォルトリソース予約の影響範囲

ACK では、デフォルトのリソース予約値が随時更新される場合があります。更新後は、クラスターのスペックアップ、ノードプールのスペックアップ、またはノードプール向けカスタム kubelet パラメーターの変更など、ノードレベルの構成変更を行った際に、新しい予約値が自動的にノードに適用されます。このような O&M 操作を行わない場合、既存のノードプール内のノードは安定性を維持するため、従来の予約値を保持します。

ノードの割り当て可能リソースの表示

以下のコマンドを実行して、ノードの合計容量および割り当て可能リソースを表示します。

kubectl describe node [NODE_NAME] | grep Allocatable -B 7 -A 6

期待される出力例:

Capacity:
  cpu:                4                 # ノード上の合計 CPU コア数。
  ephemeral-storage:  123722704Ki       # ノード上の合計一時ストレージ量(KiB 単位)。
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             7925980Ki         # ノード上の合計メモリ量(KiB 単位)。
  pods:               64
Allocatable:
  cpu:                3900m             # 割り当て可能な CPU コア数。
  ephemeral-storage:  114022843818      # 割り当て可能な一時ストレージ量(バイト単位)。
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             5824732Ki         # 割り当て可能なメモリ量(KiB 単位)。
  pods:               64

ノードの割り当て可能リソースの算出

割り当て可能リソースは、以下の数式で算出します。割り当て可能 = 容量 − 予約済み − エビクションしきい値

数式の詳細:

リソース予約ポリシーの詳細

予約済みリソースは、以下の複数の要因に依存します:

  • 仕様の高い ECS インスタンスでは通常、より多くの Pod を実行します。パフォーマンスを維持するため、ACK ではこうしたノード上で Kubernetes コンポーネント用に、より多くのリソースを予約します。

  • Windows ノードでは、Windows オペレーティングシステムおよび Windows Server コンポーネントに追加のリソースが必要となるため、Linux ノードよりも多くのリソースを予約します。詳細については、「Windows ノードプールの作成と管理」をご参照ください。

ACK では、CPU およびメモリの範囲に基づいて予約済みリソースを算出します。予約総量は、すべての範囲における予約量の合計です。Kubernetes 1.28 では、ACK が予約アルゴリズムを最適化し、CPU およびメモリの予約量を削減しました。クラスターのスペックアップを推奨します。「クラスターの手動スペックアップ」をご参照ください。

予約済みリソースには、Kubernetes コンポーネント用リソース(kubeReserved)およびシステムプロセス用リソース(systemReserved)が含まれます。それぞれが予約総量の 50 % を占めます。たとえば、4 コアのノードの場合:Kubernetes 1.28 以降のクラスターでは、ACK が合計 80 ミリコアを予約し、うち 40 ミリコアを kubeReserved、40 ミリコアを systemReserved として予約します。Kubernetes 1.20 ~ 1.27 のクラスターでは、ACK が合計 100 ミリコアを予約し、うち 50 ミリコアを kubeReserved、50 ミリコアを systemReserved として予約します。

CPU リソース予約ポリシー

Kubernetes 1.28 以降

以下の図は、コンピュートノードにおける合計 CPU 予約量を示しています。

image

32 コアのノードにおける合計 CPU 予約量の算出方法は以下のとおりです。

1000 × 6% + 1000 × 1% + 1000 × 2 × 0.5% + (32000 − 4000) × 0.25% = 150 ミリコア

Kubernetes 1.20 ~ 1.27

以下の図は、コンピュートノードにおける合計 CPU 予約量を示しています。

image

32 コアのノードにおける合計 CPU 予約量の算出方法は以下のとおりです。

100 + (32000 − 4000) × 2.5% = 800 ミリコア

メモリリソース予約ポリシー

Kubernetes 1.28 以降

以下の数式で合計メモリ予約量を算出します。

合計メモリ予約量 = min(11 × ($max_num_pods) + 255, 25% × ノードメモリ)。最終的な値は、11 × ($max_num_pods) + 255ノードメモリの 25 % のうち、小さい方の値となります。

  • $max_num_pods:ノードでサポートされる最大 Pod 数。

    説明

    ネットワークプラグインによって、ノードあたりの最大 Pod 数は異なります。詳細および算出方法については、「ノードあたりの最大 Pod 数」をご参照ください。

    Container Service 管理コンソールにログインし、ノード ページで最大 Pod 数を確認できます。
    • Terway: ノードあたりの最大 Pod 数 = コンテナネットワーク Pod の最大数 + ホストネットワーク Pod 数

    • Flannel:クラスター作成時にユーザーが設定します。

  • ノードメモリ:実際に使用可能なメモリ量(MiB 単位)。

たとえば、Terway を使用し、共有 ENI および複数の IP アドレスを有効化したクラスターにおいて、ノードがメモリ 256 GiB の ecs.g7.16xlarge インスタンスである場合、最大 Pod 数は (8 − 1) × 30 + 3 = 213 となります。合計メモリ予約量は min(11 × (210 + 3) + 255, 256 × 1024 × 25%) = 2598 MiB です。

Kubernetes 1.20 ~ 1.27

以下の図は、コンピュートノードにおける合計予約メモリ量を示しています。

image

メモリ 256 GiB のノードにおける合計メモリ予約量の算出方法は以下のとおりです。

4 × 25% + (8 − 4) × 20% + (16 − 8) × 10% + (128 − 16) × 6% + (256 − 128) × 2% = 11.88 GiB

ACK ノードにおけるデフォルトのリソース予約の例

説明

ECS インスタンスタイプの詳細については、「インスタンスファミリー」をご参照ください。

ノードの合計リソース

予約済みリソース(Kubernetes 1.28 以降)

予約済みリソース(Kubernetes 1.20 ~ 1.27)

サンプルインスタンスタイプ

CPU(コア数)

メモリ

(GiB)

ノードあたりの最大 Pod 数

(Terway の包括的な ENI モードを例とする)

CPU

(ミリコア)

メモリ

(MiB)

CPU(ミリコア)

メモリ(MiB)

ECS c7 インスタンスタイプ

2

4

15

70

420

100

1024

4

8

48

80

783

100

1843

8

16

48

90

783

200

2662

16

32

213

110

2598

400

3645

32

64

213

150

2598

800

5611

64

128

213

230

2598

1600

9543

128

256

423

390

4908

2400

12164

ECS ebmc7a インスタンスタイプ

256

512

453

710

5238

3040

17407

よくある質問

ノードの合計 CPU およびメモリを確認するにはどうすればよいですか?

CPU

以下のコマンドを実行して、合計 CPU コア数を表示します。

cat /proc/cpuinfo | grep processor

期待される出力例:

processor       : 0
processor       : 1
processor       : 2
processor       : 3

メモリ

以下のコマンドを実行して、合計メモリ量を表示します。

cat /proc/meminfo | grep MemTotal

期待される出力例:

MemTotal:        7660952 kB

インスタンスタイプの仕様に記載されているメモリ量よりも、利用可能なメモリ量が少ないのはなぜですか?

インスタンスタイプの仕様に記載されたメモリ量には、オペレーティングシステムが使用するメモリも含まれています。そのため、リアルタイムで利用可能なメモリ量は常に仕様値より少なくなります。詳細については、「インスタンス購入後に、表示されるメモリ量がインスタンスタイプの仕様と異なるのはなぜですか?」をご参照ください。

参考文献

  • カスタムリソース予約およびエビクションしきい値の構成設定方法、および関連するベストプラクティスについては、「ノードプール向け kubelet の構成設定」をご参照ください。

  • アプリケーションポッドのリソース要求値は、割り当て可能リソースに基づいて設定できます。ノード上のすべてのアプリケーションポッドの要求値の合計は、当該ノードの割り当て可能リソースを超えてはなりません。これを超えると、リソース不足によりポッドのスケジュールに失敗します。ACK では、ネイティブ Kubernetes ワークロード向けに リソースプロファイリング 機能を提供しています。この機能では、過去のリソース使用量を分析し、正確なポッド要求値の設定を支援します。手順については、「Deployment の作成」をご参照ください。