第20章 ガベージコレクション
20.1. 概要
OpenShift Container Platform ノードは、2 種類のガベージコレクションを実行します。
- コンテナーのガべージコレクション: 終了したコンテナーを削除します。
- イメージのガべージコレクション: 実行中の Pod によって参照されていないイメージを削除します。
20.2. コンテナーのガベージコレクション
コンテナーのガベージコレクションはデフォルトで有効にされ、エビクションのしきい値に達すると自動的に実行されます。ノードは Pod のコンテナーを API からアクセス可能な状態にしようとします。Pod が削除された場合、コンテナーも削除されます。コンテナーは Pod が削除されておらず、エビクションのしきい値に達していない限り保持されます。ノードがディスク不足 (disk pressure) の状態にある場合、コンテナーが削除され、それらのログは oc logs でアクセスできなくなります。
コンテナーのガベージコレクションのポリシーは 3 つのノード設定に基づいています。
| 設定 | 説明 |
|---|---|
|
|
コンテナーがガベージコレクションの対象となるのに必要な最小の年数です。デフォルトは 0 です。制限なしにするには 0 を使用します。この設定の値は、時間の h、分の m、秒の s などの単位のサフィックスを使用して指定することができます。 |
|
|
Pod コンテナーごとに保持するインスタンス数です。デフォルトは 1 です。 |
|
|
ノードにある実行されないコンテナーの合計の最大数です。デフォルトは、無制限を意味する -1 です。 |
競合が生じる場合、maximum-dead-containers 設定は maximum-dead-containers-per-container 設定よりも優先されます。たとえば、maximum-dead-containers-per-container の数を保持することでコンテナーの合計数が maximum-dead-containers より大きくなる場合、最も古いコンテナーが削除され、maximum-dead-containers の制限が満たされるようにします。
ノードが実行されていないコンテナーを削除すると、それらのコンテナーの内部にあるすべてのファイルも削除されます。そのノードで作成されたコンテナーに対してのみガベージコレクションが実行されます。
ノードホストにある /etc/origin/node/node-config.yaml ファイルの kubeletArguments セクションでこれらの設定の値を指定します。このセクションがすでに存在しない場合には、これを追加します。
コンテナーのガベージコレクション設定
kubeletArguments:
minimum-container-ttl-duration:
- "10s"
maximum-dead-containers-per-container:
- "2"
maximum-dead-containers:
- "240"
20.2.1. 削除するコンテナーの検出
ガべージコレクターの各ループでは、以下の手順が実行されます。
- 利用可能なコンテナーの一覧を取得します。
-
実行中であるか、または
minimum-container-ttl-durationパラメーターよりも長く存続していないすべてのコンテナーをフィルターに掛けます。 - 残りのすべてのコンテナーを、Pod およびイメージ名のメンバーシップに基づいて同等のクラスに分類します。
- 特定されないコンテナー (kubelet で管理されているコンテナーであるが、それらの名前の形式が正しくないコンテナー) をすべて削除します。
-
maximum-dead-containers-per-containerパラメーターよりも多くのコンテナーが含まれるそれぞれのクラスについて、そのクラスのコンテナーを作成時間で並び替えます。 -
maximum-dead-containers-per-containerパラメーターの条件が満たされるまで、コンテナーを最も古いものから順に削除し始めます。 -
依然として
maximum-dead-containersパラメーターよりも多くのコンテナーが一覧にある場合、コレクターは各クラスのコンテナーの削除を開始し、それぞれのクラスにあるコンテナー数がクラスあたりのコンテナーの平均数、または<all_remaining_containers>/<number_of_classes>よりも大きくならないようにします。 -
これでも十分でない場合は、一覧にあるすべてのコンテナーを並び替えて、
maximum-dead-containersの条件を満たすまで、コンテナーを古いものから順番に削除し始めます。
各種のニーズに合わせてデフォルト設定を更新してください。
ガべージコレクションは、関連付けられている Pod のないコンテナーのみを削除します。
20.3. イメージのガベージコレクション
イメージのガべージコレクションでは、ノードの cAdvisor によって報告されるディスク使用量に基づいて、ノードから削除するイメージを決定します。この場合、以下の設定が考慮に入れられます。
| 設定 | 説明 |
|---|---|
|
|
イメージのガべージコレクションをトリガーするディスク使用量のパーセント (整数で表される) です。デフォルトは 85 です。 |
|
|
イメージのガべージコレクションが解放しようとするディスク使用量のパーセント (整数で表される) です。デフォルトは 80 です。 |
ノードホストにある /etc/origin/node/node-config.yaml ファイルの kubeletArguments セクションでこれらの設定の値を指定します。このセクションがすでに存在しない場合には、これを追加します。
イメージのガベージコレクション設定
kubeletArguments:
image-gc-high-threshold:
- "85"
image-gc-low-threshold:
- "80"
20.3.1. 削除するイメージの検出
以下の 2 つのイメージ一覧がそれぞれのガベージコレクターの実行で取得されます。
- 1 つ以上の Pod で現在実行されているイメージの一覧
- ホストで利用可能なイメージの一覧
新規コンテナーの実行時に新規のイメージが表示されます。すべてのイメージにはタイムスタンプのマークが付けられます。イメージが実行中 (上記の最初の一覧) か、または新規に検出されている (上記の 2 番目の一覧) 場合、これには現在の時間のマークが付けられます。残りのイメージには以前のタイムスタンプのマークがすでに付けられています。すべてのイメージはタイムスタンプで並び替えられます。
コレクションが開始されると、停止条件を満たすまでイメージが最も古いものから順番に削除されます。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.