rbd: add support for thick provisioning option

Add an option to the StorageClass to support creating fully allocated
(thick provisioned) RBD images

Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
Signed-off-by: Niels de Vos <ndevos@redhat.com>
This commit is contained in:
Madhu Rajanna 2020-11-09 14:37:47 +05:30 committed by mergify[bot]
parent 354f395aa1
commit c417a5d0ba
4 changed files with 15 additions and 0 deletions

View File

@ -63,6 +63,7 @@ make image-cephcsi
| `mounter` | no | if set to `rbd-nbd`, use `rbd-nbd` on nodes that have `rbd-nbd` and `nbd` kernel modules to map rbd images |
| `encrypted` | no | disabled by default, use `"true"` to enable LUKS encryption on PVC and `"false"` to disable it. **Do not change for existing storageclasses** |
| `encryptionKMSID` | no | required if encryption is enabled and a kms is used to store passphrases |
| `thickProvision` | no | if set to `"true"`, newly created RBD images will be completely allocated by writing zeros to it |
**NOTE:** An accompanying CSI configuration file, needs to be provided to the
running pods. Refer to [Creating CSI configuration](../examples/README.md#creating-csi-configuration)

View File

@ -29,6 +29,9 @@ parameters:
# eg: pool: rbdpool
pool: <rbd-pool-name>
# Set thickProvision to true if you want RBD images to be fully allocated on
# creation (thin provisioning is the default).
thickProvision: "false"
# (required) RBD image features, CSI creates image with image-format 2
# CSI RBD currently supports only `layering` feature.
imageFeatures: layering

View File

@ -19,6 +19,8 @@ package rbd
import (
"context"
"errors"
"fmt"
"strconv"
csicommon "github.com/ceph/ceph-csi/internal/csi-common"
"github.com/ceph/ceph-csi/internal/journal"
@ -116,6 +118,14 @@ func (cs *ControllerServer) parseVolCreateRequest(ctx context.Context, req *csi.
return nil, status.Error(codes.InvalidArgument, err.Error())
}
tp := "thickProvision"
thick := req.GetParameters()[tp]
if thick != "" {
if rbdVol.ThickProvision, err = strconv.ParseBool(thick); err != nil {
return nil, fmt.Errorf("failed to parse %q: %w", tp, err)
}
}
rbdVol.RequestName = req.GetName()
// Volume Size - Default is 1 GiB

View File

@ -98,6 +98,7 @@ type rbdVolume struct {
Encrypted bool
readOnly bool
Primary bool
ThickProvision bool
KMS util.EncryptionKMS
// Owner is the creator (tenant, Kubernetes Namespace) of the volume.
Owner string