...
1
16
17 package app
18
19 import (
20 "context"
21 "fmt"
22
23 "k8s.io/client-go/discovery"
24 "k8s.io/client-go/dynamic"
25 "k8s.io/client-go/metadata"
26 "k8s.io/controller-manager/controller"
27 "k8s.io/kubernetes/cmd/kube-controller-manager/names"
28 "k8s.io/kubernetes/pkg/features"
29
30 utilfeature "k8s.io/apiserver/pkg/util/feature"
31 clientgofeaturegate "k8s.io/client-go/features"
32 svm "k8s.io/kubernetes/pkg/controller/storageversionmigrator"
33 )
34
35 func newStorageVersionMigratorControllerDescriptor() *ControllerDescriptor {
36 return &ControllerDescriptor{
37 name: names.StorageVersionMigratorController,
38 aliases: []string{"svm"},
39 initFunc: startSVMController,
40 }
41 }
42
43 func startSVMController(
44 ctx context.Context,
45 controllerContext ControllerContext,
46 controllerName string,
47 ) (controller.Interface, bool, error) {
48 if !utilfeature.DefaultFeatureGate.Enabled(features.StorageVersionMigrator) ||
49 !clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InformerResourceVersion) {
50 return nil, false, nil
51 }
52
53 if !controllerContext.ComponentConfig.GarbageCollectorController.EnableGarbageCollector {
54 return nil, true, fmt.Errorf("storage version migrator requires garbage collector")
55 }
56
57 config := controllerContext.ClientBuilder.ConfigOrDie(controllerName)
58 client := controllerContext.ClientBuilder.ClientOrDie(controllerName)
59 informer := controllerContext.InformerFactory.Storagemigration().V1alpha1().StorageVersionMigrations()
60
61 dynamicClient, err := dynamic.NewForConfig(config)
62 if err != nil {
63 return nil, false, err
64 }
65
66 discoveryClient, err := discovery.NewDiscoveryClientForConfig(config)
67 if err != nil {
68 return nil, false, err
69 }
70
71 go svm.NewResourceVersionController(
72 ctx,
73 client,
74 discoveryClient,
75 metadata.NewForConfigOrDie(config),
76 informer,
77 controllerContext.RESTMapper,
78 ).Run(ctx)
79
80 svmController := svm.NewSVMController(
81 ctx,
82 client,
83 dynamicClient,
84 informer,
85 controllerName,
86 controllerContext.RESTMapper,
87 controllerContext.GraphBuilder,
88 )
89 go svmController.Run(ctx)
90
91 return svmController, true, nil
92 }
93
View as plain text