ワークロードで使用できるリソース

このページでは、Google Distributed Cloud でワークロードを実行するためにノードが必要とする CPU とメモリの量を判断する方法について説明します。

予約済みのリソース

各クラスタノードで、Google Distributed Cloud は、オペレーティング システム コンポーネントと Kubernetes のコア コンポーネント用に次のリソースを予約します。

  • 80 ミリ秒コア + CPU 容量の 1%
  • 330 MiB + メモリ容量の 5%

たとえば、ノードがデフォルトで 4 個の CPU コアと、8 GiB のメモリを持っているとします。ここで、Google Distributed Cloud は次を予約します。

  • 80 ミリ秒コア + 4 コアの 1% = 120 ミリコア
  • 330 MiB + 8 GiB の 5% = 730 MiB

オペレーティング システムと Kubernetes のコア コンポーネントは Pod として実行されません。通常のプロセスとして実行されます。これらの予約済みリソース以外に残っているリソースは、Pod で使用できます。

エビクションのしきい値

Pod で使用できるメモリの量を確認するには、エビクションのしきい値も考慮する必要があります。Google Distributed Cloud では、エビクションしきい値を 100 MiB に設定します。つまり、ノード上の使用可能なメモリが 100 MiB を下回ると、kubelet は 1 つ以上の Pod を削除します。

割り当て可能なリソース

Pod で使用可能なノード上のリソースは、割り当て可能なリソースと呼ばれます。割り当て可能なリソースを次のように計算します。

  • Allocatable CPU = CPU Capacity - Reserved CPU
  • Allocatable Memory = Memory Capacity - Reserved Memory - Eviction Threshold

たとえば、ノードのメモリ容量が 8 GiB、予約済みのメモリが 680 MiB、エビクションのしきい値が 100 MiB であるとします。割り当て可能なメモリは次のとおりです。

8 GiB - 680 MiB - 100 MiB = 7220 MiB

ワークロードで使用できるリソース

ノードの割り当て可能なリソースは、Pod で使用できるリソースです。これには、ワークロードを実行する Pod と、Google Distributed Cloud アドオンを実行する Pod があります。アドオンには、Ingress コントローラ、Ingress サービス、Connect エージェント、ネットワーキング コンポーネント、ロギング コンポーネントなどがあります。

特定のノードで、ワークロードで使用可能なリソースを判断するには、割り当て可能なリソースで開始し、その後、アドオンで使用するリソースを減算します。

問題になるのは、Google Distributed Cloud クラスタのノード間でアドオンが均等に分散されないことです。1 つのノードに 3 つのアドオンがあり、もう 1 つのノードに 10 個のアドオンがある場合があります。また、アドオンによって必要な CPU とメモリの量も異なります。

通常のルールとしては、ノードで実行されるアドオンには次を必要とします。

  • 200 ミリコアの CPU
  • 100 MiB のメモリ

ノードでワークロードに使用できるリソースは次のように計算できます。

  • Allocatable CPU - 200 millicores
  • Allocatable memory - 100 MiB

一部のノードでは、アドオンに上記の一般的なルールよりも多くの量が必要になります。たとえば、1 つのノードで 2 GiB のメモリが必要な Prometheus アドオンを実行できます。ただし、クラスタに複数のノードがある場合、ほとんどのノードに一般的なルールが当てはまると考えるのは理に適っています。

次のステップ

割り当て可能なリソースのコンセプトの詳細は、Google Cloud の GKE に関するドキュメントの割り当て可能リソースをご覧ください。