このページでは、Kubernetes の Volume の概要と、Google Kubernetes Engine(GKE)での使用について説明します。
概要
アプリケーションがデータを書き込む場合にはコンテナ内のディスク上のファイルを使用するのが最も簡単ですが、この方法には欠点があります。なんらかの理由でコンテナがクラッシュするか停止すると、ファイルは失われます。また、コンテナ内のファイルは同じ Pod で実行されている他のコンテナにアクセスできません。このような問題は、どちらも Kubernetes Volume の抽象化により解決できます。
概念的には、Volume は Pod 内のすべてのコンテナにアクセス可能なディレクトリになります。Pod 仕様で宣言された Volume ソースにより、ディレクトリの作成方法、使用するストレージ メディア、初期状態のディレクトリの内容が決まります。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 に設定します。必要に応じて、ephemeral-storage
のリソース リクエストを設定することで、Deployment のエフェメラル ストレージを調整できます。
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
を使用します。
次のステップ
- Pod で Volume を参照する方法を学習する。
- PersistentVolumes、PersistentVolumeClaims、ストレージの動的プロビジョニングについて学習する。
- Pod のストレージとして Volume を使用するように構成する。
- Volume に ConfigMap データを追加する。