このページでは、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 に関するドキュメントの割り当て可能リソースをご覧ください。