# (kubectl) Creating a PV from an Existing OBS Bucket

#### Scenario

CCE allows you to use an existing OBS bucket to create a PersistentVolume (PV). You can create a PersistentVolumeClaim (PVC) and bind it to the PV.

#### Prerequisites

- You have created a CCE cluster and installed the FlexVolume plug-in (storage-driver) in the cluster.
- The AK/SK has been uploaded. For details, see Preparations.

#### Notes and Constraints

The following configuration example applies to clusters of Kubernetes 1.13 or earlier.

#### Procedure

1. Log in to the OBS console, create an OBS bucket, and record the bucket name and storage class.
2. Use kubectl to connect to the cluster. For details, see Connecting to a Cluster Using kubectl.
3. Create two YAML files for creating the PV and PVC. Assume that the file names are pv-obs-example.yaml and pvc-obs-example.yaml.

   touch pv-obs-example.yaml pvc-obs-example.yaml

   Kubernetes Version | Description | YAML Example
   --- | --- | ---
   1.11 ≤ K8s version ≤ 1.13 | Clusters from v1.11 to v1.13 | Example YAML
   K8s version = 1.9 | Clusters of v1.9 | Example YAML

   Clusters from v1.11 to v1.13

   - Example YAML file for the PV:

         apiVersion: v1
         kind: PersistentVolume
         metadata:
           name: pv-obs-example
           annotations:
             pv.kubernetes.io/provisioned-by: flexvolume-huawei.com/fuxiobs
         spec:
           accessModes:
           - ReadWriteMany
           capacity:
             storage: 1Gi
           claimRef:
             apiVersion: v1
             kind: PersistentVolumeClaim
             name: pvc-obs-example
             namespace: default
           flexVolume:
             driver: huawei.com/fuxiobs
             fsType: obs
             options:
               fsType: obs
               region: eu-de
               storage_class: STANDARD
               volumeID: test-obs
           persistentVolumeReclaimPolicy: Delete
           storageClassName: obs-standard

     Table 1 Key parameters
     Parameter | Description
     --- | ---
     driver | Storage driver used to mount the volume. Set the driver to huawei.com/fuxiobs for the OBS volume.
     storage_class | Storage class, including STANDARD (standard bucket) and STANDARD_IA (infrequent access bucket).
     region | For details about the value of region, see Regions and Endpoints.
     volumeID | OBS bucket name. To obtain the name, log in to the CCE console, choose Resource Management > Storage, click the PVC name in the OBS tab page, and copy the PV name on the PV Details tab page.
     storage | Storage capacity in the unit of Gi. The value is fixed at 1Gi.
     storageClassName | Storage class supported by OBS, including obs-standard (standard bucket) and obs-standard-ia (infrequent access bucket).
     spec.claimRef.apiVersion | The value is fixed at v1.
     spec.claimRef.kind | The value is fixed at PersistentVolumeClaim.
     spec.claimRef.name | The value is the same as the name of the PVC created in the next step.
     spec.claimRef.namespace | The value is the same as the namespace of the PVC created in the next step.

   - Example YAML file for the PVC:

         apiVersion: v1
         kind: PersistentVolumeClaim
         metadata:
           annotations:
             volume.beta.kubernetes.io/storage-class: obs-standard
             volume.beta.kubernetes.io/storage-provisioner: flexvolume-huawei.com/fuxiobs
           name: pvc-obs-example
           namespace: default
         spec:
           accessModes:
           - ReadWriteMany
           resources:
             requests:
               storage: 1Gi
           volumeName: pv-obs-example

     Table 2 Key parameters
     Parameter | Description
     --- | ---
     volume.beta.kubernetes.io/storage-class | Storage class supported by OBS, including obs-standard and obs-standard-ia.
     volume.beta.kubernetes.io/storage-provisioner | Must be set to flexvolume-huawei.com/fuxiobs.
     volumeName | Name of the PV.
     storage | Storage capacity in the unit of Gi. The value is fixed at 1Gi.

   Clusters of v1.9

   - Example YAML file for the PV:

         apiVersion: v1
         kind: PersistentVolume
         metadata:
           name: pv-obs-example
           namespace: default
         spec:
           accessModes:
           - ReadWriteMany
           capacity:
             storage: 1Gi
           flexVolume:
             driver: huawei.com/fuxiobs
             fsType: obs
             options:
               fsType: obs
               kubernetes.io/namespace: default
               region: eu-de
               storage_class: STANDARD
               volumeID: test-obs
           persistentVolumeReclaimPolicy: Delete
           storageClassName: obs-standard

     Table 3 Key parameters
     Parameter | Description
     --- | ---
     driver | Storage driver used to mount the volume. Set the driver to huawei.com/fuxiobs for the OBS volume.
     storage_class | Storage class, including STANDARD (standard bucket) and STANDARD_IA (infrequent access bucket).
     region | For details about the value of region, see Regions and Endpoints.
     volumeID | OBS bucket name. To obtain the name, log in to the CCE console, choose Resource Management > Storage, click the PVC name in the OBS tab page, and copy the PV name on the PV Details tab page.
     storage | Storage capacity in the unit of Gi. The value is fixed at 1Gi.
     storageClassName | Storage class supported by OBS, including obs-standard (standard bucket) and obs-standard-ia (infrequent access bucket).

   - Example YAML file for the PVC:

         apiVersion: v1
         kind: PersistentVolumeClaim
         metadata:
           annotations:
             volume.beta.kubernetes.io/storage-class: obs-standard
             volume.beta.kubernetes.io/storage-provisioner: flexvolume-huawei.com/fuxiobs
           name: pvc-obs-example
           namespace: default
         spec:
           accessModes:
           - ReadWriteMany
           resources:
             requests:
               storage: 1Gi
           volumeName: pv-obs-example
           volumeNamespace: default

     Table 4 Key parameters
     Parameter | Description
     --- | ---
     volume.beta.kubernetes.io/storage-class | Storage class supported by OBS, including obs-standard and obs-standard-ia.
     volume.beta.kubernetes.io/storage-provisioner | Must be set to flexvolume-huawei.com/fuxiobs.
     volumeName | Name of the PV.
     storage | Storage capacity in the unit of Gi. The value is fixed at 1Gi.

4. Create the PV.

   kubectl create -f pv-obs-example.yaml

5. Create the PVC.

   kubectl create -f pvc-obs-example.yaml

Parent topic: Using OBS Buckets as Storage Volumes