第42章 アプリケーションの一時ストレージのサイジング

42.1. 概要

注記

このセクションは、一時ストレージのテクノロジープレビューを有効にした場合にのみ適用されます。この機能は、デフォルトでは無効になっています。この機能を有効にするには、「configuring for ephemeral storage」を参照してください。

注記

テクノロジープレビューリリースは、Red Hat 製品のサービスレベルアグリーメント (SLA) ではサポートされておらず、機能的に完全でない可能性があり、Red Hat では実稼働環境での使用を推奨しません。テクノロジープレビュー機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様に機能性をテストしていただき、開発プロセス中にフィードバックをお寄せいただくことを目的としています。Red Hat テクノロジープレビュー機能のサポート対象範囲に関する詳しい情報は、「テクノロジプレビュー機能のサポート範囲」を参照してください。

以下の目的で一時ストレージを使用できます。

  • コンテナー化されたアプリケーションコンポーネントの一時ストレージおよびリスク要件を判別し、それらの要件を満たすようコンテナーの一時ストレージパラメーターを設定する。
  • コンテナー化されたアプリケーションランタイム (OpenJDK など) を、設定されたコンテナーの一時ストレージパラメーターに基づいて実行されるよう設定する。
  • コンテナーでの実行に関連する一時ストレージ関連のエラー状態を診断し、これを解決する。

42.2. 背景情報

注記

一時ストレージを使用する前に、OpenShift Container Platform がコンピュートリソースを使用する方法を確認してください。

アプリケーションの一時ストレージのサイジングについては、以下が主要なポイントになります。

  • それぞれの種類のリソース (メモリー、CPU、ストレージ、一時ストレージ) については、OpenShift Container Platform ではオプションの 要求 および 制限 の値を Pod の各コンテナーに設定できます。

    一時ストレージの要求
  • 一時ストレージの要求値を指定する場合には、OpenShift Container Platform スケジューラーがその影響を受けます。スケジューラーはコンテナーのノードへのスケジュール時に一時ストレージ要求を考慮し、選択されたノード上で要求された一時ストレージをフェンスオフして、コンテナーで使用できるようにします。

    一時ストレージの制限
  • 一時ストレージの制限値を指定する場合には、コンテナーの全プロセスで割り当て可能な一時ストレージにハード制限を指定します。
  • 一時ストレージ要求と制限の両方を指定する場合には、一時ストレージの制限値は一時ストレージの要求値以上の値に指定する必要があります。

    管理
  • クラスター管理者は、一時ストレージの要求値、制限値、これらの両方に対してクォータを割り当てるか、いずれにも割り当てないようにすることができます。
  • クラスター管理者は、一時ストレージの要求値、制限値またはこれらの両方についてデフォルト値を割り当てることも、それらのいずれにもデフォルト値を割り当てないようにすることもできます。
  • クラスター管理者は、クラスターのオーバーコミットを管理するために、開発者が指定する一時ストレージの要求値を上書きできます。これは OpenShift Online などで行われます。

42.3. ストラテジー

OpenShift Container Platform でアプリケーションの一時ストレージをサイジングするには、以下を行います。

  1. コンテナーの一時ストレージで必要と予測される使用量を判断します。

    管理者が一時ストレージのテクノロジープレビュー機能を有効にしている場合には、必要時に予想される平均およびピーク時のコンテナーのメモリー使用を判別します (例: 別の負荷テストを実行)。コンテナーで並行して実行されている可能性のあるすべてのプロセスを必ず考慮に入れるようにしてください。たとえば、メインのアプリケーションが作業ファイルやロギングに一時ストレージを必要とする可能性のある付属スクリプトを生成するかどうかを確認します。

  2. エビクションのリスクを評価します。

    エビクションのリスク選好を判別します。リスク選好のレベルが低い場合、コンテナーは予想されるピーク時の使用量と安全マージンの割合に応じて一時ストレージを要求します。リスク選好が高くなる場合には、予想される平均の使用量に応じて一時ストレージを要求することがより適切な場合があります。

  3. コンテナーの一時ストレージ要求を設定します。

    リスク評価に基づいてコンテナーの一時ストレージ要求を設定します。要求がアプリケーションの一時ストレージの使用状況がより正確に表現されと、より良い結果が得られます。要求が高すぎる場合には、クラスターのクォータの使用が非効率になり、要求が低すぎる場合には、アプリケーションのエビクションの可能性が高くなります。

  4. 必要に応じて、コンテナーの一時ストレージの制限を設定します。

    必要に応じて、コンテナーの一時ストレージ制限を設定します。制限を設定すると、コンテナーの全プロセスで使用される一時ストレージ使用量の合計が制限を超えると、コンテナーのプロセスが即時に停止するという影響があります。たとえば、コンテナーでは、一時ストレージの予期しない使用量の超過が早期に生じる可能性があり (フェイルファースト) 、またはコンテナーがプロセスを突然中止する可能性があります。

    注記

    一部の OpenShift Container Platform クラスターでは制限値を設定する必要があります。制限に基づいて要求を上書きする場合があります。また、一部のアプリケーションイメージは、要求値よりも検出が簡単なことから設定される制限値を使用します。

    これらの制限が設定されている場合には、ピーク時に予想されるコンテナーリソースの使用量に、安全マージンの割合を加えた数値よりも少なく設定しないようにしてください。

  5. アプリケーションを調整します。

    適切な場合は、設定した要求および制限値に関連してアプリケーションが調整されていることを確認します。この手順は、一時ストレージをプールするアプリケーションにおいてとくに当てはまります。

42.4. エビクトされた Pod の診断

OpenShift Container Platform は、ノードの一時ストレージが使い切られると、ノードから Pod をエビクトする場合があります。一時ストレージの消費の度合いによって、エビクションが正常に行われる場合もあれば、行われない場合もあります。正常なエビクションでは、各コンテナーのメインプロセス、PID 1 は SIGTERM シグナルを受信し、少し時間が経ってからプロセスがまだ実行されている場合には SIGKILL シグナルを受信します。正常でないエビクションでは、各コンポーネントのメインプロセスが SIGKILL シグナルを即時に受信します。

すべての Pod の一覧を取得してステータスを確認するには、以下を実行します。

$ oc get pod test
NAME      READY     STATUS    RESTARTS   AGE
test      0/1       Evicted   0          1m

$ oc get pod test -o yaml
...
status:
  message: 'Pod The node was low on resource: [DiskPressure].'
  phase: Failed
  reason: Evicted

エビクトされた Pod のフェーズは Failed になり、理由 は Evicted になります。この場合には、restartPolicy の値に関係なく再起動されません。ただし、 ReplicationController などのコントローラーは Pod の失敗したステータスを認識し、古い Pod を置き換える新しい Pod を作成します。