Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

csi: cephfs online migration support via translation library #111137

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions cmd/kube-controller-manager/app/plugins_providers.go
Expand Up @@ -28,10 +28,14 @@ import (
"k8s.io/kubernetes/pkg/volume/awsebs"
"k8s.io/kubernetes/pkg/volume/azure_file"
"k8s.io/kubernetes/pkg/volume/azuredd"

"k8s.io/kubernetes/pkg/volume/cephfs"
"k8s.io/kubernetes/pkg/volume/cinder"
"k8s.io/kubernetes/pkg/volume/csimigration"
"k8s.io/kubernetes/pkg/volume/gcepd"
"k8s.io/kubernetes/pkg/volume/portworx"
"k8s.io/kubernetes/pkg/volume/rbd"

"k8s.io/kubernetes/pkg/volume/vsphere_volume"
)

Expand Down Expand Up @@ -69,6 +73,7 @@ func appendAttachableLegacyProviderVolumes(allPlugins []volume.VolumePlugin, fea
pluginMigrationStatus[plugins.VSphereInTreePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationvSphere, pluginUnregisterFeature: features.InTreePluginvSphereUnregister, pluginProbeFunction: vsphere_volume.ProbeVolumePlugins}
pluginMigrationStatus[plugins.PortworxVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationPortworx, pluginUnregisterFeature: features.InTreePluginPortworxUnregister, pluginProbeFunction: portworx.ProbeVolumePlugins}
pluginMigrationStatus[plugins.RBDVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationRBD, pluginUnregisterFeature: features.InTreePluginRBDUnregister, pluginProbeFunction: rbd.ProbeVolumePlugins}
pluginMigrationStatus[plugins.CephFSVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationCephFS, pluginUnregisterFeature: features.InTreePluginCephFSUnregister, pluginProbeFunction: cephfs.ProbeVolumePlugins}
var err error
for pluginName, pluginInfo := range pluginMigrationStatus {
allPlugins, err = appendPluginBasedOnFeatureFlags(allPlugins, pluginName, featureGate, pluginInfo)
Expand Down
2 changes: 1 addition & 1 deletion cmd/kubelet/app/plugins.go
Expand Up @@ -19,11 +19,11 @@ package app
// This file exists to force the desired plugin implementations to be linked.
import (
"k8s.io/component-base/featuregate"
"k8s.io/kubernetes/pkg/volume/cephfs"
"k8s.io/utils/exec"

// Volume plugins
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume/cephfs"
"k8s.io/kubernetes/pkg/volume/configmap"
"k8s.io/kubernetes/pkg/volume/csi"
"k8s.io/kubernetes/pkg/volume/downwardapi"
Expand Down
3 changes: 3 additions & 0 deletions cmd/kubelet/app/plugins_providers.go
Expand Up @@ -37,6 +37,7 @@ import (
"k8s.io/kubernetes/pkg/volume/gcepd"
"k8s.io/kubernetes/pkg/volume/portworx"
"k8s.io/kubernetes/pkg/volume/rbd"

"k8s.io/kubernetes/pkg/volume/vsphere_volume"
)

Expand Down Expand Up @@ -76,6 +77,8 @@ func appendLegacyProviderVolumes(allPlugins []volume.VolumePlugin, featureGate f
pluginMigrationStatus[plugins.VSphereInTreePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationvSphere, pluginUnregisterFeature: features.InTreePluginvSphereUnregister, pluginProbeFunction: vsphere_volume.ProbeVolumePlugins}
pluginMigrationStatus[plugins.PortworxVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationPortworx, pluginUnregisterFeature: features.InTreePluginPortworxUnregister, pluginProbeFunction: portworx.ProbeVolumePlugins}
pluginMigrationStatus[plugins.RBDVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationRBD, pluginUnregisterFeature: features.InTreePluginRBDUnregister, pluginProbeFunction: rbd.ProbeVolumePlugins}
pluginMigrationStatus[plugins.CephFSVolumePluginName] = pluginInfo{pluginMigrationFeature: features.CSIMigrationCephFS, pluginUnregisterFeature: features.InTreePluginCephFSUnregister, pluginProbeFunction: rbd.ProbeVolumePlugins}

var err error
for pluginName, pluginInfo := range pluginMigrationStatus {
allPlugins, err = appendPluginBasedOnFeatureFlags(allPlugins, pluginName, featureGate, pluginInfo)
Expand Down
16 changes: 16 additions & 0 deletions pkg/features/kube_features.go
Expand Up @@ -158,6 +158,12 @@ const (
// Enables the RBD in-tree driver to RBD CSI Driver migration feature.
CSIMigrationRBD featuregate.Feature = "CSIMigrationRBD"

// owner: @humblec
// alpha: v1.25
//
// Enables the RBD in-tree driver to CephFS CSI Driver migration feature.
CSIMigrationCephFS featuregate.Feature = "CSIMigrationCephFS"

// owner: @divyenpatel
// beta: v1.19 (requires: vSphere vCenter/ESXi Version: 7.0u2, HW Version: VM version 15)
//
Expand Down Expand Up @@ -405,6 +411,12 @@ const (
// Disables the RBD in-tree driver.
InTreePluginRBDUnregister featuregate.Feature = "InTreePluginRBDUnregister"

// owner: @humblec
// alpha: v1.25
//
// Disables the RBD in-tree driver.
InTreePluginCephFSUnregister featuregate.Feature = "InTreePluginCephFSUnregister"

// owner: @divyenpatel
// alpha: v1.21
//
Expand Down Expand Up @@ -837,6 +849,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS

CSIMigrationvSphere: {Default: true, PreRelease: featuregate.Beta},

CSIMigrationCephFS: {Default: false, PreRelease: featuregate.Alpha}, // Off by default (requires CephFS CSI driver)

CSINodeExpandSecret: {Default: false, PreRelease: featuregate.Alpha},

CSIStorageCapacity: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.26
Expand Down Expand Up @@ -905,6 +919,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS

InTreePluginRBDUnregister: {Default: false, PreRelease: featuregate.Alpha},

InTreePluginCephFSUnregister: {Default: false, PreRelease: featuregate.Alpha},

InTreePluginvSphereUnregister: {Default: false, PreRelease: featuregate.Alpha},

IPTablesOwnershipCleanup: {Default: false, PreRelease: featuregate.Alpha},
Expand Down
4 changes: 4 additions & 0 deletions pkg/scheduler/framework/plugins/nodevolumelimits/utils.go
Expand Up @@ -59,6 +59,10 @@ func isCSIMigrationOn(csiNode *storagev1.CSINode, pluginName string) bool {
if !utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationRBD) {
return false
}
case csilibplugins.CephFSVolumePluginName:
if !utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationCephFS) {
return false
}
default:
return false
}
Expand Down
2 changes: 2 additions & 0 deletions pkg/scheduler/framework/plugins/volumebinding/binder.go
Expand Up @@ -1011,6 +1011,8 @@ func isCSIMigrationOnForPlugin(pluginName string) bool {
return utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationPortworx)
case csiplugins.RBDVolumePluginName:
return utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationRBD)
case csiplugins.CephFSVolumePluginName:
return utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationCephFS)
}
return false
}
Expand Down
7 changes: 7 additions & 0 deletions pkg/volume/cephfs/cephfs.go
Expand Up @@ -32,6 +32,8 @@ import (
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume/util"
)
Expand All @@ -51,6 +53,11 @@ const (
cephfsPluginName = "kubernetes.io/cephfs"
)

func (plugin *cephfsPlugin) IsMigratedToCSI() bool {
return utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) &&
utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationCephFS)
}

