5.3. hostPath を使用した永続ストレージ
OpenShift Container Platform クラスター内の hostPath ボリュームは、ファイルまたはディレクトリーをホストノードのファイルシステムから Pod にマウントします。ほとんどの Pod には hostPath ボリュームは必要ありませんが、アプリケーションが必要とする場合は、テスト用のクイックオプションが提供されます。
クラスター管理者は、特権付き Pod として実行するように Pod を設定する必要があります。これにより、同じノードの Pod へのアクセスが付与されます。
5.3.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform はシングルノードクラスターでの開発およびテスト用の hostPath マウントをサポートします。
実稼働クラスターでは、hostPath を使用しません。代わりにクラスター管理者は、GCE Persistent Disk ボリューム、NFS 共有、Amazon EBS ボリュームなどのネットワークリソースをプロビジョニングします。ネットワークリソースは、ストレージクラスを使用した動的プロビジョニングの設定をサポートします。
hostPath ボリュームは静的にプロビジョニングする必要があります。
コンテナーのルート (/) や、ホストとコンテナーで同じパスにはマウントしないでください。これは、コンテナーに十分な特権が付与されている場合、ホストシステムを破壊する可能性があります。ホストをマウントするには、/host を使用するのが安全です。以下の例では、ホストの / ディレクトリーが /host でコンテナーにマウントされています。
apiVersion: v1
kind: Pod
metadata:
name: test-host-mount
spec:
containers:
- image: registry.access.redhat.com/ubi9/ubi
name: test-container
command: ['sh', '-c', 'sleep 3600']
volumeMounts:
- mountPath: /host
name: host-slash
volumes:
- name: host-slash
hostPath:
path: /
type: ''
5.3.2. hostPath ボリュームの静的なプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
hostPath ボリュームを使用する Pod は、手動の (静的) プロビジョニングで参照される必要があります。
手順
PersistentVolumeオブジェクト定義を含むpv.yamlファイルを作成して、永続ボリューム (PV) を定義します。apiVersion: v1 kind: PersistentVolume metadata: name: task-pv-volume1 labels: type: local spec: storageClassName: manual2 capacity: storage: 5Gi accessModes: - ReadWriteOnce3 persistentVolumeReclaimPolicy: Retain hostPath: path: "/mnt/data"4 ファイルから PV を作成します。
$ oc create -f pv.yamlPersistentVolumeClaimオブジェクト定義を含むpvc.yamlファイルを作成して PVC を定義します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: task-pvc-volume spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: manualファイルから PVC を作成します。
$ oc create -f pvc.yaml
5.3.3. 特権付き Pod での hostPath 共有のマウント リンクのコピーリンクがクリップボードにコピーされました!
永続ボリューム要求の作成後に、これをアプリケーション内で使用できます。以下の例は、この共有を Pod 内にマウントする方法を示しています。
前提条件
- 基礎となる hostPath 共有にマップされる永続ボリューム要求があること。
手順
既存の永続ボリューム要求をマウントする特権付き Pod を作成します。
apiVersion: v1 kind: Pod metadata: name: pod-name1 spec: containers: ... securityContext: privileged: true2 volumeMounts: - mountPath: /data3 name: hostpath-privileged ... securityContext: {} volumes: - name: hostpath-privileged persistentVolumeClaim: claimName: task-pvc-volume4