8.4. コンテナーメモリーとリスク要件を満たすためのクラスターメモリーの設定
クラスター管理者として、アプリケーションのメモリー使用量を管理することで、クラスターの効率的な運用を支援できます。
アプリケーションのメモリーを管理するには、以下のいずれかの操作を実行できます。
- コンテナー化されたアプリケーションコンポーネントのメモリー要件とリスク要件を特定し、それらの要件に合わせてコンテナーのメモリーパラメーターを設定する。
- コンテナー化されたアプリケーションランタイム (たとえば、OpenJDK) が、設定されたコンテナーメモリーパラメーターに最適に準拠するように設定します。
- コンテナー内で実行する際に発生するメモリー関連のエラー状態を診断し、解決します。
8.4.1. アプリケーションメモリーの管理方法を理解する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform がコンピュートリソースをどのように管理しているかを理解し、クラスターを効率的に稼働させる方法を学ぶために、以下の概念を確認してください。
各種のリソース (メモリー、CPU、ストレージ) に応じて、OpenShift Container Platform ではオプションの 要求 および 制限 の値を Pod の各コンテナーに設定できます。
メモリー要求とメモリー制限に関する以下の情報にご注意ください。
メモリー要求
- メモリー要求値は、指定される場合 OpenShift Container Platform スケジューラーに影響を与えます。スケジューラーは、コンテナーのノードへのスケジュール時にメモリー要求を考慮し、コンテナーの使用のために選択されたノードで要求されたメモリーをフェンスオフします。
- ノードのメモリーが使い切られると、OpenShift Container Platform はメモリー使用がメモリー要求を最も超過しているコンテナーの退避を優先します。深刻なメモリー枯渇の場合、ノードの OOM キラーは、同様のメトリクスに基づいてコンテナー内のプロセスを選択して強制終了する可能性があります。
- クラスター管理者は、メモリー要求値に対してクォータを割り当てるか、デフォルト値を割り当てることができます。
- クラスター管理者は、クラスターのオーバーコミットを管理するために開発者が指定するメモリー要求の値をオーバーライドできます。
メモリー制限
- メモリー制限値が指定されている場合、コンテナーのすべてのプロセスに割り当て可能なメモリーにハード制限を指定します。
- コンテナー内のすべてのプロセスによって割り当てられたメモリーがメモリー制限を超えた場合、ノードのメモリー不足 (OOM) キラーは、コンテナー内のプロセスを即座に選択して強制終了します。
- メモリー要求とメモリー制限の両方が指定される場合、メモリー制限の値はメモリー要求の値よりも大きいか、これと等しくなければなりません。
- クラスター管理者は、メモリーの制限値に対してクォータを割り当てるか、デフォルト値を割り当てることができます。
-
最小メモリー制限は 12 MB です。
Cannot allocate memoryPod イベントのためにコンテナーの起動に失敗すると、メモリー制限は低くなります。メモリー制限を引き上げるか、これを削除します。制限を削除すると、Pod は制限のないノードのリソースを消費できるようになります。
OpenShift Container Platform でアプリケーションメモリーをサイジングする手順は以下の通りです。
予想されるコンテナーのメモリー使用の判別
コンテナーのメモリー使用量の平均値とピーク値を算出する。たとえば、負荷テストを個別に実施することもできます。コンテナー内で並行して実行される可能性のあるすべてのプロセス、たとえばメインアプリケーションによって生成される可能性のある補助スクリプトなどを考慮することを忘れないでください。
リスク選好 (risk appetite) の判別
退避のリスク選好を判別します。リスク選好のレベルが低い場合、コンテナーは予想されるピーク時の使用量と安全マージンのパーセンテージに応じてメモリーを要求します。リスク許容度が高い場合は、予想される平均使用量に基づいてメモリーを要求する方が適切かもしれません。
コンテナーのメモリー要求の設定
上記に基づいてコンテナーのメモリー要求を設定してください。要求内容は、アプリケーションのメモリー使用量をできる限り正確に反映するべきである。要求が高すぎる場合には、クラスターおよびクォータの使用が非効率となります。要求が低すぎる場合、アプリケーションの退避の可能性が高まります。
コンテナーのメモリー制限の設定 (必要な場合)
必要に応じて、コンテナーのメモリー制限を設定してください。制限を設定すると、コンテナー内のすべてのプロセスのメモリー使用量の合計が制限を超えた場合に、コンテナープロセスが即座に強制終了される効果があります。制限を設定することで、予期せぬ過剰なメモリー使用量を早期に明らかにすることができます (早期に失敗を検出)。しかし、制限を設定すると、プロセスが突然終了してしまうという問題も生じます。
OpenShift Container Platform のクラスターによっては、制限値を設定する必要がある場合があります。また、制限値に基づいてリクエストを上書きする場合もあります。さらに、一部のアプリケーションイメージは、リクエスト値よりも検出が容易なため、制限値が設定されていることを前提としています。
メモリー制限が設定される場合、これは予想されるピーク時のコンテナーのメモリー使用量と安全マージンのパーセンテージよりも低い値に設定することはできません。
アプリケーションが適切に調整されていることを確認してください。
必要に応じて、アプリケーションが設定された要求値と制限値に合わせて調整されていることを確認してください。この手順は、JVM などのメモリーをプールするアプリケーションにおいてとくに当てはまります。残りの部分では、これを説明します。