func (plugin *cephfsPlugin) Init(host volume.VolumeHost) error {
plugin.host = host
return nil
Expand Down
3 changes: 3 additions & 0 deletions pkg/volume/csi/csi_plugin.go
Expand Up @@ -237,6 +237,9 @@ func (p *csiPlugin) Init(host volume.VolumeHost) error {
csitranslationplugins.RBDVolumePluginName: func() bool {
return utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationRBD)
},
csitranslationplugins.CephFSVolumePluginName: func() bool {
return utilfeature.DefaultFeatureGate.Enabled(features.CSIMigrationCephFS)
},
}

// Initializing the label management channels
Expand Down
4 changes: 4 additions & 0 deletions pkg/volume/csimigration/plugin_manager.go
Expand Up @@ -74,6 +74,8 @@ func (pm PluginManager) IsMigrationCompleteForPlugin(pluginName string) bool {
return pm.featureGate.Enabled(features.InTreePluginPortworxUnregister)
case csilibplugins.RBDVolumePluginName:
return pm.featureGate.Enabled(features.InTreePluginRBDUnregister)
case csilibplugins.CephFSVolumePluginName:
return pm.featureGate.Enabled(features.InTreePluginCephFSUnregister)
default:
return false
}
Expand All @@ -100,6 +102,8 @@ func (pm PluginManager) IsMigrationEnabledForPlugin(pluginName string) bool {
return pm.featureGate.Enabled(features.CSIMigrationPortworx)
case csilibplugins.RBDVolumePluginName:
return pm.featureGate.Enabled(features.CSIMigrationRBD)
case csilibplugins.CephFSVolumePluginName:
return pm.featureGate.Enabled(features.CSIMigrationCephFS)
default:
return false
}
Expand Down