mirror of https://github.com/k3s-io/k3s
Add a feature gate for alpha dynamic volume provisioning
Enabled by default to avoid breaking people, since this was turned on in 1.3.pull/6/head
parent
49ff2e8831
commit
991b07e60d
|
@ -34,6 +34,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/openstack"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/openstack"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere"
|
||||||
|
utilconfig "k8s.io/kubernetes/pkg/util/config"
|
||||||
"k8s.io/kubernetes/pkg/util/io"
|
"k8s.io/kubernetes/pkg/util/io"
|
||||||
"k8s.io/kubernetes/pkg/volume"
|
"k8s.io/kubernetes/pkg/volume"
|
||||||
"k8s.io/kubernetes/pkg/volume/aws_ebs"
|
"k8s.io/kubernetes/pkg/volume/aws_ebs"
|
||||||
|
@ -125,6 +126,8 @@ func ProbeControllerVolumePlugins(cloud cloudprovider.Interface, config componen
|
||||||
// TODO: remove in Kubernetes 1.5
|
// TODO: remove in Kubernetes 1.5
|
||||||
func NewAlphaVolumeProvisioner(cloud cloudprovider.Interface, config componentconfig.VolumeConfiguration) (volume.ProvisionableVolumePlugin, error) {
|
func NewAlphaVolumeProvisioner(cloud cloudprovider.Interface, config componentconfig.VolumeConfiguration) (volume.ProvisionableVolumePlugin, error) {
|
||||||
switch {
|
switch {
|
||||||
|
case !utilconfig.DefaultFeatureGate.DynamicVolumeProvisioning():
|
||||||
|
return nil, nil
|
||||||
case cloud == nil && config.EnableHostPathProvisioning:
|
case cloud == nil && config.EnableHostPathProvisioning:
|
||||||
return getProvisionablePluginFromVolumePlugins(host_path.ProbeVolumePlugins(
|
return getProvisionablePluginFromVolumePlugins(host_path.ProbeVolumePlugins(
|
||||||
volume.VolumeConfig{
|
volume.VolumeConfig{
|
||||||
|
|
|
@ -38,18 +38,20 @@ const (
|
||||||
// specification of gates. Examples:
|
// specification of gates. Examples:
|
||||||
// AllAlpha=false,NewFeature=true will result in newFeature=true
|
// AllAlpha=false,NewFeature=true will result in newFeature=true
|
||||||
// AllAlpha=true,NewFeature=false will result in newFeature=false
|
// AllAlpha=true,NewFeature=false will result in newFeature=false
|
||||||
allAlphaGate = "AllAlpha"
|
allAlphaGate = "AllAlpha"
|
||||||
externalTrafficLocalOnly = "AllowExtTrafficLocalEndpoints"
|
externalTrafficLocalOnly = "AllowExtTrafficLocalEndpoints"
|
||||||
dynamicKubeletConfig = "DynamicKubeletConfig"
|
dynamicKubeletConfig = "DynamicKubeletConfig"
|
||||||
|
dynamicVolumeProvisioning = "DynamicVolumeProvisioning"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// Default values for recorded features. Every new feature gate should be
|
// Default values for recorded features. Every new feature gate should be
|
||||||
// represented here.
|
// represented here.
|
||||||
knownFeatures = map[string]featureSpec{
|
knownFeatures = map[string]featureSpec{
|
||||||
allAlphaGate: {false, alpha},
|
allAlphaGate: {false, alpha},
|
||||||
externalTrafficLocalOnly: {false, alpha},
|
externalTrafficLocalOnly: {false, alpha},
|
||||||
dynamicKubeletConfig: {false, alpha},
|
dynamicKubeletConfig: {false, alpha},
|
||||||
|
dynamicVolumeProvisioning: {true, alpha},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special handling for a few gates.
|
// Special handling for a few gates.
|
||||||
|
@ -93,6 +95,10 @@ type FeatureGate interface {
|
||||||
// alpha: v1.4
|
// alpha: v1.4
|
||||||
ExternalTrafficLocalOnly() bool
|
ExternalTrafficLocalOnly() bool
|
||||||
|
|
||||||
|
// owner: @saad-ali
|
||||||
|
// alpha: v1.3
|
||||||
|
DynamicVolumeProvisioning() bool
|
||||||
|
|
||||||
// TODO: Define accessors for each non-API alpha feature.
|
// TODO: Define accessors for each non-API alpha feature.
|
||||||
DynamicKubeletConfig() bool
|
DynamicKubeletConfig() bool
|
||||||
}
|
}
|
||||||
|
@ -173,6 +179,11 @@ func (f *featureGate) DynamicKubeletConfig() bool {
|
||||||
return f.lookup(dynamicKubeletConfig)
|
return f.lookup(dynamicKubeletConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DynamicVolumeProvisioning returns value for dynamicVolumeProvisioning
|
||||||
|
func (f *featureGate) DynamicVolumeProvisioning() bool {
|
||||||
|
return f.lookup(dynamicVolumeProvisioning)
|
||||||
|
}
|
||||||
|
|
||||||
func (f *featureGate) lookup(key string) bool {
|
func (f *featureGate) lookup(key string) bool {
|
||||||
defaultValue := f.known[key].enabled
|
defaultValue := f.known[key].enabled
|
||||||
if f.enabled != nil {
|
if f.enabled != nil {
|
||||||
|
|
Loading…
Reference in New Issue