24.2. エビクションポリシーの設定
エビクションポリシー により、ノードが利用可能なリソースが少ない状況で実行されている場合に 1 つ以上の Pod が失敗することを許可します。Pod の失敗により、ノードは必要なリソースを回収できます。
エビクションポリシーは、エビクショントリガーシグナル と、ノード設定ファイルまたは コマンドライン で設定される特定の エビクションしきい値 の組み合わせになります。エビクションは、ノードがしきい値を超える Pod に対して即時のアクションを実行する ハード エビクションか、またはノードがアクションを実行する前の猶予期間を許可する ソフト エビクションのどちらかになります。
クラスターのノードを変更するには、ノード設定マップ を必要に応じて更新します。node-config.yaml
ファイルは手動で変更しないようにしてください。
適切に設定されたエビクションポリシーを使用することで、ノードは、プロアクティブにモニターし、コンピュートリソースを完全に使い切る事態を防ぐことができます。
ノードによる Pod の失敗が生じる場合、ノードは Pod のすべてのコンテナーを終了し、PodPhase
は Failed に切り替わります。
ノードは、ディスクの不足状態を検出する際に nodefs
および imagefs
ファイルシステムのパーティションをサポートします。
nodefs
または rootfs
は、ノードがローカルディスクボリューム、デーモンログ、emptyDir、および他のローカルストレージに使用するファイルシステムです。たとえば、rootfs
は、/ を提供するファイルシステムです。rootfs
には、openshift.local.volumes
(デフォルトは /var/lib/origin/openshift.local.volumes) が含まれます。
imagefs
は、コンテナーランタイムがイメージおよび個別のコンテナーの書き込み可能な層を保存するために使用するファイルシステムです。エビクションのしきい値は、imagefs
については 85% になります。imagefs
ファイルシステムはランタイムによって異なり、Docker の場合は、コンテナーが使用するストレージドライバーによって異なります。
Docker の場合:
devicemapper
ストレージドライバーを使用する場合、imagefs
はシンプールになります。Docker デーモンに
--storage-opt dm.basesize
フラグを設定して、コンテナーの読み取り/書き込み層を制限できます。$ sudo dockerd --storage-opt dm.basesize=50G
-
overlay2
ストレージドライバーを使用している場合、imagefs
は /var/lib/docker/overlay2 が含まれるファイルシステムになります。
-
オーバーレイドライバーを使用する CRI-O の場合、
imagefs
は、デフォルトで /var/lib/containers/storage になります。
ローカルストレージの分離 (一時ストレージ) を使用せず、XFS クォータ (volumeConfig) を使用しない場合、Pod でローカルディスクの使用を制限することはできません。
24.2.1. ノード設定を使用したポリシーの作成
エビクションポリシーを設定するには、適切な ノード設定ファイル を編集して、eviction-hard
または eviction-soft
パラメーターの下にエビクションしきい値を指定します。
以下のサンプルは、エビクションしきい値を示しています。
ハードエビクションのノード設定ファイルのサンプル
kubeletArguments: eviction-hard: 1 - memory.available<100Mi 2 - nodefs.available<10% - nodefs.inodesFree<5% - imagefs.available<15% - imagefs.inodesFree<10%
inodesFree
パラメーターのパーセント値を指定する必要があります。他のパラメーターのパーセンテージまたは数値を指定できます。
ソフトエビクションのノード設定ファイルのサンプル
kubeletArguments: eviction-soft: 1 - memory.available<100Mi 2 - nodefs.available<10% - nodefs.inodesFree<5% - imagefs.available<15% - imagefs.inodesFree<10% eviction-soft-grace-period:3 - memory.available=1m30s - nodefs.available=1m30s - nodefs.inodesFree=1m30s - imagefs.available=1m30s - imagefs.inodesFree=1m30s
変更を有効にするために OpenShift Container Platform サービスを再起動します。
# systemctl restart atomic-openshift-node