Skip to content

Commit 282e149

Browse files
KEP-5040: Disable git_repo volume driver.
1 parent 6ef1a1f commit 282e149

File tree

7 files changed

+229
-42
lines changed

7 files changed

+229
-42
lines changed

pkg/api/pod/warnings.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ import (
2626
"k8s.io/apimachinery/pkg/util/sets"
2727
"k8s.io/apimachinery/pkg/util/validation"
2828
"k8s.io/apimachinery/pkg/util/validation/field"
29+
utilfeature "k8s.io/apiserver/pkg/util/feature"
2930
nodeapi "k8s.io/kubernetes/pkg/api/node"
3031
pvcutil "k8s.io/kubernetes/pkg/api/persistentvolumeclaim"
3132
api "k8s.io/kubernetes/pkg/apis/core"
3233
"k8s.io/kubernetes/pkg/apis/core/pods"
34+
"k8s.io/kubernetes/pkg/features"
3335
)
3436

3537
func GetWarningsForPod(ctx context.Context, pod, oldPod *api.Pod) []string {
@@ -142,7 +144,11 @@ func warningsForPodSpecAndMeta(fieldPath *field.Path, podSpec *api.PodSpec, meta
142144
warnings = append(warnings, fmt.Sprintf("%s: deprecated in v1.11, non-functional in v1.16+", fieldPath.Child("spec", "volumes").Index(i).Child("photonPersistentDisk")))
143145
}
144146
if v.GitRepo != nil {
145-
warnings = append(warnings, fmt.Sprintf("%s: deprecated in v1.11", fieldPath.Child("spec", "volumes").Index(i).Child("gitRepo")))
147+
if !utilfeature.DefaultFeatureGate.Enabled(features.GitRepoVolumeDriver) {
148+
warnings = append(warnings, fmt.Sprintf("%s: deprecated in v1.11, and disabled by default in v1.33+", fieldPath.Child("spec", "volumes").Index(i).Child("gitRepo")))
149+
} else {
150+
warnings = append(warnings, fmt.Sprintf("%s: deprecated in v1.11", fieldPath.Child("spec", "volumes").Index(i).Child("gitRepo")))
151+
}
146152
}
147153
if v.ScaleIO != nil {
148154
warnings = append(warnings, fmt.Sprintf("%s: deprecated in v1.16, non-functional in v1.22+", fieldPath.Child("spec", "volumes").Index(i).Child("scaleIO")))

pkg/api/pod/warnings_test.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ import (
2626
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2727
"k8s.io/apimachinery/pkg/util/sets"
2828
"k8s.io/apimachinery/pkg/util/validation/field"
29+
utilfeature "k8s.io/apiserver/pkg/util/feature"
30+
featuregatetesting "k8s.io/component-base/featuregate/testing"
2931
api "k8s.io/kubernetes/pkg/apis/core"
32+
"k8s.io/kubernetes/pkg/features"
3033
utilpointer "k8s.io/utils/pointer"
3134
)
3235

@@ -148,10 +151,11 @@ func TestWarnings(t *testing.T) {
148151
}
149152
testName := "Test"
150153
testcases := []struct {
151-
name string
152-
template *api.PodTemplateSpec
153-
oldTemplate *api.PodTemplateSpec
154-
expected []string
154+
name string
155+
template *api.PodTemplateSpec
156+
oldTemplate *api.PodTemplateSpec
157+
gitRepoPluginDisabled bool
158+
expected []string
155159
}{
156160
{
157161
name: "null",
@@ -176,6 +180,16 @@ func TestWarnings(t *testing.T) {
176180
},
177181
expected: []string{`spec.volumes[0].gitRepo: deprecated in v1.11`},
178182
},
183+
{
184+
name: "gitRepo plugin disabled",
185+
template: &api.PodTemplateSpec{Spec: api.PodSpec{
186+
Volumes: []api.Volume{
187+
{Name: "s", VolumeSource: api.VolumeSource{GitRepo: &api.GitRepoVolumeSource{}}},
188+
}},
189+
},
190+
gitRepoPluginDisabled: true,
191+
expected: []string{`spec.volumes[0].gitRepo: deprecated in v1.11, and disabled by default in v1.33+`},
192+
},
179193
{
180194
name: "scaleIO",
181195
template: &api.PodTemplateSpec{Spec: api.PodSpec{
@@ -1786,6 +1800,7 @@ func TestWarnings(t *testing.T) {
17861800

17871801
for _, tc := range testcases {
17881802
t.Run("podspec_"+tc.name, func(t *testing.T) {
1803+
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.GitRepoVolumeDriver, !tc.gitRepoPluginDisabled)
17891804
var oldTemplate *api.PodTemplateSpec
17901805
if tc.oldTemplate != nil {
17911806
oldTemplate = tc.oldTemplate
@@ -1805,6 +1820,7 @@ func TestWarnings(t *testing.T) {
18051820
})
18061821

18071822
t.Run("pod_"+tc.name, func(t *testing.T) {
1823+
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.GitRepoVolumeDriver, !tc.gitRepoPluginDisabled)
18081824
var pod *api.Pod
18091825
if tc.template != nil {
18101826
pod = &api.Pod{

pkg/features/kube_features.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,13 @@ const (
264264
// Lock to default and remove after v1.22 based on user feedback that should be reflected in KEP #1972 update
265265
ExecProbeTimeout featuregate.Feature = "ExecProbeTimeout"
266266

267+
// owner: @vinayakankugoyal @thockin
268+
//
269+
// Controls if the gitRepo volume plugin is supported or not.
270+
// KEP #5040 disables the gitRepo volume plugin by default starting v1.33,
271+
// this provides a way for users to override it.
272+
GitRepoVolumeDriver featuregate.Feature = "GitRepoVolumeDriver"
273+
267274
// owner: @bobbypage
268275
// Adds support for kubelet to detect node shutdown and gracefully terminate pods prior to the node being shutdown.
269276
GracefulNodeShutdown featuregate.Feature = "GracefulNodeShutdown"

pkg/features/versioned_kube_features.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,11 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
359359
{Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.Beta},
360360
},
361361

362+
GitRepoVolumeDriver: {
363+
{Version: version.MustParse("1.0"), Default: true, PreRelease: featuregate.GA},
364+
{Version: version.MustParse("1.33"), Default: false, PreRelease: featuregate.Deprecated},
365+
},
366+
362367
GracefulNodeShutdown: {
363368
{Version: version.MustParse("1.20"), Default: false, PreRelease: featuregate.Alpha},
364369
{Version: version.MustParse("1.21"), Default: true, PreRelease: featuregate.Beta},

pkg/volume/git_repo/git_repo.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import (
2424

2525
v1 "k8s.io/api/core/v1"
2626
"k8s.io/apimachinery/pkg/types"
27+
utilfeature "k8s.io/apiserver/pkg/util/feature"
28+
"k8s.io/kubernetes/pkg/features"
2729
"k8s.io/kubernetes/pkg/volume"
2830
volumeutil "k8s.io/kubernetes/pkg/volume/util"
2931
"k8s.io/utils/exec"
@@ -169,6 +171,10 @@ func (b *gitRepoVolumeMounter) GetAttributes() volume.Attributes {
169171

170172
// SetUp creates new directory and clones a git repo.
171173
func (b *gitRepoVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
174+
if !utilfeature.DefaultFeatureGate.Enabled(features.GitRepoVolumeDriver) {
175+
return fmt.Errorf("git-repo volume plugin has been disabled; if necessary, it may be re-enabled by enabling the feature-gate `GitRepoVolumeDriver`")
176+
}
177+
172178
return b.SetUpAt(b.GetPath(), mounterArgs)
173179
}
174180

0 commit comments

Comments
 (0)