yunify / qingstor-csi

neonsan csi plugin for kubernetes
Apache License 2.0
14 stars 13 forks source link

PVC clone: the size of underlying volume does not match the PVC #48

Open cumirror opened 3 years ago

cumirror commented 3 years ago

source pvc's size is 4Gi:

# kubectl get pvc -o wide -n test
NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE     VOLUMEMODE
ubuntu-tmpl               Bound    pvc-4c1174d0-acf4-49a6-b264-bbdd3ddf6209   4Gi        RWX            csi-neonsan    6d22h   Block

clone pvc's size is 6Gi:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: clone-of-ubuntu-tmpl
    namespace: test
spec:
  accessModes:
  - ReadWriteMany
  volumeMode: Block
  resources:
    requests:
      storage: 6Gi
  dataSource:
    kind: PersistentVolumeClaim
    name: ubuntu-tmpl

after clone, pvc info:

# kubectl get pvc -o wide -n test
NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE     VOLUMEMODE
clone-of-ubuntu-tmpl      Bound    pvc-27f06c3f-ea0b-47a8-b637-7adba49845ca   6Gi        RWX            csi-neonsan    19m     Block
ubuntu-tmpl               Bound    pvc-4c1174d0-acf4-49a6-b264-bbdd3ddf6209   4Gi        RWX            csi-neonsan    6d22h   Block

after clone, clone volume size is 4Gi not 6Gi:

# neonsan list_volume -pool kube -detail
+------------+------------------------------------------+-------------+------+---------+-----------+---------------+-------+---------+--------+------------------+-----------+---------------------+---------------------+
|     ID     |                   NAME                   |    SIZE     | POOL | RG NAME | REP COUNT | MIN REP COUNT | ROLE  | POLICY  | STATUS | VOLUME ALLOCATED | ENCRYPTED |     STATUS TIME     |    CREATED TIME     |
+------------+------------------------------------------+-------------+------+---------+-----------+---------------+-------+---------+--------+------------------+-----------+---------------------+---------------------+
| 1543503872 | pvc-27f06c3f-ea0b-47a8-b637-7adba49845ca |  4294967296 | kube | SSD0    |         1 |             1 | alone | default | OK     |       2617245696 | no        | 2020-11-26 15:22:08 | 2020-11-26 15:22:08 |
|  402653184 | pvc-4c1174d0-acf4-49a6-b264-bbdd3ddf6209 |  4294967296 | kube | SSD0    |         1 |             1 | alone | default | OK     |       2617245696 | no        | 2020-11-26 15:22:08 | 2020-11-19 17:04:25 |
+------------+------------------------------------------+-------------+------+---------+-----------+---------------+-------+---------+--------+------------------+-----------+---------------------+---------------------+

After cloning is complete, the size of underlying storage volume should be consistent with the requested PVC.

stoneshi-yunify commented 3 years ago

I have managed to resize the volume in call CreateVolume when it's a block volume, but this still has issue when it's a filesystem volume: the filesystem can not be resized in call CreateVolume, it should be done by kubelet calling the NodeExpandVolume, which I can not do that in the CSI driver code.

I have submitted a issue to community to address this issue https://github.com/kubernetes-csi/external-resizer/issues/131

And I also looked at other open source CSI drivers, they don't have a solution for such case either. For example, ceph. They will force user to specify an exact same size for the new PVC, otherwise an size mismatch error will be threw. After the clone volume done, user can expand the volume as usual. Maybe we should do that too, in that way we make sure the resize is on purpose and can be done successfully, for both block volume and filesystem volume.

stoneshi-yunify commented 3 years ago

This is a very general and popular problem, not only neonsan-csi, but also qingcloud-csi and many other csi drivers have this problem too. See the comments in https://github.com/kubernetes-csi/external-resizer/issues/131, a discussion is ongoing about this with the K8S SIG-STORAGE team and CSI SPEC team. Currently there is no conclusion/decision and ETA.

I will NOT fix this issue or change any code util the above discussion has a closure. We will keep current behaviour.

stoneshi-yunify commented 3 years ago

Please check latest csi spec and the progress of https://github.com/kubernetes-csi/external-resizer/issues/131. Regarding this issue, the decision is NOT allow cloning a volume to large size. User must start a new resize request after cloning done if expansion is needed.