Block Storage for VPC クラスター・アドオンを使用したスナップショットのセットアップ
仮想プライベートクラウド
Block Storage for VPC ボリュームスナップショットは、完全に新しいボリュームを作成することなく、特定の時点におけるボリュームの内容をコピーするための標準化された方法を提供します。 スナップショットの詳細については、 スナップショットの仕組みを 参照してください。 Block Storage for VPC について詳しくは、Block Storage for VPC についてを参照してください。
デフォルトでは、 Block Storage for VPC クラスタアドオンは、クラスタがデプロイされるのと同じ VPC リソースグループにボリュームとスナップショットを作成します。 ただし、アドオンのバージョン 5.2.46 以降では、 VolumeSnapshotClass に resourceGroup パラメータを指定することで、別のリソースグループにスナップショットを作成できます。 詳しくは、 別のリソースグループにスナップショットを作成するを 参照してください。
アプリの作成
永続ボリューム要求 (PVC) の例を作成し、その要求を参照するポッドをデプロイします。
-
アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
アドオンの状態が
normalであり、状況がReadyであることを確認します。ibmcloud oc cluster addon ls --cluster CLUSTER-IDName Version Health State Health Status vpc-block-csi-driver 5.2 normal Addon Ready. For more info: http://ibm.biz/addon-state (H1500) -
ドライバー・ポッドがデプロイされ、状況が
Runningになっていることを確認します。oc get pods -n kube-system | grep vpc-block-csi出力例
ibm-vpc-block-csi-controller-0 7/7 Running 0 77s ibm-vpc-block-csi-node-56c85 4/4 Running 0 77s ibm-vpc-block-csi-node-87j2t 4/4 Running 0 77s ibm-vpc-block-csi-node-cmh2h 4/4 Running 0 77s -
PVCを作成する。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-block-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ibmc-vpc-block-5iops-tieroc create -f pvc.yaml -
PVC が作成され、
Bound状態であることを確認します。oc get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE csi-block-pvc Bound pvc-0798b499-0b61-4f57-a184-4caeb7b9298d 10Gi RWO ibmc-vpc-block-5iops-tier 4m22s -
作成したPVCをマウントするデプロイメント用のYAML設定ファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-deployment spec: replicas: 1 selector: matchLabels: app: my-deployment template: metadata: labels: app: my-deployment spec: containers: - image: nginx # Your containerized app image name: container-name volumeMounts: - mountPath: /myvolumepath # Mount path for PVC name: my-vol # Volume mount name volumes: - name: my-vol # Volume resource name persistentVolumeClaim: claimName: csi-block-pvc # The name of the PVC you created earlieroc create -f pod.yaml -
クラスタ内でポッドが動作していることを確認します。
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
ポッドを作成したので、ポッドにログインし、スナップショットに使用するテキスト・ファイルを作成します。
oc exec -it POD_NAME /bin/bash出力例
root@my-deployment-58dd7c89b6-8zdcl:/# cd myvolumepath/ root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# echo "hi" > new.txt root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# exit
ボリューム・スナップショットの作成
デプロイメントと PVC を作成した後、ボリューム・スナップショット・リソースを作成できます。
スナップショットを作成できるのは、ボリュームがポッドにアタッチされているときだけです。
-
IAMで Share Snapshot Operator 権限を持っていることを確認します。
-
アドオンを有効にしたときにデプロイされた
ibmc-vpcblock-snapshotスナップショット・クラスを使用して、クラスター内にボリューム・スナップショット・リソースを作成します。 以下のVolumeSnapshotコンフィギュレーションをsnapvol.yamlというファイルに保存する。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-csi-block-pvc spec: volumeSnapshotClassName: ibmc-vpcblock-snapshot source: persistentVolumeClaimName: csi-block-pvcoc create -f snapvol.yaml -
スナップショットを使用する準備ができていることを確認します。
oc get volumesnapshotsREADYTOUSEがtrueの場合の出力例:NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE snapshot-csi-block-pvc true csi-block-pvc 1Gi ibmc-vpcblock-snapshot snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b 18h 18h
別のリソースグループにスナップショットを作成する
Block Storage for VPC クラスタ アドオン バージョン 5.2.46 以降では、クラスタのリソース グループとは異なるリソース グループにボリューム スナップショットを作成できます。 この機能により、リソースの編成、クォータ管理、アクセス制御の柔軟性が高まります。
- バージョン要件 :この機能は、アドオンバージョン 5.2.46 以降でのみサポートされます。
- デフォルトの動作 :デフォルトの動作:
resourceGroupパラメータを指定しない場合、または空の文字列を指定した場合、スナップショットはクラスタのリソース・グループに作成されます。
前提条件
始める前に、IAMで以下のパーミッションがあることを確認してください:
- VPCインフラサービス(です) :編集・ライター
- Kubernetes Service (コンテナ-kubernetes) :オペレーター
- リソースグループ :スナップショットを作成するリソースグループごとのビューア
カスタムの作成 VolumeSnapshotClass
別のリソースグループにスナップショットを作成するには、対象のリソースグループIDを指定するカスタム VolumeSnapshotClass。
-
スナップショットを作成するリソースグループIDを取得します。
ibmcloud resource groups -
VolumeSnapshotClass設定ファイルを作成する。 以下のYAMLをvpc-snap-custom-rg.yamlというファイルに保存する。<RESOURCE_GROUP_ID>、対象のリソースグループIDに置き換えてください。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: vpc-snap-custom-rg driver: vpc.block.csi.ibm.io deletionPolicy: Delete parameters: resourceGroup: <RESOURCE_GROUP_ID>resourceGroupパラメーターは、リソースグループ名ではなく、リソースグループIDでなければならない。 -
クラスタに
VolumeSnapshotClass。oc create -f vpc-snap-custom-rg.yaml -
VolumeSnapshotClassが作成されていることを確認する。oc get volumesnapshotclass
カスタムリソースグループによるスナップショットの作成
カスタム VolumeSnapshotClass を作成したら、それを参照するスナップショットを作成できます。
-
カスタム・スナップショット・クラスを参照する
VolumeSnapshot設定ファイルを作成します。 以下のYAMLをsnapshot-custom-rg.yamlというファイルに保存する。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-custom-rg spec: volumeSnapshotClassName: vpc-snap-custom-rg source: persistentVolumeClaimName: csi-block-pvc -
スナップショットを作成します。
oc create -f snapshot-custom-rg.yaml -
スナップショットを使用する準備ができていることを確認します。
oc get volumesnapshots -
IBM Cloud CLIを使用して、スナップショットがターゲットリソースグループに作成されたことを確認します。
ibmcloud target -g <RESOURCE_GROUP_NAME> ibmcloud is snapshots
ボリューム・スナップショットからの復元
スナップショット・リソースをデプロイした後、スナップショットを使用してデータを新規ボリュームにリストアできます。 PVC を作成すると、スナップショット・データを持つ新規ボリュームが動的にプロビジョンされます。
-
ボリューム・スナップショットを参照する 2 つ目の PVC を作成します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restore-pvc spec: storageClassName: ibmc-vpc-block-5iops-tier dataSource: name: snapshot-csi-block-pvc kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 10Gi -
PVC が作成され、
Bound状態であることを確認します。oc get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE restore-pvc Bound pvc-4ede7630-5a49-4bae-b34d-dc528acfb884 10Gi RWO ibmc-vpc-block-5iops-tier 18h -
作成したPVCをマウントするデプロイメント用の2つ目のYAML設定ファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: podtwo labels: app: podtwo spec: replicas: 1 selector: matchLabels: app: podtwo template: metadata: labels: app: podtwo spec: containers: - image: nginx # Your containerized app image name: container-name volumeMounts: - mountPath: /myvolumepath # Mount path for pvc from container name: my-vol # Volume mount name volumes: - name: my-vol # Volume resource name persistentVolumeClaim: claimName: restore-pvc # The name of the PVC that you created earlieroc create -f podtwo.yaml -
ポッドが作成されたことを確認します。
oc get podsNAME READY STATUS RESTARTS AGE POD_NAME 1/1 Running 0 30m POD2_NAME 1/1 Running 0 46h -
新しく作成したポッドにログインし、前に作成したサンプル・テキスト・ファイルが新しいポッドに保存されていることを確認します。
oc exec -it POD_NAME /bin/bash root@POD_NAME :/# cd myvolumepath/ root@POD_NAME :/myvolumepath# ls lost+found new.txt root@POD_NAME :/myvolumepath# cat new.txt出力例
hi
スナップショットをオフにする
デフォルトでは、 Block Storage for VPCを使用すると、スナップショット機能が有効になります。 IsSnapshotEnabled を false に変更することにより、 kube-system 名前空間の configmap addon-vpc-block-csi-driver-configmap でこの機能をオフにすることができます。 構成マップでこの変更が行われると、作成されたすべてのスナップショットが失敗し、CreateSnapshot functionality is disabled というメッセージが表示されることに注意してください。
-
クラスターの現在の構成マップをローカル・マシンに保存します。
oc get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml -
IsSnapshotEnabledパラメーターをfalseに編集します。 -
ファイルを保存し、変更を適用する。
oc apply -f snapshotconfigmap.yaml
次のステップ
スナップショット検証 Webhook をデプロイして、ユーザー入力を検証します。 詳しくは、 スナップショット検証 Web フックのデプロイを参照してください。
スナップショットのトラブルシューティング
以下のトラブルシューティングのトピックを確認してください。