Block Storage for VPC クラスター・アドオンを使用したスナップショットのセットアップ

仮想プライベートクラウド

Block Storage for VPC ボリュームスナップショットは、完全に新しいボリュームを作成することなく、特定の時点におけるボリュームの内容をコピーするための標準化された方法を提供します。 スナップショットの詳細については、 スナップショットの仕組みを 参照してください。 Block Storage for VPC について詳しくは、Block Storage for VPC についてを参照してください。

デフォルトでは、 Block Storage for VPC クラスタアドオンは、クラスタがデプロイされるのと同じ VPC リソースグループにボリュームとスナップショットを作成します。 ただし、アドオンのバージョン 5.2.46 以降では、 VolumeSnapshotClassresourceGroup パラメータを指定することで、別のリソースグループにスナップショットを作成できます。 詳しくは、 別のリソースグループにスナップショットを作成するを 参照してください。

アプリの作成

永続ボリューム要求 (PVC) の例を作成し、その要求を参照するポッドをデプロイします。

  1. アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  2. アドオンの状態が normal であり、状況が Ready であることを確認します。

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
    Name                   Version                     Health State   Health Status   
    vpc-block-csi-driver   5.2   normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)   
    
  3. ドライバー・ポッドがデプロイされ、状況が 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
    
  4. PVCを作成する。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-block-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: ibmc-vpc-block-5iops-tier
    
    oc create -f pvc.yaml
    
  5. PVC が作成され、 Bound 状態であることを確認します。

    oc get pvc
    
    NAME                   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
    
  6. 作成した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 earlier
    
    oc create -f pod.yaml
    
  7. クラスタ内でポッドが動作していることを確認します。

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. ポッドを作成したので、ポッドにログインし、スナップショットに使用するテキスト・ファイルを作成します。

    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 を作成した後、ボリューム・スナップショット・リソースを作成できます。

スナップショットを作成できるのは、ボリュームがポッドにアタッチされているときだけです。

  1. IAMで Share Snapshot Operator 権限を持っていることを確認します。

  2. アドオンを有効にしたときにデプロイされた 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-pvc
    
    oc create -f snapvol.yaml
    
  3. スナップショットを使用する準備ができていることを確認します。

    oc get volumesnapshots
    

    READYTOUSEtrue の場合の出力例:

    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

  1. スナップショットを作成するリソースグループIDを取得します。

    ibmcloud resource groups
    
  2. 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でなければならない。

  3. クラスタに VolumeSnapshotClass

    oc create -f vpc-snap-custom-rg.yaml
    
  4. VolumeSnapshotClass が作成されていることを確認する。

    oc get volumesnapshotclass
    

カスタムリソースグループによるスナップショットの作成

カスタム VolumeSnapshotClass を作成したら、それを参照するスナップショットを作成できます。

  1. カスタム・スナップショット・クラスを参照する 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
    
  2. スナップショットを作成します。

    oc create -f snapshot-custom-rg.yaml
    
  3. スナップショットを使用する準備ができていることを確認します。

    oc get volumesnapshots
    
  4. IBM Cloud CLIを使用して、スナップショットがターゲットリソースグループに作成されたことを確認します。

    ibmcloud target -g <RESOURCE_GROUP_NAME>
    ibmcloud is snapshots
    

ボリューム・スナップショットからの復元

スナップショット・リソースをデプロイした後、スナップショットを使用してデータを新規ボリュームにリストアできます。 PVC を作成すると、スナップショット・データを持つ新規ボリュームが動的にプロビジョンされます。

  1. ボリューム・スナップショットを参照する 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
    
  2. PVC が作成され、 Bound 状態であることを確認します。

    oc get pvc
    
    NAME                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    restore-pvc            Bound    pvc-4ede7630-5a49-4bae-b34d-dc528acfb884   10Gi       RWO            ibmc-vpc-block-5iops-tier   18h
    
  3. 作成した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 earlier
    
    oc create -f podtwo.yaml
    
  4. ポッドが作成されたことを確認します。

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    POD_NAME                      1/1     Running   0          30m
    POD2_NAME                     1/1     Running   0          46h
    
  5. 新しく作成したポッドにログインし、前に作成したサンプル・テキスト・ファイルが新しいポッドに保存されていることを確認します。

    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を使用すると、スナップショット機能が有効になります。 IsSnapshotEnabledfalse に変更することにより、 kube-system 名前空間の configmap addon-vpc-block-csi-driver-configmap でこの機能をオフにすることができます。 構成マップでこの変更が行われると、作成されたすべてのスナップショットが失敗し、CreateSnapshot functionality is disabled というメッセージが表示されることに注意してください。

  1. クラスターの現在の構成マップをローカル・マシンに保存します。

    oc get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. IsSnapshotEnabled パラメーターを false に編集します。

  3. ファイルを保存し、変更を適用する。

    oc apply -f snapshotconfigmap.yaml
    

次のステップ

スナップショット検証 Webhook をデプロイして、ユーザー入力を検証します。 詳しくは、 スナップショット検証 Web フックのデプロイを参照してください。

スナップショットのトラブルシューティング

以下のトラブルシューティングのトピックを確認してください。