Volume

このページでは、Kubernetes の Volume の概要と、Google Kubernetes Engine(GKE)での使用について説明します。

概要

アプリケーションがデータを書き込む場合にはコンテナ内のディスク上のファイルを使用するのが最も簡単ですが、この方法には欠点があります。なんらかの理由でコンテナがクラッシュするか停止すると、ファイルは失われます。また、コンテナ内のファイルは同じ Pod で実行されている他のコンテナにアクセスできません。このような問題は、どちらも Kubernetes Volume の抽象化により解決できます。

概念的には、Volume は Pod 内のすべてのコンテナにアクセス可能なディレクトリになります。Pod 仕様で宣言されたボリューム ソースでは、ディレクトリの作成方法、使用するストレージ メディア、初期状態のディレクトリの内容が決定されます。Pod 仕様では、Pod に含める Volume と、コンテナが Volume をマウントするパスが指定されます。

一時ボリューム タイプは、自身を含む Pod と同じライフサイクルを持つ Volume です。これらの Volume は Pod 作成時に作成され、コンテナを再起動しても保持されます。Pod が終了するか削除されると、Volume も同時に終了されるか削除されます。

他のボリューム タイプは、Pod とは独立して存在する永続ストレージへのインターフェースです。一時ボリュームとは異なり、永続ストレージを利用する Volume 内のデータは、Pod が削除されても保持されます。Volume はマウントが解除されるだけで、データは別の Pod に引き継がれます。永続ストレージ タイプのライフサイクル管理は、直接指定するのではなく PersistentVolume リソースを使用して行います。

ボリューム タイプ

ストレージの実装と初期状態の内容は Volume によって異なるため、用途に合わせて最適なボリューム ソースを選択できます。以降のセクションでは、一般的なボリューム ソースについて説明します。ボリューム タイプの完全なリストは Kubernetes Volumes のドキュメントをご覧ください。

emptyDir

emptyDir Volume は、Pod 内のコンテナが読み取りと書き込みの可能な空のディレクトリを提供します。なんらかの理由で Pod がノードから削除されると、emptyDir のデータは完全に削除されます。emptyDir Volume は、ノードをバックアップするメディア(環境に応じて、ディスク、SSD、ネットワーク ストレージなど)に保存されます。emptyDir Volume は、一時的な領域で使用する場合や Pod 内の複数のコンテナ間でデータを共有する場合に便利です。

すべての emptyDir マウントは、コンテナの書き込み可能なレイヤとログを含むノードのエフェメラル ストレージの一部です。デフォルトでは、GKE Autopilot は、アプリでいくつかのファイルを作成するための空き容量が確保できるように、エフェメラル ストレージを 1 GiB に設定します。必要に応じて、Deployment のエフェメラル ストレージは、次を設定することによって調整できます:

ephemeral-storage のリソース リクエスト

Linux ノードプールでコンテナを使用している場合、emptyDir.medium フィールドを Memory に設定して、Kubernetes に tmpfs(RAM バックアップ ファイル システム)をマウントするよう指示できます。ただし、これは Windows Server コンテナでサポートされていません。

ConfigMap

ConfigMap リソースは、構成データを Pod に挿入する方法です。ConfigMap オブジェクトに格納されたデータは、ConfigMap タイプの Volume で参照され、Pod で実行されているファイルを介して使用されます。ConfigMap Volume 内のファイルは ConfigMap リソースで指定します。

Secret

Secret Volume は、パスワード、OAuth トークン、SSH 認証鍵などのセンシティブ データをアプリケーションで使用できるようにするために使用されます。Secret オブジェクトに格納されたデータは、Secret タイプの Volume で参照され、Pod で実行されているファイルを介して使用されます。

downwardAPI

downwardAPI Volume を使用すると、Downward API のデータをアプリケーションで利用できるようになります。このデータには、アプリケーションが実行されている Pod やコンテナに関する情報が含まれています。たとえば、Pod の Namespace と IP アドレスを含むアプリケーションに DownwardAPIVolumeFile を公開するように Pod を構成できます。追加できるデータの種類の完全なリストについては、Downward API の機能をご覧ください。

persistentVolumeClaim

PersistentVolumeClaim Volume は、クラスタ オペレータがアプリケーションで使用される耐久性のあるストレージをプロビジョニングするために使用できます。Pod が永続ストレージを利用する Volume をマウントする場合には PersistentVolumeClaim を使用します。

次のステップ