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. ボリュームポピュレーターの作成

ボリュームポピュレーターを作成して使用するには、以下を実行します。

  1. ボリュームポピュレーター用のカスタムリソース定義 (CRD) を作成します。
  2. ボリュームポピュレーターを使用して、データが事前にロードされたボリュームを作成します。

6.6.2.1. ボリュームポピュレーターの CRD の作成

次の手順では、ボリュームポピュレーターの "hello, world" カスタムリソース定義 (CRD) の例を作成する方法について説明します。

ユーザーは、この CRD のインスタンスを作成し、永続ボリューム要求 (PVC) に対してデータを事前に投入できます。

前提条件

  • OpenShift Container Platform Web コンソールにアクセスできる。
  • クラスター管理者権限でクラスターにアクセスできる。

手順

  1. 次のサンプル YAML ファイルを使用して、ポピュレーターおよび関連リソースの論理グループと操作の namespace を作成します。

    namespace YAML ファイルの例

    apiVersion: v1
    kind: Namespace
    metadata:
      name: hello
    Copy to Clipboard Toggle word wrap

  2. 次のサンプル YAML ファイルを使用して、データソースの CRD を作成します。

    CRD YAML ファイルの例

    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: hellos.hello.example.com
    spec:
      group: hello.example.com
      names:
        kind: Hello
        listKind: HelloList
        plural: hellos
        singular: hello
      scope: Namespaced
      versions:
      - name: v1alpha1
        schema:
          openAPIV3Schema:
            description: Hello is a specification for a Hello resource
            properties:
              apiVersion:
                description: 'APIVersion defines the versioned schema of this representation
                  of an object. Servers should convert recognized schemas to the latest
                  internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                type: string
              kind:
                description: 'Kind is a string value representing the REST resource this
                  object represents. Servers may infer this from the endpoint the client
                  submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                type: string
              spec:
                description: HelloSpec is the spec for a Hello resource
                properties:
                  fileContents:
                    type: string
                  fileName:
                    type: string
                required:
                - fileContents
                - fileName
                type: object
            required:
            - spec
            type: object
        served: true
        storage: true
    Copy to Clipboard Toggle word wrap

  3. ServiceAccountClusterRoleClusterRoleBindering、および Deployment を作成してコントローラーをデプロイし、データの事前投入を実装するロジックを実行します。

    1. 次のサンプル YAML ファイルを使用して、ポピュレーターのサービスアカウントを作成します。

      サービスアカウント YAML ファイルの例

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: hello-account
        namespace: hello 
      1
      Copy to Clipboard Toggle word wrap

      1
      先ほど作成した namespace を参照します。
    2. 次のサンプル YAML ファイルを使用して、ポピュレーターのクラスターロールを作成します。

      クラスターロールの YAML ファイルの例

      kind: ClusterRole
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: hello-role
      rules:
        - apiGroups: [hello.example.com]
          resources: [hellos]
          verbs: [get, list, watch]
      Copy to Clipboard Toggle word wrap

    3. 次のサンプル YAML ファイルを使用して、クラスターロールバインディングを作成します。

      クラスターロールバインディングの YAML ファイルの例

      kind: ClusterRoleBinding
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: hello-binding 
      1
      
      subjects:
        - kind: ServiceAccount
          name: hello-account 
      2
      
          namespace: hello 
      3
      
      roleRef:
        kind: ClusterRole
        name: hello-role 
      4
      
        apiGroup: rbac.authorization.k8s.io
      Copy to Clipboard Toggle word wrap

      1
      ロールバインディングの名前。
      2
      先ほど作成したサービスアカウントの名前を参照します。
      3
      先ほど作成したサービスアカウントの namespace の名前を参照します。
      4
      先ほど作成したクラスターロールを参照します。
    4. 次のサンプル YAML ファイルを使用して、ポピュレーターのデプロイメントを作成します。

      デプロイメント YAML ファイルの例

      kind: Deployment
      apiVersion: apps/v1
      metadata:
        name: hello-populator
        namespace: hello 
      1
      
      spec:
        selector:
          matchLabels:
            app: hello
        template:
          metadata:
            labels:
              app: hello
          spec:
            serviceAccount: hello-account 
      2
      
            containers:
              - name: hello
                image: registry.k8s.io/sig-storage/hello-populator:v1.0.1
                imagePullPolicy: IfNotPresent
                args:
                  - --mode=controller
                  - --image-name=registry.k8s.io/sig-storage/hello-populator:v1.0.1
                  - --http-endpoint=:8080
                ports:
                  - containerPort: 8080
                    name: http-endpoint
                    protocol: TCP
      Copy to Clipboard Toggle word wrap

      1
      先ほど作成した namespace を参照します。
      2
      先ほど作成したサービスアカウントを参照します。
  4. 次のサンプル YAML ファイルを使用して、ボリュームポピュレーターを作成し、kind:Hello リソースをボリュームの有効なデータソースとして登録します。

    ボリュームポピュレーターの YAML ファイルの例

    kind: VolumePopulator
    apiVersion: populator.storage.k8s.io/v1beta1
    metadata:
      name: hello-populator 
    1
    
    sourceKind:
      group: hello.example.com
      kind: Hello
    Copy to Clipboard Toggle word wrap

    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 にボリュームポピュレーターは同梱されていません。必ず 独自のボリュームポピュレーターを作成してください。

