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) の例を作成し、その要求を参照するポッドをデプロイします。

  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
    

    READYTOUSE が 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。

  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を使用すると、スナップショット機能が有効になります。 IsSnapshotEnabled を false に変更することにより、 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 フックのデプロイを参照してください。

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

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