mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-22 14:20:19 +00:00
rbd: add support for deep-flatten image feature
as deep-flatten is long supported in ceph and its enabled by default in the librbd, providing an option to enable it in cephcsi for the rbd images we are creating. Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
parent
eb40fbcb18
commit
fb3835691f
@ -279,10 +279,10 @@ storageClass:
|
|||||||
# eg: pool: replicapool
|
# eg: pool: replicapool
|
||||||
pool: replicapool
|
pool: replicapool
|
||||||
|
|
||||||
# (required) RBD image features, CSI creates image with image-format 2
|
# (required) RBD image features, CSI creates image with image-format 2 CSI
|
||||||
# CSI RBD currently supports `layering`, `journaling`, `exclusive-lock`,
|
# RBD currently supports `layering`, `journaling`, `exclusive-lock`,
|
||||||
# `object-map`, `fast-diff` features. If `journaling` is enabled, must
|
# `object-map`, `fast-diff`, `deep-flatten` features. If `journaling` is
|
||||||
# enable `exclusive-lock` too.
|
# enabled, must enable `exclusive-lock` too.
|
||||||
# imageFeatures: layering,journaling,exclusive-lock,object-map,fast-diff
|
# imageFeatures: layering,journaling,exclusive-lock,object-map,fast-diff
|
||||||
imageFeatures: "layering"
|
imageFeatures: "layering"
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ make image-cephcsi
|
|||||||
| `dataPool` | no | Ceph pool used for the data of the RBD images. |
|
| `dataPool` | no | Ceph pool used for the data of the RBD images. |
|
||||||
| `volumeNamePrefix` | no | Prefix to use for naming RBD images (defaults to `csi-vol-`). |
|
| `volumeNamePrefix` | no | Prefix to use for naming RBD images (defaults to `csi-vol-`). |
|
||||||
| `snapshotNamePrefix` | no | Prefix to use for naming RBD snapshot images (defaults to `csi-snap-`). |
|
| `snapshotNamePrefix` | no | Prefix to use for naming RBD snapshot images (defaults to `csi-snap-`). |
|
||||||
| `imageFeatures` | yes | RBD image features. CSI RBD currently supports `layering`, `journaling`, `exclusive-lock`, `object-map`, `fast-diff` features. If `journaling` is enabled, must enable `exclusive-lock` too. See [man pages](http://docs.ceph.com/docs/master/man/8/rbd/#cmdoption-rbd-image-feature) Note that the required support for [object-map and fast-diff were added in 5.3 and journaling does not have KRBD support yet](https://docs.ceph.com/en/latest/rbd/rbd-config-ref/#image-features). deep-flatten is added for cloned images. |
|
| `imageFeatures` | yes | RBD image features. CSI RBD currently supports `layering`, `journaling`, `exclusive-lock`, `object-map`, `fast-diff`, `deep-flatten` features. If `journaling` is enabled, must enable `exclusive-lock` too. See [man pages](http://docs.ceph.com/docs/master/man/8/rbd/#cmdoption-rbd-image-feature) Note that the required support for [object-map and fast-diff were added in 5.3, deep-flatten was added in 5.1 and journaling does not have KRBD support yet](https://docs.ceph.com/en/latest/rbd/rbd-config-ref/#image-features). deep-flatten is added for cloned images. |
|
||||||
| `tryOtherMounters` | no | Specifies whether to try other mounters in case if the current mounter fails to mount the rbd image for any reason |
|
| `tryOtherMounters` | no | Specifies whether to try other mounters in case if the current mounter fails to mount the rbd image for any reason |
|
||||||
| `mapOptions` | no | Map options to use when mapping rbd image. See [krbd](https://docs.ceph.com/docs/master/man/8/rbd/#kernel-rbd-krbd-options) and [nbd](https://docs.ceph.com/docs/master/man/8/rbd-nbd/#options) options. |
|
| `mapOptions` | no | Map options to use when mapping rbd image. See [krbd](https://docs.ceph.com/docs/master/man/8/rbd/#kernel-rbd-krbd-options) and [nbd](https://docs.ceph.com/docs/master/man/8/rbd-nbd/#options) options. |
|
||||||
| `unmapOptions` | no | Unmap options to use when unmapping rbd image. See [krbd](https://docs.ceph.com/docs/master/man/8/rbd/#kernel-rbd-krbd-options) and [nbd](https://docs.ceph.com/docs/master/man/8/rbd-nbd/#options) options. |
|
| `unmapOptions` | no | Unmap options to use when unmapping rbd image. See [krbd](https://docs.ceph.com/docs/master/man/8/rbd/#kernel-rbd-krbd-options) and [nbd](https://docs.ceph.com/docs/master/man/8/rbd-nbd/#options) options. |
|
||||||
|
57
e2e/rbd.go
57
e2e/rbd.go
@ -795,6 +795,63 @@ var _ = Describe("RBD", func() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
By("create PVC with layering,deep-flatten image-features and bind it to an app",
|
||||||
|
func() {
|
||||||
|
err := deleteResource(rbdExamplePath + "storageclass.yaml")
|
||||||
|
if err != nil {
|
||||||
|
e2elog.Failf("failed to delete storageclass: %v", err)
|
||||||
|
}
|
||||||
|
err = createRBDStorageClass(
|
||||||
|
f.ClientSet,
|
||||||
|
f,
|
||||||
|
defaultSCName,
|
||||||
|
nil,
|
||||||
|
map[string]string{
|
||||||
|
"imageFeatures": "layering,deep-flatten",
|
||||||
|
},
|
||||||
|
deletePolicy)
|
||||||
|
if err != nil {
|
||||||
|
e2elog.Failf("failed to create storageclass: %v", err)
|
||||||
|
}
|
||||||
|
// set up PVC
|
||||||
|
pvc, err := loadPVC(pvcPath)
|
||||||
|
if err != nil {
|
||||||
|
e2elog.Failf("failed to load PVC: %v", err)
|
||||||
|
}
|
||||||
|
pvc.Namespace = f.UniqueName
|
||||||
|
err = createPVCAndvalidatePV(f.ClientSet, pvc, deployTimeout)
|
||||||
|
if err != nil {
|
||||||
|
e2elog.Failf("failed to create PVC: %v", err)
|
||||||
|
}
|
||||||
|
// validate created backend rbd images
|
||||||
|
validateRBDImageCount(f, 1, defaultRBDPool)
|
||||||
|
|
||||||
|
if util.CheckKernelSupport(kernelRelease, deepFlattenSupport) {
|
||||||
|
app, aErr := loadApp(appPath)
|
||||||
|
if aErr != nil {
|
||||||
|
e2elog.Failf("failed to load application: %v", aErr)
|
||||||
|
}
|
||||||
|
app.Namespace = f.UniqueName
|
||||||
|
err = createApp(f.ClientSet, app, deployTimeout)
|
||||||
|
if err != nil {
|
||||||
|
e2elog.Failf("failed to create application: %v", err)
|
||||||
|
}
|
||||||
|
// delete pod as we should not create snapshot for in-use pvc
|
||||||
|
err = deletePod(app.Name, app.Namespace, f.ClientSet, deployTimeout)
|
||||||
|
if err != nil {
|
||||||
|
e2elog.Failf("failed to delete application: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// clean up after ourselves
|
||||||
|
err = deletePVCAndValidatePV(f.ClientSet, pvc, deployTimeout)
|
||||||
|
if err != nil {
|
||||||
|
e2elog.Failf("failed to delete PVC: %v", err)
|
||||||
|
}
|
||||||
|
// validate created backend rbd images
|
||||||
|
validateRBDImageCount(f, 0, defaultRBDPool)
|
||||||
|
})
|
||||||
|
|
||||||
By("create PVC with journaling,fast-diff image-features and bind it to an app using rbd-nbd mounter",
|
By("create PVC with journaling,fast-diff image-features and bind it to an app using rbd-nbd mounter",
|
||||||
func() {
|
func() {
|
||||||
if util.CheckKernelSupport(kernelRelease, fastDiffSupport) {
|
if util.CheckKernelSupport(kernelRelease, fastDiffSupport) {
|
||||||
|
@ -62,6 +62,18 @@ var fastDiffSupport = []util.KernelVersion{
|
|||||||
}, // standard 5.3+ versions
|
}, // standard 5.3+ versions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nolint:gomnd // numbers specify Kernel versions.
|
||||||
|
var deepFlattenSupport = []util.KernelVersion{
|
||||||
|
{
|
||||||
|
Version: 5,
|
||||||
|
PatchLevel: 1,
|
||||||
|
SubLevel: 0,
|
||||||
|
ExtraVersion: 0,
|
||||||
|
Distribution: "",
|
||||||
|
Backport: false,
|
||||||
|
}, // standard 5.1+ versions
|
||||||
|
}
|
||||||
|
|
||||||
// To use `io-timeout=0` we need
|
// To use `io-timeout=0` we need
|
||||||
// www.mail-archive.com/linux-block@vger.kernel.org/msg38060.html
|
// www.mail-archive.com/linux-block@vger.kernel.org/msg38060.html
|
||||||
// nolint:gomnd // numbers specify Kernel versions.
|
// nolint:gomnd // numbers specify Kernel versions.
|
||||||
|
@ -29,10 +29,10 @@ parameters:
|
|||||||
# eg: pool: rbdpool
|
# eg: pool: rbdpool
|
||||||
pool: <rbd-pool-name>
|
pool: <rbd-pool-name>
|
||||||
|
|
||||||
# (required) RBD image features, CSI creates image with image-format 2
|
# (required) RBD image features, CSI creates image with image-format 2 CSI
|
||||||
# CSI RBD currently supports `layering`, `journaling`, `exclusive-lock`,
|
# RBD currently supports `layering`, `journaling`, `exclusive-lock`,
|
||||||
# `object-map`, `fast-diff` features. If `journaling` is enabled, must
|
# `object-map`, `fast-diff`, `deep-flatten` features. If `journaling` is
|
||||||
# enable `exclusive-lock` too.
|
# enabled, must enable `exclusive-lock` too.
|
||||||
# imageFeatures: layering,journaling,exclusive-lock,object-map,fast-diff
|
# imageFeatures: layering,journaling,exclusive-lock,object-map,fast-diff
|
||||||
imageFeatures: "layering"
|
imageFeatures: "layering"
|
||||||
|
|
||||||
|
@ -209,6 +209,9 @@ var supportedFeatures = map[string]imageFeature{
|
|||||||
needRbdNbd: true,
|
needRbdNbd: true,
|
||||||
dependsOn: []string{librbd.FeatureNameExclusiveLock},
|
dependsOn: []string{librbd.FeatureNameExclusiveLock},
|
||||||
},
|
},
|
||||||
|
librbd.FeatureNameDeepFlatten: {
|
||||||
|
needRbdNbd: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetKrbdSupportedFeatures load the module if needed and return supported
|
// GetKrbdSupportedFeatures load the module if needed and return supported
|
||||||
|
@ -152,6 +152,14 @@ func TestValidateImageFeatures(t *testing.T) {
|
|||||||
true,
|
true,
|
||||||
"invalid feature ayering",
|
"invalid feature ayering",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"deep-flatten",
|
||||||
|
&rbdVolume{
|
||||||
|
Mounter: rbdDefaultMounter,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
"",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
Loading…
Reference in New Issue
Block a user