24.8. シナリオ例
Operator:
- メモリー容量が 10Gi のノードがある。
- システムデーモン (カーネル、ノード、他のデーモンなど) のメモリー容量の 10% を予約する必要がある。
- システムの OOM の悪化または発生の可能性を軽減するため、メモリー使用率が 95% の時点で Pod をエビクトする必要がある。
この設定から、system-reserved
にはエビクションのしきい値でカバーされるメモリー量が含まれていることを読み取ることができます。
この容量に達するのは、一部の Pod による使用がその要求を超えるか、またはシステムによる使用が 1Gi を超える場合のいずれかになります。
ノードに 10 Gi の容量があり、システムデーモン (system-reserved
が設定されている) に 10% の容量を予約する必要がある場合、以下の計算を実行します。
capacity = 10 Gi system-reserved = 10 Gi * .1 = 1 Gi
割り当て可能なリソースの量は以下のようになります。
allocatable = capacity - system-reserved = 9 Gi
これは、デフォルトでスケジューラーはノードに対し、9 Gi のメモリーを要求する Pod をスケジュールすることを意味します。
使用可能なメモリーが 30 秒間で容量の 10% を下回ることをノードが検出する際や、容量の 5% を下回る際にすぐにエビクションがトリガーされるようにエビクションを有効にする必要がある場合は、スケジューラーで 8Gi が割り当て可能であることを確認する必要があります。そのため、システム予約ではエビクションしきい値の大きい方の値がカバーされている必要があります。
capacity = 10 Gi eviction-threshold = 10 Gi * .1 = 1 Gi system-reserved = (10Gi * .1) + eviction-threshold = 2 Gi allocatable = capacity - system-reserved = 8 Gi
以下を適切な ノード設定マップ に追加します。
kubeletArguments: system-reserved: - "memory=2Gi" eviction-hard: - "memory.available<.5Gi" eviction-soft: - "memory.available<1Gi" eviction-soft-grace-period: - "memory.available=30s"
この設定により、スケジューラーは Pod をノードに配置せず、メモリー不足をすぐに発生させ、エビクションをトリガーさせます。この設定は、これらの Pod が設定された要求よりも少ない量を使用することを前提としています。