@@ -27,6 +27,7 @@ import (
27
27
28
28
"github.com/spf13/pflag"
29
29
corev1 "k8s.io/api/core/v1"
30
+ apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
30
31
"k8s.io/apimachinery/pkg/labels"
31
32
"k8s.io/apimachinery/pkg/runtime"
32
33
"k8s.io/apimachinery/pkg/selection"
@@ -50,6 +51,7 @@ import (
50
51
kubeadmbootstrapcontrollers "sigs.k8s.io/cluster-api/bootstrap/kubeadm/controllers"
51
52
"sigs.k8s.io/cluster-api/bootstrap/kubeadm/internal/webhooks"
52
53
"sigs.k8s.io/cluster-api/controllers/clustercache"
54
+ "sigs.k8s.io/cluster-api/controllers/crdmigrator"
53
55
"sigs.k8s.io/cluster-api/controllers/remote"
54
56
expv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1"
55
57
"sigs.k8s.io/cluster-api/feature"
@@ -90,11 +92,13 @@ var (
90
92
clusterConcurrency int
91
93
clusterCacheConcurrency int
92
94
kubeadmConfigConcurrency int
95
+ skipCRDMigrationPhases []string
93
96
tokenTTL time.Duration
94
97
)
95
98
96
99
func init () {
97
100
_ = clientgoscheme .AddToScheme (scheme )
101
+ _ = apiextensionsv1 .AddToScheme (scheme )
98
102
_ = clusterv1 .AddToScheme (scheme )
99
103
_ = expv1 .AddToScheme (scheme )
100
104
_ = bootstrapv1alpha3 .AddToScheme (scheme )
@@ -140,6 +144,9 @@ func InitFlags(fs *pflag.FlagSet) {
140
144
fs .IntVar (& kubeadmConfigConcurrency , "kubeadmconfig-concurrency" , 10 ,
141
145
"Number of kubeadm configs to process simultaneously" )
142
146
147
+ fs .StringArrayVar (& skipCRDMigrationPhases , "skip-crd-migration-phases" , []string {},
148
+ "List of CRD migration phases to skip. Valid values are: StorageVersionMigration, CleanupManagedFields." )
149
+
143
150
fs .DurationVar (& syncPeriod , "sync-period" , 10 * time .Minute ,
144
151
"The minimum interval at which watched resources are reconciled (e.g. 15m)" )
145
152
@@ -181,6 +188,11 @@ func InitFlags(fs *pflag.FlagSet) {
181
188
// Add RBAC for the authorized diagnostics endpoint.
182
189
// +kubebuilder:rbac:groups=authentication.k8s.io,resources=tokenreviews,verbs=create
183
190
// +kubebuilder:rbac:groups=authorization.k8s.io,resources=subjectaccessreviews,verbs=create
191
+ // ADD CRD RBAC for CRD Migrator.
192
+ // +kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions,verbs=get;list;watch
193
+ // +kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions;customresourcedefinitions/status,verbs=update;patch,resourceNames=kubeadmconfigs.bootstrap.cluster.x-k8s.io;kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io
194
+ // ADD CR RBAC for CRD Migrator.
195
+ // +kubebuilder:rbac:groups=bootstrap.cluster.x-k8s.io,resources=kubeadmconfigtemplates,verbs=get;list;watch;patch;update
184
196
185
197
func main () {
186
198
InitFlags (pflag .CommandLine )
@@ -340,6 +352,27 @@ func setupReconcilers(ctx context.Context, mgr ctrl.Manager) {
340
352
os .Exit (1 )
341
353
}
342
354
355
+ crdMigratorSkipPhases := []crdmigrator.Phase {}
356
+ for _ , p := range skipCRDMigrationPhases {
357
+ crdMigratorSkipPhases = append (crdMigratorSkipPhases , crdmigrator .Phase (p ))
358
+ }
359
+ if err := (& crdmigrator.CRDMigrator {
360
+ Client : mgr .GetClient (),
361
+ APIReader : mgr .GetAPIReader (),
362
+ SkipCRDMigrationPhases : crdMigratorSkipPhases ,
363
+ // Note: The kubebuilder RBAC markers above has to be kept in sync
364
+ // with the CRDs that should be migrated by this provider.
365
+ Config : map [client.Object ]crdmigrator.ByObjectConfig {
366
+ & bootstrapv1.KubeadmConfig {}: {UseCache : true },
367
+ & bootstrapv1.KubeadmConfigTemplate {}: {UseCache : false },
368
+ },
369
+ // The CRDMigrator is run with only concurrency 1 to ensure we don't overwhelm the apiserver by patching a
370
+ // lot of CRs concurrently.
371
+ }).SetupWithManager (ctx , mgr , concurrency (1 )); err != nil {
372
+ setupLog .Error (err , "Unable to create controller" , "controller" , "CRDMigrator" )
373
+ os .Exit (1 )
374
+ }
375
+
343
376
if err := (& kubeadmbootstrapcontrollers.KubeadmConfigReconciler {
344
377
Client : mgr .GetClient (),
345
378
SecretCachingClient : secretCachingClient ,
0 commit comments