From cb138ee9fbace11035919ced20fd457cc60899ed Mon Sep 17 00:00:00 2001 From: kaiyou <dev@kaiyou.fr> Date: Wed, 26 Apr 2023 22:45:50 +0200 Subject: [PATCH] Enable volume management controllers --- services/cm.go | 58 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/services/cm.go b/services/cm.go index 1009573..6fc47d5 100644 --- a/services/cm.go +++ b/services/cm.go @@ -24,10 +24,15 @@ import ( "k8s.io/kubernetes/pkg/controller/serviceaccount" "k8s.io/kubernetes/pkg/controller/ttl" "k8s.io/kubernetes/pkg/controller/ttlafterfinished" + "k8s.io/kubernetes/pkg/controller/volume/attachdetach" "k8s.io/kubernetes/pkg/controller/volume/ephemeral" + "k8s.io/kubernetes/pkg/controller/volume/persistentvolume" "k8s.io/kubernetes/pkg/controller/volume/pvcprotection" "k8s.io/kubernetes/pkg/controller/volume/pvprotection" + "k8s.io/kubernetes/pkg/proxy/util" "k8s.io/kubernetes/pkg/quota/v1/install" + "k8s.io/kubernetes/pkg/volume" + "k8s.io/kubernetes/pkg/volume/csi" ) var kubeControllerManager = &Unit{ @@ -37,7 +42,7 @@ var kubeControllerManager = &Unit{ // Used as a replacement for InformersStarted in vanilla code allReady := make(chan struct{}) - clients, err := newClients(c, c.networking.NodeAddress.IP, c.masterCerts.SchedulerAPI) + clients, err := newClients(c, c.networking.NodeAddress.IP, c.masterCerts.ControllersAPI) if err != nil { return err } @@ -157,7 +162,7 @@ var kubeControllerManager = &Unit{ // TODO: improve performance if required (see vanilla code) // Namespace controller - namespace.NewNamespaceController( + go namespace.NewNamespaceController( clients.Client, clients.MetadataClient, clients.Client.Discovery().ServerPreferredNamespacedResources, clients.Informer.Core().V1().Namespaces(), @@ -175,7 +180,7 @@ var kubeControllerManager = &Unit{ if err != nil { return fmt.Errorf("could not initialize sa controller: %w", err) } - saController.Run(ctx, 1) + go saController.Run(ctx, 1) // TTL controller go ttl.NewTTLController( @@ -225,6 +230,53 @@ var kubeControllerManager = &Unit{ go gc.Run(ctx, 1) go gc.Sync(clients.Client.DiscoveryClient, 30*time.Second, ctx.Done()) + // Volume binder + dialOptions := util.FilteredDialOptions{DialHostCIDRDenylist: []*net.IPNet{}, AllowLocalLoopback: true} + bindable := []volume.VolumePlugin{} + bindable = append(bindable, csi.ProbeVolumePlugins()...) + volumeController, err := persistentvolume.NewController(persistentvolume.ControllerParameters{ + KubeClient: clients.Client, + SyncPeriod: 15 * time.Second, // default + ClusterName: c.settings.Name, + VolumeInformer: clients.Informer.Core().V1().PersistentVolumes(), + ClaimInformer: clients.Informer.Core().V1().PersistentVolumeClaims(), + ClassInformer: clients.Informer.Storage().V1().StorageClasses(), + PodInformer: clients.Informer.Core().V1().Pods(), + NodeInformer: clients.Informer.Core().V1().Nodes(), + EnableDynamicProvisioning: false, + VolumePlugins: bindable, + FilteredDialOptions: &dialOptions, + }) + if err != nil { + return fmt.Errorf("could not initialize volume binder: %w", err) + } + go volumeController.Run(ctx) + + // Volume attacher + attachable := []volume.VolumePlugin{} + attachable = append(attachable, csi.ProbeVolumePlugins()...) + attachController, err := attachdetach.NewAttachDetachController( + clients.Client, + clients.Informer.Core().V1().Pods(), + clients.Informer.Core().V1().Nodes(), + clients.Informer.Core().V1().PersistentVolumeClaims(), + clients.Informer.Core().V1().PersistentVolumes(), + clients.Informer.Storage().V1().CSINodes(), + clients.Informer.Storage().V1().CSIDrivers(), + clients.Informer.Storage().V1().VolumeAttachments(), + nil, // cloud provider + attachable, // volume plugins + nil, // dynamic plugin prober + false, // disable attach detach reconciler + 60*time.Second, // default + attachdetach.DefaultTimerConfig, + &dialOptions, + ) + if err != nil { + return fmt.Errorf("could not initialize volume attacher: %w", err) + } + go attachController.Run(ctx.Done()) + close(allReady) return nil }, -- GitLab