Skip to content

Commit 09a251c

Browse files
authored
Merge pull request kubernetes#84274 from liggitt/beta-gate-pdb-informers
Feature-gate PDB informer starts
2 parents fc4dc23 + feac7a4 commit 09a251c

File tree

5 files changed

+42
-9
lines changed

5 files changed

+42
-9
lines changed

cmd/kube-controller-manager/app/policy.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,16 @@ limitations under the License.
2121
package app
2222

2323
import (
24+
"net/http"
25+
26+
"k8s.io/klog"
27+
2428
"k8s.io/apimachinery/pkg/runtime/schema"
29+
utilfeature "k8s.io/apiserver/pkg/util/feature"
2530
"k8s.io/client-go/dynamic"
2631
"k8s.io/client-go/scale"
2732
"k8s.io/kubernetes/pkg/controller/disruption"
28-
29-
"net/http"
30-
31-
"k8s.io/klog"
33+
kubefeatures "k8s.io/kubernetes/pkg/features"
3234
)
3335

3436
func startDisruptionController(ctx ControllerContext) (http.Handler, bool, error) {
@@ -42,6 +44,10 @@ func startDisruptionController(ctx ControllerContext) (http.Handler, bool, error
4244
resource, group+"/"+version)
4345
return nil, false, nil
4446
}
47+
if !utilfeature.DefaultFeatureGate.Enabled(kubefeatures.PodDisruptionBudget) {
48+
klog.Infof("Refusing to start disruption because the PodDisruptionBudget feature is disabled")
49+
return nil, false, nil
50+
}
4551

4652
client := ctx.ClientBuilder.ClientOrDie("disruption-controller")
4753
config := ctx.ClientBuilder.ConfigOrDie("disruption-controller")

pkg/features/kube_features.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,13 @@ const (
492492
//
493493
// Enables the users to skip TLS verification of kubelets on pod logs requests
494494
AllowInsecureBackendProxy featuregate.Feature = "AllowInsecureBackendProxy"
495+
496+
// owner: @mortent
497+
// alpha: v1.3
498+
// beta: v1.5
499+
//
500+
// Enable all logic related to the PodDisruptionBudget API object in policy
501+
PodDisruptionBudget featuregate.Feature = "PodDisruptionBudget"
495502
)
496503

497504
func init() {
@@ -572,6 +579,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
572579
EvenPodsSpread: {Default: false, PreRelease: featuregate.Alpha},
573580
StartupProbe: {Default: false, PreRelease: featuregate.Alpha},
574581
AllowInsecureBackendProxy: {Default: true, PreRelease: featuregate.Beta},
582+
PodDisruptionBudget: {Default: true, PreRelease: featuregate.Beta},
575583

576584
// inherited features from generic apiserver, relisted here to get a conflict if it is changed
577585
// unintentionally on either side:

pkg/scheduler/core/generic_scheduler.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,9 +332,15 @@ func (g *genericScheduler) Preempt(ctx context.Context, state *framework.CycleSt
332332
// In this case, we should clean-up any existing nominated node name of the pod.
333333
return nil, nil, []*v1.Pod{pod}, nil
334334
}
335-
pdbs, err := g.pdbLister.List(labels.Everything())
336-
if err != nil {
337-
return nil, nil, nil, err
335+
var (
336+
pdbs []*policy.PodDisruptionBudget
337+
err error
338+
)
339+
if g.pdbLister != nil {
340+
pdbs, err = g.pdbLister.List(labels.Everything())
341+
if err != nil {
342+
return nil, nil, nil, err
343+
}
338344
}
339345
nodeToVictims, err := g.selectNodesForPreemption(ctx, state, pod, potentialNodes, pdbs)
340346
if err != nil {

pkg/scheduler/factory.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,11 @@ func NewConfigFactory(args *ConfigFactoryArgs) *Configurator {
226226
csiNodeLister = args.CSINodeInformer.Lister()
227227
}
228228

229+
var pdbLister policylisters.PodDisruptionBudgetLister
230+
if args.PdbInformer != nil {
231+
pdbLister = args.PdbInformer.Lister()
232+
}
233+
229234
c := &Configurator{
230235
client: args.Client,
231236
informerFactory: args.InformerFactory,
@@ -235,7 +240,7 @@ func NewConfigFactory(args *ConfigFactoryArgs) *Configurator {
235240
controllerLister: args.ReplicationControllerInformer.Lister(),
236241
replicaSetLister: args.ReplicaSetInformer.Lister(),
237242
statefulSetLister: args.StatefulSetInformer.Lister(),
238-
pdbLister: args.PdbInformer.Lister(),
243+
pdbLister: pdbLister,
239244
nodeLister: args.NodeInformer.Lister(),
240245
podLister: args.PodInformer.Lister(),
241246
storageClassLister: storageClassLister,

pkg/scheduler/scheduler.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@ import (
2929
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3030
"k8s.io/apimachinery/pkg/runtime"
3131
"k8s.io/apimachinery/pkg/util/wait"
32+
utilfeature "k8s.io/apiserver/pkg/util/feature"
3233
"k8s.io/client-go/informers"
3334
coreinformers "k8s.io/client-go/informers/core/v1"
35+
policyv1beta1informers "k8s.io/client-go/informers/policy/v1beta1"
3436
clientset "k8s.io/client-go/kubernetes"
3537
"k8s.io/client-go/tools/cache"
3638
"k8s.io/client-go/tools/events"
3739
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
40+
kubefeatures "k8s.io/kubernetes/pkg/features"
3841
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
3942
latestschedulerapi "k8s.io/kubernetes/pkg/scheduler/api/latest"
4043
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
@@ -279,6 +282,11 @@ func New(client clientset.Interface,
279282
}
280283
registry.Merge(options.frameworkOutOfTreeRegistry)
281284

285+
var pdbInformer policyv1beta1informers.PodDisruptionBudgetInformer
286+
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.PodDisruptionBudget) {
287+
pdbInformer = informerFactory.Policy().V1beta1().PodDisruptionBudgets()
288+
}
289+
282290
// Set up the configurator which can create schedulers from configs.
283291
configurator := NewConfigFactory(&ConfigFactoryArgs{
284292
Client: client,
@@ -291,7 +299,7 @@ func New(client clientset.Interface,
291299
ReplicaSetInformer: informerFactory.Apps().V1().ReplicaSets(),
292300
StatefulSetInformer: informerFactory.Apps().V1().StatefulSets(),
293301
ServiceInformer: informerFactory.Core().V1().Services(),
294-
PdbInformer: informerFactory.Policy().V1beta1().PodDisruptionBudgets(),
302+
PdbInformer: pdbInformer,
295303
StorageClassInformer: informerFactory.Storage().V1().StorageClasses(),
296304
CSINodeInformer: informerFactory.Storage().V1beta1().CSINodes(),
297305
VolumeBinder: volumeBinder,

0 commit comments

Comments
 (0)