この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

Kubernetes StatefulSetのボリュームを復元する

Longhornはバックアップの復元をサポートしており、この機能の使用例の一つは、Kubernetes StatefulSetで使用するデータを復元することです。これは、バックアップされた各レプリカのボリュームを復元する必要があります。

復元するには、以下の手順に従ってください。以下の例では、各Podに1つのボリュームが接続され、2つのレプリカを持つStatefulSetを使用しています。

  1. ウェブブラウザで`Longhorn UI`ページに接続します。「Backup」タブで、StatefulSetボリュームの名前を選択します。ボリュームエントリのドロップダウンメニューをクリックし、復元を実行します。後で`Persistent Volumes`で簡単に参照できるような名前をボリュームに付けてください。

    • 復元が必要な各ボリュームについてこの手順を繰り返します。

    • 例えば、各レプリカにそれぞれ`pvc-01a`と`pvc-02b`というボリュームが割り当てられている2レプリカのStatefulSetを復元する場合、復元の方法は次のようになります:

    バックアップ名 復元されたボリューム

    pvc-01a

    statefulset-vol-0

    pvc-02b

    statefulset-vol-1

  2. Kubernetesで、作成された各Longhornボリュームのために`Persistent Volume`を作成します。後で`Persistent Volume Claims`で簡単に参照できるような名前をボリュームに付けてください。storage`の容量、`numberOfReplicasstorageClassName、`volumeHandle`は、以下で置き換えてください。この例では、Longhornで`statefulset-vol-0`と`statefulset-vol-1`を参照し、`longhorn`を私たちの`storageClassName`として使用しています。

     apiVersion: v1
     kind: PersistentVolume
     metadata:
       name: statefulset-vol-0
     spec:
       capacity:
         storage: <size> # must match size of Longhorn volume
       volumeMode: Filesystem
       accessModes:
         - ReadWriteOnce
       persistentVolumeReclaimPolicy: Delete
       csi:
         driver: driver.longhorn.io # driver must match this
         fsType: ext4
         volumeAttributes:
           numberOfReplicas: <replicas> # must match Longhorn volume value
           staleReplicaTimeout: '30' # in minutes
         volumeHandle: statefulset-vol-0 # must match volume name from Longhorn
       storageClassName: longhorn # must be same name that we will use later
     ---
     apiVersion: v1
     kind: PersistentVolume
     metadata:
       name: statefulset-vol-1
     spec:
       capacity:
         storage: <size>  # must match size of Longhorn volume
       volumeMode: Filesystem
       accessModes:
         - ReadWriteOnce
       persistentVolumeReclaimPolicy: Delete
       csi:
         driver: driver.longhorn.io # driver must match this
         fsType: ext4
         volumeAttributes:
           numberOfReplicas: <replicas> # must match Longhorn volume value
           staleReplicaTimeout: '30'
         volumeHandle: statefulset-vol-1 # must match volume name from Longhorn
       storageClassName: longhorn # must be same name that we will use later

    暗号化されたボリュームを使用している場合、`PersistentVolume`を作成する際に、`nodePublishSecretRef`と`nodeStageSecretRef`を指定する必要があります。

    kind: PersistentVolume
    metadata:
      name: statefulset-encrypted-vol-0
    spec:
      capacity:
        storage: <size>
        volumeMode: Filesystem
        accessModes:
          - ReadWriteOnce
        persistentVolumeReclaimPolicy: Delete
        csi:
          driver: driver.longhorn.io
          fsType: ext4
          nodePublishSecretRef:
            name: <secret-name>
            namespace: <namespace>
          nodeStageSecretRef:
            name: <secret-name>
            namespace: <namespace>
          volumeAttributes:
            numberOfReplicas: <replicas>
            staleReplicaTimeout: "30"
          volumeHandle: statefulset-encrypted-vol-0
        storageClassName: longhorn
  3. `namespace`がデプロイされる`StatefulSet`で、各`Persistent Volume`ごとにPersistentVolume Claim for each を作成します。`Persistent Volume Claim`の名前は、この命名規則に従う必要があります:

     <name of Volume Claim Template>-<name of StatefulSet>-<index>

    StatefulSetポッドはゼロインデックスです。この例では、ボリュームクレームテンプレート`の名前は+`data`で、`StatefulSet+の名前は`webapp`であり、インデックス`0`と`1`の2つのレプリカがあります。

     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: data-webapp-0
     spec:
       accessModes:
       - ReadWriteOnce
       resources:
         requests:
           storage: 2Gi # must match size from earlier
       storageClassName: longhorn # must match name from earlier
       volumeName: statefulset-vol-0 # must reference Persistent Volume
     ---
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: data-webapp-1
     spec:
       accessModes:
       - ReadWriteOnce
       resources:
         requests:
           storage: 2Gi # must match size from earlier
       storageClassName: longhorn # must match name from earlier
       volumeName: statefulset-vol-1 # must reference Persistent Volume
  4. `StatefulSet`を作成してください:

     apiVersion: apps/v1beta2
     kind: StatefulSet
     metadata:
       name: webapp # match this with the PersistentVolumeClaim naming scheme
     spec:
       selector:
         matchLabels:
           app: nginx # has to match .spec.template.metadata.labels
       serviceName: "nginx"
       replicas: 2 # by default is 1
       template:
         metadata:
           labels:
             app: nginx # has to match .spec.selector.matchLabels
         spec:
           terminationGracePeriodSeconds: 10
           containers:
           - name: nginx
             image: registry.k8s.io/nginx-slim:0.8
             ports:
             - containerPort: 80
               name: web
             volumeMounts:
             - name: data
               mountPath: /usr/share/nginx/html
       volumeClaimTemplates:
       - metadata:
           name: data # match this with the PersistentVolumeClaim naming scheme
         spec:
           accessModes: [ "ReadWriteOnce" ]
           storageClassName: longhorn # must match name from earlier
           resources:
             requests:
               storage: 2Gi # must match size from earlier

*結果:*復元されたデータは、`StatefulSet``Pods`の内部からアクセスできるようになっているはずです。