6.6. ボリュームポピュレーター
ボリュームポピュレーターを使用すると、空のボリュームをプロビジョニングする代わりに、動的プロビジョニング中にボリュームにデータを自動で事前にロードできます。
6.6.1. ボリュームポピュレーターの概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform バージョン 4.12 から 4.19 では、永続ボリューム要求 (PVC) 仕様の dataSource
フィールドでボリュームポピュレーター機能を指定できます。ただし、ボリュームを作成するためのデータソースとして使用できるのは、PVC とスナップショットのみに制限されています。
OpenShift Container Platform バージョン 4.20 以降では、代わりに dataSourceRef
フィールドを使用します。dataSourceRef
フィールドを使用すると、適切なカスタムリソース (CR) をデータソースとして使用して、新しいボリュームにデータを事前投入できます。
dataSource
フィールドを使用したボリュームポピュレーター機能は、今後のバージョンで非推奨化される可能性があります。このフィールドを使用して作成したボリュームポピュレーターがある場合は、今後の問題を回避するために、dataSourceRef
フィールドを使用してボリュームポピュレーターを再作成することを検討してください。
ボリュームへのデータの事前投入はデフォルトで有効になっており、OpenShift Container Platform にはインストール済みの volume-data-source-validator
コントローラーが含まれています。ただし、OpenShift Container Platform にはボリュームポピュレーターは同梱されていません。
6.6.2. ボリュームポピュレーターの作成 リンクのコピーリンクがクリップボードにコピーされました!
ボリュームポピュレーターを作成して使用するには、以下を実行します。
- ボリュームポピュレーター用のカスタムリソース定義 (CRD) を作成します。
- ボリュームポピュレーターを使用して、データが事前にロードされたボリュームを作成します。
6.6.2.1. ボリュームポピュレーターの CRD の作成 リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、ボリュームポピュレーターの "hello, world" カスタムリソース定義 (CRD) の例を作成する方法について説明します。
ユーザーは、この CRD のインスタンスを作成し、永続ボリューム要求 (PVC) に対してデータを事前に投入できます。
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
- クラスター管理者権限でクラスターにアクセスできる。
手順
次のサンプル YAML ファイルを使用して、ポピュレーターおよび関連リソースの論理グループと操作の namespace を作成します。
namespace YAML ファイルの例
apiVersion: v1 kind: Namespace metadata: name: hello
apiVersion: v1 kind: Namespace metadata: name: hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のサンプル YAML ファイルを使用して、データソースの CRD を作成します。
CRD YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceAccount
、ClusterRole
、ClusterRoleBindering
、およびDeployment
を作成してコントローラーをデプロイし、データの事前投入を実装するロジックを実行します。次のサンプル YAML ファイルを使用して、ポピュレーターのサービスアカウントを作成します。
サービスアカウント YAML ファイルの例
apiVersion: v1 kind: ServiceAccount metadata: name: hello-account namespace: hello
apiVersion: v1 kind: ServiceAccount metadata: name: hello-account namespace: hello
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 先ほど作成した namespace を参照します。
次のサンプル YAML ファイルを使用して、ポピュレーターのクラスターロールを作成します。
クラスターロールの YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のサンプル YAML ファイルを使用して、クラスターロールバインディングを作成します。
クラスターロールバインディングの YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のサンプル YAML ファイルを使用して、ポピュレーターのデプロイメントを作成します。
デプロイメント YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のサンプル YAML ファイルを使用して、ボリュームポピュレーターを作成し、
kind:Hello
リソースをボリュームの有効なデータソースとして登録します。ボリュームポピュレーターの YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ボリュームポピュレーターの名前。
未登録のポピュレーターを使用する PVC は、"The datasource for this PVC does not match any registered VolumePopulator" というイベントを作成します。これは、未知 (未登録) ポピュレーターを使用しているため、PVC がプロビジョニングされない可能性があることを示します。
次のステップ
- これで、この CRD の CR インスタンスを作成して PVC にデータを事前投入できるようになりました。
ボリュームポピュレーターを使用してボリュームにデータを事前投入する方法については、ボリュームポピュレーターを使用してデータが事前投入されたボリュームを作成する を参照してください。
6.6.2.2. ボリュームポピュレーターを使用してデータが事前投入されたボリュームを作成する リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、前に作成したサンプルの hellos.hello.example.com
カスタムリソース定義 (CRD) を使用して、データが事前投入された永続ボリューム要求 (PVC) を作成する方法について説明します。
この例では、実際のデータソースを使用するのではなく、ボリュームのルートディレクトリーに文字列 "Hello, world!" が含まれる "example.txt" というファイルを作成します。実際の実装では、独自のボリュームポピュレーターを作成する必要があります。
前提条件
- 実行中の OpenShift Container Platform クラスターにログインしている。
- ボリュームポピュレーター用の既存のカスタムリソース定義 (CRD) がある。
- OpenShift Container Platform にボリュームポピュレーターは同梱されていません。必ず 独自のボリュームポピュレーターを作成してください。
手順
次のコマンドを実行して、
fileContents
パラメーターとして渡された "Hello, World!" というテキストが含まれるHello
CRD のカスタムリソース (CR) インスタンスを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のサンプルファイルのような、Hello CR を参照する PVC を作成します。
PVC YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
数分経過したら、次のコマンドを実行して、PVC が作成され、ステータスが
Bound
になっていることを確認します。oc get pvc example-pvc -n hello
$ oc get pvc example-pvc -n hello
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この例では、PVC の名前は
example-pvc
です。
出力例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE example-pvc Bound my-pv 10Mi ReadWriteOnce gp3-csi <unset> 14s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE example-pvc Bound my-pv 10Mi ReadWriteOnce gp3-csi <unset> 14s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のサンプルファイルを使用して、PVC を読み取ってデータソース情報が適用されたことを検証するジョブを作成します。
ジョブ YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してジョブを開始します。
oc run example-job --image=busybox --command -- sleep 30 --restart=OnFailure
$ oc run example-job --image=busybox --command -- sleep 30 --restart=OnFailure
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
pod/example-job created
pod/example-job created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ジョブとそのすべての依存関係が完了するまで待機します。
oc wait --for=condition=Complete pod/example-job
$ oc wait --for=condition=Complete pod/example-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ジョブが収集したコンテンツを検証します。
oc logs job/example-job
$ oc logs job/example-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
Hello, world!
Hello, world!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6.2.3. ボリュームポピュレーターのアンインストール リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、ボリュームポピュレーターをアンインストールする方法について説明します。
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
- クラスター管理者権限でクラスターにアクセスできる。
手順
ボリュームポピュレーターをアンインストールするには、以下の手順でインストールしたすべてのオブジェクトを逆の順序で削除します。
- ボリュームポピュレーターを使用してデータが事前投入されたボリュームを作成する セクション。
ボリュームポピュレーターの CRD の作成 セクション。
必ず
VolumePopulator
インスタンスを削除してください。