Red Hat Training
A Red Hat training course is available for OpenShift Container Platform
第27章 ボリュームの管理
27.1. 概要
コンテナーはデフォルトで永続性がある訳ではありません。再起動時にそれらのコンテンツはクリアされます。ボリュームとは Pod およびコンテナーで利用可能なマウントされたファイルシステムのことであり、これらは数多くのホストのローカルまたはネットワーク割り当てストレージのエンドポイントでサポートされる場合があります。
ボリュームのファイルシステムにエラーが含まれないようにし、かつエラーが存在する場合はそれを修復するために、OpenShift Container Platform は mount
ユーティリティーの前に fsck
ユーティリティーを起動します。これはボリュームを追加するか、または既存ボリュームを更新する際に実行されます。
最も単純なボリュームタイプは emptyDir
です。これは、単一マシンの一時的なディレクトリーです。管理者はユーザーによる Pod に自動的に割り当てられる 永続ボリューム の要求を許可することもできます。
emptyDir
ボリュームストレージは、FSGroup パラメーターがクラスター管理者によって有効にされている場合は Pod の FSGroup に基づいてクォータで制限できます。
CLI コマンドの oc volume
を使用し、「レプリケーションコントローラー」や「デプロイメント設定」などの Pod テンプレートを持つオブジェクトのボリュームおよびボリュームマウントを「追加」、「更新」、または「削除」できます。また、Pod テンプレートのある Pod またはオブジェクトのボリュームを「一覧表示」することもできます。
27.2. 一般的な CLI の使用方法
oc volume
コマンドは以下の一般的な構文を使用します。
$ oc volume <object_selection> <operation> <mandatory_parameters> <optional_parameters>
このトピックでは、<object_selection>
の <object_type>/<name>
形式を後に説明する例で使用しています。ただし、以下のオプションのいずれかを使用できます。
表27.1 オブジェクトの選択
構文 | 説明 | 例 |
---|---|---|
|
タイプ |
|
|
タイプ |
|
|
所定のラベルセレクターに一致するタイプ |
|
|
タイプ |
|
|
リソースを編集するために使用するファイル名、ディレクトリー、または URL です。 |
|
<operation>
には、--add
、--remove
、または --list
のいずれかを使用できます。
いずれの <mandatory_parameters>
または <optional_parameters>
も選択された操作に固有のものであり、これらについては後のセクションで説明します。
27.3. ボリュームの追加
ボリューム、ボリュームマウントまたはそれらの両方を Pod テンプレートに追加するには、以下を実行します。
$ oc volume <object_type>/<name> --add [options]
表27.2 ボリュームを追加するためのサポートされるオプション
オプション | 説明 | デフォルト |
---|---|---|
|
ボリュームの名前。 |
指定がない場合は、自動的に生成されます。 |
|
ボリュームソースの名前。サポートされる値は |
|
|
名前でコンテナーを選択します。すべての文字に一致するワイルドカード |
|
|
選択されたコンテナー内のマウントパス。 | |
|
ホストパス。 | |
|
シークレットの名前。 | |
|
configmap の名前。 | |
|
Persistent Volume Claim (永続ボリューム要求、PVC) の名前。 | |
|
JSON 文字列としてのボリュームソースの詳細。必要なボリュームソースが | |
|
サーバー上で更新せずに変更したオブジェクトを表示します。サポートされる値は | |
|
指定されたバージョンで変更されたオブジェクトを出力します。 |
|
例
新規ボリュームソース emptyDir をデプロイメント設定の レジストリー に追加します。
$ oc volume dc/registry --add
レプリケーションコントローラー r1 のシークレット $ecret を使用してボリューム v1 を追加し、コンテナー内の /data でマウントします。
$ oc volume rc/r1 --add --name=v1 --type=secret --secret-name='$ecret' --mount-path=/data
要求名 pvc1 を使って既存の永続ボリューム v1 をディスク上のデプロイメント設定 dc.json に追加し、ボリュームをコンテナー c1 の /data でマウントし、サーバー上でデプロイメント設定を更新します。
$ oc volume -f dc.json --add --name=v1 --type=persistentVolumeClaim \ --claim-name=pvc1 --mount-path=/data --containers=c1
すべてのレプリケーションコントローラーについてリビジョン 5125c45f9f563 を使い、Git リポジトリー https://github.com/namespace1/project1 に基づいてボリューム v1 を追加します。
$ oc volume rc --all --add --name=v1 \ --source='{"gitRepo": { "repository": "https://github.com/namespace1/project1", "revision": "5125c45f9f563" }}'
27.4. ボリュームの更新
既存のボリュームまたはボリュームマウントを更新することは、ボリュームの追加と同様ですが、--overwrite
オプションを使用します。
$ oc volume <object_type>/<name> --add --overwrite [options]
例
レプリケーションコントローラーの既存ボリューム r1 を既存の Persistent Volume Claim (永続ボリューム要求、PVC) pvc1 に置き換えます。
$ oc volume rc/r1 --add --overwrite --name=v1 --type=persistentVolumeClaim --claim-name=pvc1
デプロイメント設定 d1 のマウントポイントをボリューム v1 の /opt に変更します。
$ oc volume dc/d1 --add --overwrite --name=v1 --mount-path=/opt
27.5. ボリュームの削除
Pod テンプレートからボリュームまたはボリュームマウントを削除するには、以下を実行します。
$ oc volume <object_type>/<name> --remove [options]
表27.3 ボリュームを削除するためにサポートされるオプション
オプション | 説明 | デフォルト |
---|---|---|
|
ボリュームの名前。 | |
|
名前でコンテナーを選択します。すべての文字に一致するワイルドカード |
|
|
複数のボリュームを 1 度に削除することを示します。 | |
|
サーバー上で更新せずに変更したオブジェクトを表示します。サポートされる値は | |
|
指定されたバージョンで変更されたオブジェクトを出力します。 |
|
例
デプロイメント設定 d1 からボリューム v1 を削除します。
$ oc volume dc/d1 --remove --name=v1
デプロイメント設定 d1 のコンテナー c1 からボリューム v1 をアンマウントし、d1 のコンテナーで参照されていない場合はボリューム v1 を削除します。
$ oc volume dc/d1 --remove --name=v1 --containers=c1
レプリケーションコントローラー r1 のすべてのボリュームを削除します。
$ oc volume rc/r1 --remove --confirm
27.6. ボリュームの一覧表示
Pod または Pod テンプレートのボリュームまたはボリュームマウントを一覧表示するには、以下を実行します。
$ oc volume <object_type>/<name> --list [options]
ボリュームのサポートされているオプションを一覧表示します。
オプション | 説明 | デフォルト |
---|---|---|
|
ボリュームの名前。 | |
|
名前でコンテナーを選択します。すべての文字に一致するワイルドカード |
|
例
Pod p1 のすべてのボリュームを一覧表示します。
$ oc volume pod/p1 --list
すべてのデプロイメント設定で定義されるボリューム v1 を一覧表示します。
$ oc volume dc --all --name=v1
27.7. サブパスの指定
volumeMounts.subPath
プロパティーを使用し、ボリュームのルートの代わりにボリューム内で subPath
を指定します。l>subPath
により、単一 Pod で複数の使用目的のために 1 つのボリュームを共有できます。
ボリューム内のファイルの一覧を表示するには、oc rsh
コマンドを実行します。
$ oc rsh <pod> sh-4.2$ ls /path/to/volume/subpath/mount example_file1 example_file2 example_file3
subPath
を指定します。
subPath の使用例
apiVersion: v1 kind: Pod metadata: name: my-site spec: containers: - name: mysql image: mysql volumeMounts: - mountPath: /var/lib/mysql name: site-data subPath: mysql 1 - name: php image: php volumeMounts: - mountPath: /var/www/html name: site-data subPath: html 2 volumes: - name: site-data persistentVolumeClaim: claimName: my-site-data