アプリへのFile Storage for VPCの追加
Red Hat OpenShift on IBM Cloud クラスター内のアプリケーション向けに File Storage for VPC をプロビジョニングするために使用できる、あらかじめ定義されたストレージクラスを提供します。 各ストレージクラスでは、プロビジョニングするファイル共有に対して、利用可能な容量、IOPS、ファイルシステム、および保存期間が指定されます。 また、ユースケースに合わせて独自のストレージクラスを作成することもできます。
続行する前に、以下の注意事項を確認してください。
- ストレージ・クラスを使用して特定のタイプのストレージをプロビジョンした後は、ストレージ・デバイスのタイプや保存ポリシーを変更することはできません。 ただし、ストレージ容量とパフォーマンスを向上させたい場合は、 サイズを変更 し、 IOPS を変更することができます。 ストレージのタイプおよび保存期間ポリシーを変更するには、新しいストレージインスタンスを作成し、古いストレージインスタンスから新しいストレージインスタンスへデータをコピーする必要があります。
- クラスタとVPCが別々のリソースグループになっている場合、ファイル共有をプロビジョニングする前に、独自のストレージクラスを作成し、
resourceGroupセクションにVPCリソースグループIDを、securityGroupIDsセクションにkube-<clusterID>セキュリティグループIDを指定する必要があります。 セキュリティグループIDを取得するには、以下のようにする。 詳細については、独自のストレージクラスを作成する を参照してください。 - クラスターバージョンで新しいセキュリティグループルールが導入されました4.11以降。 これらのルールの変更により、セキュリティグループを同期してから使用する必要があります。File Storage for VPC 。 詳細については、追加File Storage for VPCアプリへ。
- バージョンで新しいストレージクラスが追加されました2.0アドオンの。 古いストレージ クラスを使用する新しいファイル共有をプロビジョニングすることはできなくなります。 古いストレージ クラスを使用する既存のボリュームは引き続き機能しますが、古いクラスを使用して作成されたボリュームを拡張することはできません。 詳細については、新しいストレージクラスへの移行。
- を使用したPVCの作成はサポートされていません。 StorageClassSecrets を使ったPVCの作成はサポートされていません。
- クラスタを作成するユーザが、VPC Infrastructure ServicesのReader、Writer、およびOperator権限を持っていることを確認します。
- ファイル共有で暗号化を使用する場合は、VPCインフラストラクチャからKMS/HPCSへの サービス認証を設定して ください。
IBM Cloudは、専用鍵管理サービスをHyper Protect Crypto ServicesからKey Protect Dedicatedに変更します。
- デフォルトでは、 File Storage for VPC クラスター・アドオンは、
kube-<clusterID>セキュリティー・グループにファイル共有をプロビジョンします。 これは、ポッドが複数のノードおよびゾーンにわたってファイル共有にアクセスできることを意味します。 - コンテキスト・ベースの制限を使用する場合は、ネットワーク・ゾーンとルールを設定してください。 詳細については、 コンテキストベースの制限による仮想プライベートクラウド(VPC)インフラストラクチャサービスの保護を 参照してください。
新しいセキュリティグループ規則は、 4.11 以降のバージョンで導入されました。 これらのルール変更により、 File Storage for VPC を使用する前にセキュリティグループを同期する必要があります。 クラスターが最初に 4.11 以前のバージョンで作成された場合、セキュリティグループ設定を同期するために以下のコマンドを実行してください。
- クラスタのIDを取得してください。
ibmcloud oc cluster ls kube-<clusterID>セキュリティー・グループの ID を取得します。ibmcloud is sg kube-CLUSTER_ID | grep ID- 前のステップで取得したIDを使って、
kube-<clusterID>セキュリティグループを同期します。ibmcloud ks security-group sync -c CLUSTER_ID --security-group ID
クイックスタート: File Storage for VPC
クラスタ向けに File Storage for VPC を動的にプロビジョニングするために、パーシステント・ボリューム・クレーム(PVC)を作成します。 動的プロビジョニングにより、対応する永続ボリューム(PV)が自動的に作成され、 アカウント内のファイル共有が注文されます。
第2世代のストレージクラスを 選択できるようになった。
-
以下のコマンドを実行して、プリインストールされているストレージ・クラスを確認します。 詳しくは、ストレージ・クラス・リファレンスを参照してください。
oc get sc | grep vpc-file -
以下の YAML をファイルに保存します。 この例では、ギガバイト・サイズ
10Giのibmc-vpc-file-min-iopsストレージ・クラスを使用して、my-pvcという名前のクレームを作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc # Enter a name for your PVC. spec: accessModes: - ReadWriteMany # The file share can be mounted on multiple nodes and pods. resources: requests: storage: 20Gi # Enter the size of the storage in gigabytes (Gi). storageClassName: ibmc-vpc-file-min-iops # Enter the name of the storage class that you want to use. -
PVC を作成します。
oc apply -f my-pvc.yaml -
PVC が作成され、PV にバインドされたことを確認します。
oc describe pvc my-pvc出力例
Name: my-pvc Namespace: default StorageClass: "" Status: Bound Volume: pvc-0d787071-3a67-11e7-aafc-eef80dd2dea2 Labels: <none> Capacity: 20Gi Access Modes: RWX Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 1m 1m 1 {ibm.io/ibmc-vpc-file 31898035-3011-11e7-a6a4-7a08779efd33 } Normal ProvisioningSucceeded Successfully provisioned volume pvc-0d787071-3a67-11e7-aafc-eef80dd2dea2 -
以下のデプロイメント構成を
deployment.yamlというファイルに保存し、前のステップで作成した PVC を参照します。apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-deployment spec: selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: containers: - name: busybox image: busybox:1.28 command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: my-vol mountPath: /data/demo # Mount path for the application. volumes: - name: my-vol persistentVolumeClaim: claimName: my-pvc # Your PVC name.volumeMounts.mountPath- containers の volumeMounts セクションに、コンテナー内部でボリュームをマウントするディレクトリーの絶対パスを入力します。 マウントパスに書き込まれたデータは、物理的な File Storage for VPC インスタンス内の
rootディレクトリに保存されます。 異なるアプリ間でボリュームを共有したい場合は、各アプリごとに ボリュームのサブパスを指定することができます。 volumeMounts.name- containers の volumeMounts セクションで、ポッドにマウントするボリュームの名前を入力します。
volume.name- volumes セクションで、ポッドにマウントするボリュームの名前を入力します。 通常、この名前は
volumeMounts.nameと同じです。 claimName- volumes の persistentVolumeClaim セクションで、使用する PV をバインドする PVC の名前を入力します。
-
デプロイメントを作成します。
oc apply -f deployment.yaml -
PV が正常にマウントされたことを確認します。
oc describe deployment my-deploymentマウント・ポイントは Volume Mounts フィールドにあり、ボリュームは Volumes フィールドにあります。
Containers: Mounts: /data/demo from my-vol (rw) Volumes: my-vol: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: my-pvc ReadOnly: false -
オプション: ポッドの実行後に、 ストレージ・ボリュームの拡張 を試行します。
新しいストレージクラスへの移行
- バージョンで新しいストレージクラスが追加されました2.0アドオンの。
- 古いストレージ クラスを使用する新しいファイル共有をプロビジョニングすることはできなくなります。
- 古いストレージ クラスを使用する既存のボリュームは引き続き機能しますが、古いクラスを使用して作成されたボリュームを拡張することはできません。
- ボリューム拡張機能が必要な場合は、次の手順を実行してアプリを新しいストレージ クラスに移行します。
- ボリューム拡張機能が必要ない場合は、移行する必要はなく、PVC は通常どおり機能し続けます。
- 次の手順では、手動移行について説明します。
-
移行する PVC を見つけて、PVC 名と関連付けられている PV 名の両方をメモします。
oc get pvc -
PVC を使用しているアプリをスケールダウンします。
oc scale deployment DEPLOYMENT --replicas 0 -
アプリが使用しているPVオブジェクトを編集して、回収ポリシーを変更します。
Retainストレージクラスibmc-vpc-file-min-iops。kubectl edit pv PVspec: accessModes: - ReadWriteMany capacity: storage: 20Gi claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: <pvc-name> namespace: default ... persistentVolumeReclaimPolicy: Retain # Change delete to retain storageClassName: ibmc-vpc-file-min-iops # Enter a new storage class volumeMode: Filesystem -
既存の PVC オブジェクトを削除します。
kubectl delete pvc PVC -
PVを再度編集し、
claimRefセクション。kubectl edit pv PVspec: accessModes: - ReadWriteMany capacity: storage: 20Gi #claimRef: #apiVersion: v1 #kind: PersistentVolumeClaim #name: <pvc-name> #namespace: default #resourceVersion: "381270" #uid: 4042f319-1233-4187-8549-8249a840a8dd -
以前の PVC と同じ名前とサイズの PVC を作成します。 これは、影響を受けるすべての PVC に対して 1 つずつ実行する必要があります。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name> spec: accessModes: - ReadWriteMany resources: requests: storage: <size>Gi storageClassName: ibmc-vpc-file-min-iops -
PVC を使用していたアプリをスケールアップします。
k scale deployment DEPLOYMENT --replicas x -
ボリューム拡張を引き続き使用するには、ボリューム拡張の設定。
ボリューム拡張のセットアップ
拡張をサポートするボリュームをプロビジョニングするには、allowVolumeExpansion が true に設定されているストレージ・クラスを使用する必要があります。
File Storage for VPC クラスターアドオンは、オンラインモードとオフラインモードの両方での拡張をサポートします。 ただし、拡張は File Storage for VPC プロファイルの 指定されたサイズおよびIOPs範囲内でのみ可能です。
2.0 バージョンで新しいストレージクラスが導入されました。 ボリューム拡張は、アドオンの以前のバージョンのストレージ クラスを使用する共有では機能しません。
開始前に
-
ボリューム拡張を使用するには、 アドオンを少なくともバージョン 2.0 にアップデートして ください。
-
あなたのアプリが 最新のストレージクラスの いずれかを使用していることを確認してください。 移行手順については、新しいストレージクラスへの移行
-
実行中のアプリがない場合は、まず クイックスタート例 PVC とデプロイメント。
マウントされたボリュームの拡張
-
PVC がアプリ・ポッドによってマウントされた後、PVC の
spec.resources.requests.storageフィールドの値を編集して、ボリュームを拡張できます。 ボリュームを拡張するには、PVC を編集して、spec.resources.requests.storageフィールドの値を大きくします。kubectl edit pvc my-pvcspec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi -
PVC を保存して閉じます。 ボリュームが拡張されるまで数分待ちます。
-
ボリュームが展開されていることを確認してください。
kubectl get pvc出力例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-pvc Bound pvc-25b6912e-75bf-41ca-b6b2-567fa4f9d245 50Gi RWX ibmc-vpc-file-min-iops 3m31s
アプリへの既存のファイル・ストレージの添付
クラスター用に File Storage for VPC を静的にプロビジョニングするために、パーシステント・ボリューム・クレーム(PVC)を作成します。 静的プロビジョニングにより、クラスター管理者は既存のストレージ・デバイスをクラスターで使用できるようにすることができます。
-
クラスター ID を取得します。
ibmcloud ks cluster ls -
kube-<clusterID>セキュリティグループのIDを取得します。ibmcloud is sg kube-CLUSTER_ID | grep ID -
ファイル共有を作成する。 詳しくは、「 ファイル共有およびマウント・ターゲットの作成」を参照してください。
ibmcloud is share-create --name my-file-share --zone us-south-2 --profile dp2 --size 1000 --iops 1000 -
共有マウントターゲットを作成し、
--vni-sgsオプションで先ほど取得したkube-<clusterID>セキュリティグループIDを指定します。ibmcloud is share-mount-target-create my-file-share --subnet my-subnet --name NAME --vni-name my-share-vni-1 --vni-sgs kube-CLUSTER_ID --resource-group-name Default --vpc ID -
永続ボリューム (PV) を作成する前に、ファイル共有に関する詳細を取得します。
ibmcloud is shares -
ご自身の株式の詳細をご確認ください。 マウント・ターゲットをメモします。
ibmcloud is share SHARE-IDコマンドの例。
ibmcloud is share r134-bad98878-1f63-45d2-a3fd-60447094c2e6出力例
ID r134-bad98878-1f63-45d2-a3fd-60447094c2e6 Name pvc-e7e005a9-e96b-41ad-9d6e-74650a9110a0 CRN crn:v1:staging:public:is:us-south-1:a/77f2bceddaeb577dcaddb4073fe82c1c::share:r134-bad98878-1f63-45d2-a3fd-60447094c2e6 Lifecycle state stable Access control mode security_group Zone us-south-1 Profile dp2 Size(GB) 10 IOPS 100 User Tags clusterid:cpjao3l20dl78jadqkd0,namespace:default,provisioner:vpc.file.csi.ibm.io,pv:pvc-e7e005a9-e96b-41ad-9d6e-74650a9110a0,pvc:pv-file,reclaimpolicy:delete,storageclass:custom-eni Encryption provider_managed Mount Targets ID Name r134-aa2aabb8-f616-47be-886b-99220852b728 pvc-e7e005a9-e96b-41ad-9d6e-74650a9110a0 Resource group ID Name 300b9469ee8676f9a038ecdf408c1a9d Default Created 2024-06-11T19:55:11+05:30 Replication role none Replication status none Replication status reasons Status code Status message -
Mount Pathとも呼ばれるnfsServerPathを取得します。ibmcloud is share-mount-target SHARE-ID SHARE-TARGET-IDコマンドの例。
ibmcloud is share-mount-target r134-bad98878-1f63-45d2-a3fd-60447094c2e6 r134-aa2aabb8-f616-47be-886b-99220852b728出力例
ID r134-aa2aabb8-f616-47be-886b-99220852b728 Name pvc-e7e005a9-e96b-41ad-9d6e-74650a9110a0 VPC ID Name r134-f05922d4-d8ab-4f64-9a3d-82664b303bc1 vpc-public Access control mode security_group Resource type share_mount_target Virtual network interface ID Name 0716-6407fb4b-e962-49c4-8556-dc94f4574b4b defective-chloride-huffy-gladly Lifecycle state stable Mount path 10.240.0.23:/89d8a454_f552_42bf_8374_4d31481edf4d Transit Encryption none Created 2024-06-11T19:55:12+05:30 -
ファイル共有を参照する
static-file-share.yamlという PV 構成ファイルを作成します。apiVersion: v1 kind: PersistentVolume metadata: name: static-file-share spec: mountOptions: - hard - nfsvers=4.1 - sec=sys accessModes: - ReadWriteMany capacity: storage: 10Gi csi: volumeAttributes: nfsServerPath: NFS-SERVER-PATH driver: vpc.file.csi.ibm.io volumeHandle: FILE-SHARE-ID#SHARE-TARGET-ID -
PV を作成します。
oc apply -f static-file-share.yaml -
PVC を作成します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-static spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: "" #Leave the storage class blank. -
PVC を作成して PV をバインドします。
oc apply -f pvc-static.yaml -
デプロイメントファイル名
testpod.yamlを作成し、ファイルシェアをアプリケーションポッドにアタッチします。apiVersion: apps/v1 kind: Deployment metadata: name: testpod labels: app: testpod spec: selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: containers: - name: busybox image: busybox:1.28 command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: my-vol mountPath: /data/demo # Mount path for the application. volumes: - name: pvc-name persistentVolumeClaim: claimName: pvc-static # The name of the PVC that you created earlierspec.containers.volumeMounts.mountPath- コンテナー内でボリュームがマウントされるディレクトリーの絶対パスを入力します。 マウントパスに書き込まれたデータは、物理的な File Storage for VPC インスタンス内の
rootディレクトリに保存されます。 異なるアプリ間でボリュームを共有したい場合は、各アプリごとに ボリュームのサブパスを指定することができます。 volumeMounts.name- ポッドにマウントするボリュームの名前を入力します。
volume.name- ポッドにマウントするボリュームの名前を入力します。 通常、この名前は
volumeMounts.nameと同じです。 volumes.persistentVolumeClaim.claimName- 使用したいPVをバインドしているPVCの名前を入力してください。
-
デプロイメントを作成します。
oc apply -f testpod.yaml
独自のストレージ・クラスの作成
File Storage for VPC インスタンスに最適な設定を反映させた、独自のストレージクラスを作成することができます。 コストを低く抑えるために、最初は最小スループットでPVCのプロビジョニングを行い、その後、ニーズが明確になってきたら、PVCにアクセスして スループットを 調整することができます。
以下の機能が必要な場合は、 独自のストレージ・クラスを作成 する必要があります。
- アプリは非 root として実行する必要があります。
- クラスターは、VPC およびサブネットとは異なるリソース・グループ内にあります。
- 指定されたノード上または指定されたゾーン内のポッドへのファイル共有アクセスを制限する必要があります。
- HPCS や Key Protectなどの KMS プロバイダーを使用して、独自の (BYOK) 暗号化を使用する必要があります。
- 仮想ネットワーク・インターフェース(VNI) のサブネットまたは IP アドレスを手動で指定する必要があります。
- 容量と帯域幅をもっとコントロールする必要がある。 この場合、
rfsプロファイルを使用できます。 詳細については、 地域ファイル共有の概要を 参照してください。 - 特定の固定IOPSの
dp2プロファイルについて、要求されたPVC容量を、サポートされる最小容量に切り上げるように設定したい。 詳細については、「 固定IOPSプロファイルでの自動キャパシティ丸めを有効にする 」を参照してください。
クラスタとVPCが同じリソースグループにない場合は、resourceGroup セクションにVPCリソースグループIDを、securityGroupIDs セクションに kube-<clusterID> セキュリティグループIDを指定する必要があります。 ibmcloud is sg kube-CLUSTER_ID | grep ID を実行すれば、kube-<clusterID> セキュリティ・グループのIDがわかります。
-
ストレージクラスの設定ファイルを作成します。 以下の例では、
dp2プロファイルを 使用しています。 第 1 世代と第 2 世代の ストレージ クラスから選択します。第一世代の例:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-file-custom-sc labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver provisioner: vpc.file.csi.ibm.io mountOptions: - hard - nfsvers=4.1 - sec=sys parameters: profile: "dp2" # or rfs billingType: "hourly" # hourly or monthly encrypted: "false" encryptionKey: "" # If encrypted is true, then a user must specify the CRK-CRN. resourceGroup: "" # Resource group ID. By default, the resource group of the cluster will be used from storage-secrete-store secret. isENIEnabled: "true" # VPC File Share VNI feature will be used by all PVCs created with this storage class. securityGroupIDs: "" # By default cluster security group i.e kube-<clusterID> will be used. User can provide their own comma separated SGs. subnetID: "" # User can provide subnetID in which the VNI will be created. Zone and region are mandatory for this. If not provided CSI driver will use the subnetID available in the cluster's VPC zone. region: "" # VPC CSI driver will select a region from cluster node's topology. The user can override this default. zone: "" # VPC CSI driver will select a region from cluster node's topology. The user can override this default. primaryIPID: "" # Existing ID of reserved IP from the same subnet as the file share zone. Zone and region are mandatory for this. SubnetID is not mandatory for this. primaryIPAddress: "" # IPAddress for VNI to be created in the subnet of the zone. Zone, region and subnetID are mandatory for this. iops: "" # Example: 100, this option is valid only for the dp2 profile. allowCapacityRoundoffForIops: "true" # Optional. Enables automatic capacity roundoff for fixed IOPS dp2 profiles. When set to "true", if the requested PVC size is lower than the minimum supported capacity for the requested IOPS, the driver automatically provisions the volume at the minimum supported capacity. Disabled by default. Requires a Virtual Private Endpoint Gateway (VPEG) to IBM Global Catalog. throughput: "" # Example: 2000, this option is valid only for the rfs profile tags: "" # User can add a list of tags "a, b, c" that will be used at the time of provisioning file share, by default CSI driver has its own tags. uid: "0" # The initial user identifier for the file share, by default its root. gid: "0" # The initial group identifier for the file share, by default its root. classVersion: "1" reclaimPolicy: "Delete" allowVolumeExpansion: true第二世代の例:
第一世代の
ibmc-vpc-file-min-iopsストレージクラスを使用して 10Gi PVC をプロビジョニングする場合、最大 IOPS は 1,000 です。 デフォルトの割り当ては100で、スループットは210Mbpsに固定され、チューニングはできない。ただし、第2世代の
ibmc-vpc-file-regionalストレージ・クラスを使用して 10Gi PVCをプロビジョニングする場合、IOPSは35,000に固定され、最大スループットはデフォルトで8 Mbpsであるにもかかわらず、8192 Mbpsまで調整可能です。別の例として、サイズが16TB未満でIOPS 500固定のPVCを、第一世代の
ibmc-vpc-file-500-iopsストレージクラスを使って最初にプロビジョニングする場合、IOPSとスループットは固定され、サイズとIOPSに基づいて計算されます。このPVCを16TBを超えて拡張するには、第一世代の
ibmc-vpc-file-500-iopsストレージクラスは使えない。 代わりに第2世代のibmc-vpc-file-regional-max-bandwidthストレージ・クラスを使用することで、任意のサイズのPVCを最大32TBまでプロビジョニングすることができ、最大35000IOPSと8192Mbpsのデフォルト・スループットを持ち、これは調整可能である。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-file-regional-max-bandwidth labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver annotations: version: v2.0 revision: "1" provisioner: vpc.file.csi.ibm.io mountOptions: - hard - nfsvers=4.1 - sec=sys parameters: profile: "rfs" # general-purpose, sdp, 5iops-tier, 10iops-tier, or custom billingType: "hourly" encrypted: "false" encryptionKey: "" resourceGroup: "" throughput: "8192" # Example: 2000 classVersion: "1" isENIEnabled: "true" # VPC File Share ENI/VNI feature will be used by all PVCs created with this storage class. securityGroupIDs: "" # By default cluster security group i.e kube-<clusterID> will be used. User can provide their own command separated SGs. subnetID: "" # User can provide subnetID in which the ENI/VNI will be created.If not provided CSI driver will use the subnetID available in the cluster' VPC zone. primaryIPID: "" # Existing ID of reserved IP from any of subnets within the VPC,subnetID is not mandatory for this. primaryIPAddress: "" # IPAddress for ENI/VNI to be created in the respective subnet,subnetID is mandatory for this. uid: "0" # The initial user identifier for the file share, by default its root. gid: "0" # The initial group identifier for the file share, by default its root. allowVolumeExpansion: true # Select true or false. Only supported on version 3.0.1 and later reclaimPolicy: "Delete" -
カスタマイズしたストレージ・クラスをクラスターに作成します。
oc apply -f custom-storageclass.yaml -
ストレージ・クラスがクラスター内に存在することを確認します。
oc get sc出力例
ibmc-vpc-file-custom-sc vpc.file.csi.ibm.io
デフォルトのストレージクラスの設定
- デフォルトのストレージクラスの変更は、アドオンのバージョン2.0以降でのみ可能です。
- デフォルトのストレージ・クラスは、プリインストールされたFile Storage for VPC クラスか、独自のカスタム・ストレージ・クラスのいずれかに設定できます。 カスタム・ストレージ・クラスを使用している場合は、プロビジョナーが
vpc.file.csi.ibm.ioに設定されていることを確認してください。 - クラスタ内で複数のストレージ・クラスがデフォルトとして設定されている場合、デフォルトのストレージ・クラスのいずれかが使用される可能性があります。 ベスト・プラクティスとして、また正しいストレージ・クラスが使用されるように、新しいデフォルト・クラスを設定する前に、クラスタ内の既存のデフォルト・ストレージ・クラスをすべて削除してください。 VPC ブロックストレージ・アドオンもインストールされている場合、VPC ブロックストレージ・クラスがすでにデフォルトとして設定されている可能性があります。 新しいデフォルトを設定する前にこれを削除するには、「 VPC ブロックストレージのデフォルトのストレージクラスの変更 」を参照してください。
-
addon-vpc-file-csi-driver-configmapconfigmapを編集し、SET_DEFAULT_STORAGE_CLASSパラメータにストレージクラス名を指定します。oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system出力例
SET_DEFAULT_STORAGE_CLASS: "ibmc-vpc-file-eit" -
file-csi-driver-statusconfigmapを記述して、デフォルトが正しく設定されていることを確認してください。oc describe cm file-csi-driver-status -n kube-system出力例。
events: ---- - event: EnableVPCFileCSIDriver description: 'VPC File CSI Driver enable successful, DriverVersion: v2.0.6' timestamp: "2024-09-20 12:01:02" - event: Change default storage class request description: Successfully set 'ibmc-vpc-file-eit' as default storage class timestamp: "2024-09-20 12:01:36"
非 root として実行されるアプリのデプロイ
ストレージクラスの uid および gid パラメータは、インフラストラクチャレベルでファイル共有の初期ユーザーおよびグループ識別子を設定します。 VPC ファイルストレージにおける補助 ID の仕組みに関する背景情報については、「 VPC ファイル共有の補助 ID 」を参照してください。
-
独自のストレージ・クラスを作成し、アプリに使用するグループ ID またはユーザー ID を指定します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-file-custom-sc labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver provisioner: vpc.file.csi.ibm.io mountOptions: - hard - nfsvers=4.1 - sec=sys parameters: profile: "dp2" iops: "100" billingType: "hourly" # hourly or monthly encrypted: "false" uid: "3000" # The initial user identifier for the file share. gid: "1000" # The initial group identifier for the file share. classVersion: "1" reclaimPolicy: "Delete" allowVolumeExpansion: true -
以下の YAML を
my-pvc.yamlというファイルに保存します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: ibmc-vpc-file-custom-sc -
PVC を作成します。
oc apply -f my-pvc.yaml -
PVC をマウントするポッドを作成します。
apiVersion: v1 kind: Pod metadata: name: security-context-demo spec: securityContext: runAsUser: 3000 runAsGroup: 1000 volumes: - name: sec-ctx-vol persistentVolumeClaim: claimName: my-pvc containers: - name: sec-ctx-demo image: busybox:1.28 command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: sec-ctx-vol mountPath: /data/demo securityContext: allowPrivilegeEscalation: false -
ポッドが実行中であることを確認してください。
oc get pods
KMS暗号File Storage for VPCの設定
IBM® Key Protect や Hyper Protect Crypto Services などのキー管理サービス(KMS)プロバイダーを利用して、 File Storage for VPC インスタンスで、ストレージへの書き込み時にデータを暗号化するために使用するプライベートルートキーを作成します。 秘密のルートキーを作成したら、そのルートキーを使用して独自のストレージクラスまたは Kubernetes のシークレットを作成し、そのストレージクラスまたはシークレットを使用して File Storage for VPC インスタンスをプロビジョニングしてください。
-
使用するKMSプロバイダーのインスタンスを作成します。
-
KMSインスタンスにルートキーを作成します。
- Key Protect ルート鍵。
- Hyper Protect Crypto Services ルート鍵。 デフォルトでは、ルート・キーは有効期限なしで作成されます。
-
顧客管理型暗号化の前提条件を 完了し、 IBM® Key Protect へのアクセスを File Storage for VPC に許可する。 必ず与えてくださいFile Storage for VPC少なくとも
ReaderKMS インスタンスへのアクセス。 -
カスタム・ストレージ・クラスを作成し、KMSの詳細を指定します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: custom-sc-encrypted labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver provisioner: vpc.file.csi.ibm.io mountOptions: - hard - nfsvers=4.1 - sec=sys parameters: profile: "dp2" billingType: "hourly" # hourly or monthly encrypted: "true" encryptionKey: "" # Specify the root key CRN. resourceGroup: "" # Resource group ID. By default, the resource group of the cluster will be used from storage-secrete-store secret. isENIEnabled: "true" # VPC File Share VNI feature will be used by all PVCs created with this storage class. securityGroupIDs: "" # By default cluster security group i.e kube-<clusterID> will be used. User can provide their own comma separated SGs. subnetID: "" # User can provide subnetID in which the VNI will be created. Zone and region are mandatory for this. If not provided CSI driver will use the subnetID available in the cluster's VPC zone. region: "" # VPC CSI driver will select a region from cluster node's topology. The user can override this default. zone: "" # VPC CSI driver will select a region from cluster node's topology. The user can override this default. primaryIPID: "" # Existing ID of reserved IP from the same subnet as the file share zone. Zone and region are mandatory for this. SubnetID is not mandatory for this. primaryIPAddress: "" # IPAddress for VNI to be created in the subnet of the zone. Zone, region and subnetID are mandatory for this. tags: "" # User can add a list of tags "a, b, c" that will be used at the time of provisioning file share, by default CSI driver has its own tags. uid: "0" # The initial user identifier for the file share, by default its root. gid: "0" # The initial group identifier for the file share, by default its root. classVersion: "1" reclaimPolicy: "Delete" allowVolumeExpansion: true -
ストレージ・クラスを作成します。
oc apply -f encrypted-class.yaml -
以下の YAML を
my-pvc.yamlというファイルに保存します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: custom-sc-encrypted -
PVC を作成します。
oc apply -f my-pvc.yaml -
以下のデプロイメント構成を
deployment.yamlというファイルに保存し、前のステップで作成した PVC を参照します。apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-deployment spec: selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: containers: - name: busybox image: busybox:1.28 command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: my-vol mountPath: /data/demo # Mount path for the application. volumes: - name: my-vol persistentVolumeClaim: claimName: my-pvc # Your PVC name.volumeMounts.mountPath- containers の volumeMounts セクションに、コンテナー内部でボリュームをマウントするディレクトリーの絶対パスを入力します。 マウントパスに書き込まれたデータは、物理的な File Storage for VPC インスタンス内の
rootディレクトリに保存されます。 異なるアプリ間でボリュームを共有したい場合は、各アプリごとに ボリュームのサブパスを指定することができます。 volumeMounts.name- containers の volumeMounts セクションで、ポッドにマウントするボリュームの名前を入力します。
volume.name- volumes セクションで、ポッドにマウントするボリュームの名前を入力します。 通常、この名前は
volumeMounts.nameと同じです。
-
デプロイメントを作成します。
oc apply -f deployment.yaml
転送中の暗号化 (EIT) の設定
File Storage for VPC で転送中の暗号化を設定するには、 「 IBM Cloud File Storage for VPC の転送中の暗号化」を 参照してください。 このトピックでは、ゾーン単位のファイル共有(dp2 プロファイル)と地域単位のファイル共有(rfs プロファイル、ベータ版)の両方について扱っています。
コンテナのリソース要求値と上限値の更新
File Storage for VPC アドオンで実行されるコンテナについて、CPUおよびメモリのリソース要求値と上限値をカスタマイズできます。 これらの値を調整することで、大規模なクラスタやリソースに制約のある環境において、パフォーマンスを最適化することができます。
パラメータの命名規則は、 <ContainerName>CPULimit、 <ContainerName>CPURequest、 <ContainerName>MemoryLimit、および <ContainerName>MemoryRequest の形式に従います。 これらをコントローラーおよびノードサーバーのコンテナに適用してください。
-
addon-vpc-file-csi-driver-configmapのコンフィグマップを編集し、調整したいコンテナのリソースパラメータを追加します。 次の例では、コントローラおよびノードサーバーのコンテナに対して、CPU およびメモリの値を設定しています。oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system値の例:
controllerCPULimit: "200m" controllerCPURequest: "100m" controllerMemoryLimit: "256Mi" controllerMemoryRequest: "128Mi" nodeServerCPULimit: "200m" nodeServerCPURequest: "100m" nodeServerMemoryLimit: "256Mi" nodeServerMemoryRequest: "128Mi" -
file-csi-driver-statusのconfigmapを記述し、リソースの変更が正常に適用されたことを確認してください。 「events」のセクションで、「Successfully set container resources」のイベントを探してみてください。oc describe cm file-csi-driver-status -n kube-system出力例:
events: ---- - description: Successfully set container resources event: Change container resources timestamp: "2026-06-26 08:32:05"
ワーカー・プール、ゾーン、またはワーカー・ノードによるファイル共有アクセスの制限
File Storage for VPC クラスター・アドオンのデフォルトの動作では、すべてのノード上のポッドがファイル共有にアクセスできます。 ポッドがファイル共有にアクセスする方法をより細かく制御することもできます。 例えば、ファイル共有アクセスを、特定のゾーンの特定のノード上の特定のワーカー・プール上のポッドのみに制限することができます。 ファイル共有へのポッド・アクセスを構成する方法については、以下のシナリオを確認してください。
PVCが作成されると、PVCごとに1つのファイル共有ターゲットが作成され、ゾーン内のそのサブネットに1つのVNI IPが予約される。 つまり、VPC ファイル・ストレージの PVC の最大数は、そのサブネット上の使用可能な IP アドレスによって異なります。
以下の VNI 機能を使用してファイル共有へのポッド・アクセスを制限すると、アプリの可用性が高くない可能性があります。
開始前に
ノード、ゾーン、またはリソース・グループごとにファイル共有アクセスを制限するには、最初にカスタム VPC セキュリティー・グループを作成する必要があります。
-
クラスターをリストし、ファイル・ストレージをデプロイするクラスター ID をメモします。
ibmcloud ks cluster ls -
労働者プールの詳細を入手する。
ibmcloud ks worker-pool ls --cluster CLUSTER -
サブネットの詳細を取得する。
ibmcloud ks worker-pool get WORKER_POOL --cluster CLUSTER | grep -A 3 Subnets -
サブネットのCIDRを取得する。 各サブネットについて、この手順を繰り返してください。 このCIDR範囲は後で使用する。
ibmcloud is subnet SUBNET_ID | grep "IPv4 CIDR" -
セキュリティー・グループをリストし、クラスターの ID
kube-<clusterID>セキュリティー・グループをメモします。 後でセキュリティー・グループ・ルールを追加するときに、セキュリティー・グループ ID が必要になります。ibmcloud is sg出力例
ID Name Rules Targets VPC Resource group r006-4aaec88f-4986-4b7c-a737-401f7fef1555 kube-clusterID 15 0 my-vpc default -
クラスターと同じ VPC にカスタム・セキュリティー・グループを作成します。 このセキュリティー・グループを使用して、セキュリティー・グループ・ルールを追加することにより、ファイル共有へのアクセスを制御できます。
ibmcloud is security-group-create my-custom-security-group VPC-ID -
独自のストレージ・クラスを作成 し、前に作成したカスタム・セキュリティー・グループの ID を入力します。 このストレージ・クラスから作成されたすべての PVC は、カスタム・セキュリティー・グループ内にあります。
-
独自のストレージクラスを使用するPVCを作成します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-custom-vni spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: "" # For example: my-custom-storage-class -
PV が PVC にバインドされたら、PV の詳細を取得し、
nfsServerPath値をメモして VNI IP アドレスを見つけます。kubectl get pv pvc-XXXX -o yaml | grep nfsServerPath出力例
nfsServerPath: XXX.XX.XX.XXX:/XX # VNI IP address
1 つのワーカー・ノード上のポッドへのファイル共有アクセスの制限
-
前提条件を満たして いることを確認してください。
-
前に作成したカスタム・セキュリティー・グループに以下のルールを追加します。
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.20 # Worker node IP -
「
kube-clusterID」セキュリティグループに、以下のルールを追加してください。ibmcloud is sg-rulec kube-<cluster-id> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.10 # VNI IP -
PVC を使用するデプロイメントを作成します。 作成したルールに一致するワーカー・ノードにデプロイされたポッドのみが、PVC をマウントまたは使用できます。 他のノードにデプロイされたポッドは、コンテナーの
creating状態のままになります。
単一ゾーン内のワーカー・ノード上のポッドへのファイル共有アクセスの制限
-
前提条件を満たして いることを確認してください。
-
前に作成したカスタム・セキュリティー・グループに以下のルールを追加します。
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.0/24 # zone subnet cidr range -
「
kube-clusterID」セキュリティグループに、以下のルールを追加してください。 仮想ネットワーク・インターフェース (VNI) の IP アドレスを指定します。ibmcloud is sg-rulec kube-<cluster-ID> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.10 # VNI IP -
PVC を使用するデプロイメントを作成します。 PVC をマウントできるのは、前のルールにリストされているゾーンにデプロイされているポッドのみです。 他のゾーンにデプロイされたポッドは PVC にアクセスできず、コンテナー
creating状態のままになります。
単一ワーカー・プール内のワーカー・ノード上のポッドへのファイル共有アクセスの制限
-
前提条件を満たして いることを確認してください。
-
各ワーカー プールのサブネット範囲に対して受信ルールを作成します。
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.0/24 # zone 1 subnet cidr range ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.1.0/24 # zone 2 subnet cidr range -
「
kube-clusterID」セキュリティグループに、以下のルールを追加してください。 仮想ネットワーク・インターフェース (VNI) の IP アドレスをリモートまたはソースとして指定します。ibmcloud is sg-rulec kube-<cluster-ID> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.10 # VNI IP -
先ほど作成したPVCを使用するアプリをデプロイします。 前のルールで示されたワーカー・プール上のポッドのみが PVC をマウントできます。 あるいは、デーモン・セットにアプリをデプロイした場合、ポッドは、セキュリティー・グループ・ルールを作成したワーカー・ノードにのみ正常にデプロイされます。 指定されたワーカー・プール内にないワーカー・プール上のポッドは、
MountVolume.SetUp failed for volume "pvc-184b8c92-33ea-4874-b2ac-17665e53c060" : rpc error: code = DeadlineExceeded desc = context deadline exceededエラーで失敗します。
複数のワーカー・プール内のワーカー・ノード上のポッドへのファイル共有アクセスの制限
-
前提条件を満たして いることを確認してください。
-
カスタムセキュリティグループに、以下のルールを追加してください。 ワーカー・プールとサブネット CIDR 範囲をリモートまたはソースとして指定します。
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.1.0/24 # worker pool 1, zone 1 subnet CIDR range ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.1.0/24 # worker pool 1, zone 2 subnet CIDR range ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.241.0.0/24 # worker pool 2, zone 1 subnet CIDR range ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.241.1.0/24 # worker pool 2, zone 2subnet CIDR range -
「
kube-<clusterID>」セキュリティグループに、以下のルールを追加してください。 仮想ネットワーク・インターフェース (VNI) の IP アドレスをリモートまたはソースとして指定します。ibmcloud is sg-rulec kube-<clusterID> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.1.7 # VNI-IP -
PVC を使用するデプロイメントを作成します。 PVC をマウントできるのは、ルールに示されているゾーンにデプロイされているポッドのみです。 制限付きワーカー・ノードにデプロイされたポッドは、コンテナーの
creating状態のままになります。