手順

  1. 次のコマンドを実行して、fileContents パラメーターとして渡された "Hello, World!" というテキストが含まれる Hello CRD のカスタムリソース (CR) インスタンスを作成します。

    $ oc apply -f  - <<EOF
    apiVersion: hello.example.com/v1alpha1
    kind: Hello
    metadata:
      name: example-hello
    spec:
      fileName: example.txt
      fileContents: Hello, world!
    EOF
    Copy to Clipboard Toggle word wrap
  2. 次のサンプルファイルのような、Hello CR を参照する PVC を作成します。

    PVC YAML ファイルの例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: example-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Mi
      dataSourceRef: 
    1
    
        apiGroup: hello.example.com
        kind: Hello
        name: example-hello 
    2
    
      volumeMode: Filesystem
    Copy to Clipboard Toggle word wrap

    1
    dataSourceRef フィールドは、PVC のデータソースを指定します。
    2
    データソースとして使用している CR の名前。この例では、'example-hello' です。

検証

  1. 数分経過したら、次のコマンドを実行して、PVC が作成され、ステータスが Bound になっていることを確認します。

    $ oc get pvc example-pvc -n hello 
    1
    Copy to Clipboard Toggle word wrap
    1
    この例では、PVC の名前は example-pvc です。

    出力例

    NAME          STATUS    VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    example-pvc   Bound     my-pv         10Mi       ReadWriteOnce  gp3-csi        <unset>                 14s
    Copy to Clipboard Toggle word wrap

  2. 次のサンプルファイルを使用して、PVC を読み取ってデータソース情報が適用されたことを検証するジョブを作成します。

    ジョブ YAML ファイルの例

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: example-job
    spec:
      template:
        spec:
          containers:
            - name: example-container
              image: busybox:latest
              command:
                - cat
                - /mnt/example.txt 
    1
    
              volumeMounts:
                - name: vol
                  mountPath: /mnt
          restartPolicy: Never
          volumes:
            - name: vol
              persistentVolumeClaim:
                claimName: example-pvc 
    2
    Copy to Clipboard Toggle word wrap

    1
    "Hello, world!" テキストが含まれるファイルの場所と名前。
    2
    ステップ 2 で作成した PVC の名前。この例では、example-pvc です。
  3. 次のコマンドを実行してジョブを開始します。

    $ oc run example-job --image=busybox --command -- sleep 30 --restart=OnFailure
    Copy to Clipboard Toggle word wrap

    出力例

    pod/example-job created
    Copy to Clipboard Toggle word wrap

  4. 次のコマンドを実行して、ジョブとそのすべての依存関係が完了するまで待機します。

    $ oc wait --for=condition=Complete pod/example-job
    Copy to Clipboard Toggle word wrap
  5. 次のコマンドを実行して、ジョブが収集したコンテンツを検証します。

    $ oc logs job/example-job
    Copy to Clipboard Toggle word wrap

    予想される出力

    Hello, world!
    Copy to Clipboard Toggle word wrap

6.6.2.3. ボリュームポピュレーターのアンインストール

次の手順では、ボリュームポピュレーターをアンインストールする方法について説明します。

前提条件

  • OpenShift Container Platform Web コンソールにアクセスできる。
  • クラスター管理者権限でクラスターにアクセスできる。

手順

ボリュームポピュレーターをアンインストールするには、以下の手順でインストールしたすべてのオブジェクトを逆の順序で削除します。

  1. ボリュームポピュレーターを使用してデータが事前投入されたボリュームを作成する セクション。
  2. ボリュームポピュレーターの CRD の作成 セクション。

    必ず VolumePopulator インスタンスを削除してください。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat