diff --git a/k3k-kubelet/controller/persistentvolumeclaims.go b/k3k-kubelet/controller/persistentvolumeclaims.go index 039abdaf..603aa498 100644 --- a/k3k-kubelet/controller/persistentvolumeclaims.go +++ b/k3k-kubelet/controller/persistentvolumeclaims.go @@ -5,14 +5,12 @@ import ( "github.com/rancher/k3k/k3k-kubelet/translate" "github.com/rancher/k3k/pkg/apis/k3k.io/v1alpha1" - "github.com/rancher/k3k/pkg/log" v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -24,44 +22,44 @@ const ( ) type PVCReconciler struct { - virtualClient ctrlruntimeclient.Client - hostClient ctrlruntimeclient.Client clusterName string clusterNamespace string - Scheme *runtime.Scheme - HostScheme *runtime.Scheme - logger *log.Logger - Translator translate.ToHostTranslator + + virtualClient ctrlruntimeclient.Client + hostClient ctrlruntimeclient.Client + Scheme *runtime.Scheme + HostScheme *runtime.Scheme + Translator translate.ToHostTranslator } // AddPVCSyncer adds persistentvolumeclaims syncer controller to k3k-kubelet -func AddPVCSyncer(ctx context.Context, virtMgr, hostMgr manager.Manager, clusterName, clusterNamespace string, logger *log.Logger) error { +func AddPVCSyncer(ctx context.Context, virtMgr, hostMgr manager.Manager, clusterName, clusterNamespace string) error { translator := translate.ToHostTranslator{ ClusterName: clusterName, ClusterNamespace: clusterNamespace, } + // initialize a new Reconciler reconciler := PVCReconciler{ - virtualClient: virtMgr.GetClient(), - hostClient: hostMgr.GetClient(), - Scheme: virtMgr.GetScheme(), - HostScheme: hostMgr.GetScheme(), - logger: logger.Named(pvcController), - Translator: translator, clusterName: clusterName, clusterNamespace: clusterNamespace, + + virtualClient: virtMgr.GetClient(), + hostClient: hostMgr.GetClient(), + Scheme: virtMgr.GetScheme(), + HostScheme: hostMgr.GetScheme(), + Translator: translator, } return ctrl.NewControllerManagedBy(virtMgr). + Named(pvcController). For(&v1.PersistentVolumeClaim{}). - WithOptions(controller.Options{ - MaxConcurrentReconciles: maxConcurrentReconciles, - }). Complete(&reconciler) } func (r *PVCReconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) { - log := r.logger.With("Cluster", r.clusterName, "PersistentVolumeClaim", req.NamespacedName) + log := ctrl.LoggerFrom(ctx).WithValues("cluster", r.clusterName, "clusterNamespace", r.clusterNamespace) + ctx = ctrl.LoggerInto(ctx, log) var ( virtPVC v1.PersistentVolumeClaim @@ -72,7 +70,6 @@ func (r *PVCReconciler) Reconcile(ctx context.Context, req reconcile.Request) (r return reconcile.Result{}, err } - // handling persistent volume sync if err := r.virtualClient.Get(ctx, req.NamespacedName, &virtPVC); err != nil { return reconcile.Result{}, ctrlruntimeclient.IgnoreNotFound(err) } diff --git a/k3k-kubelet/controller/pod.go b/k3k-kubelet/controller/pod.go index 717c0241..fe254359 100644 --- a/k3k-kubelet/controller/pod.go +++ b/k3k-kubelet/controller/pod.go @@ -5,7 +5,6 @@ import ( "github.com/rancher/k3k/k3k-kubelet/translate" "github.com/rancher/k3k/pkg/apis/k3k.io/v1alpha1" - "github.com/rancher/k3k/pkg/log" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -13,7 +12,6 @@ import ( "k8s.io/component-helpers/storage/volume" ctrl "sigs.k8s.io/controller-runtime" ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -24,44 +22,44 @@ const ( ) type PodReconciler struct { - virtualClient ctrlruntimeclient.Client - hostClient ctrlruntimeclient.Client clusterName string clusterNamespace string - Scheme *runtime.Scheme - HostScheme *runtime.Scheme - logger *log.Logger - Translator translate.ToHostTranslator + + virtualClient ctrlruntimeclient.Client + hostClient ctrlruntimeclient.Client + Scheme *runtime.Scheme + HostScheme *runtime.Scheme + Translator translate.ToHostTranslator } // AddPodPVCController adds pod controller to k3k-kubelet -func AddPodPVCController(ctx context.Context, virtMgr, hostMgr manager.Manager, clusterName, clusterNamespace string, logger *log.Logger) error { +func AddPodPVCController(ctx context.Context, virtMgr, hostMgr manager.Manager, clusterName, clusterNamespace string) error { translator := translate.ToHostTranslator{ ClusterName: clusterName, ClusterNamespace: clusterNamespace, } + // initialize a new Reconciler reconciler := PodReconciler{ - virtualClient: virtMgr.GetClient(), - hostClient: hostMgr.GetClient(), - Scheme: virtMgr.GetScheme(), - HostScheme: hostMgr.GetScheme(), - logger: logger.Named(podController), - Translator: translator, clusterName: clusterName, clusterNamespace: clusterNamespace, + + virtualClient: virtMgr.GetClient(), + hostClient: hostMgr.GetClient(), + Scheme: virtMgr.GetScheme(), + HostScheme: hostMgr.GetScheme(), + Translator: translator, } return ctrl.NewControllerManagedBy(virtMgr). + Named(podController). For(&v1.Pod{}). - WithOptions(controller.Options{ - MaxConcurrentReconciles: maxConcurrentReconciles, - }). Complete(&reconciler) } func (r *PodReconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) { log := ctrl.LoggerFrom(ctx).WithValues("cluster", r.clusterName, "clusterNamespace", r.clusterNamespace) + ctx = ctrl.LoggerInto(ctx, log) var ( virtPod v1.Pod @@ -72,7 +70,6 @@ func (r *PodReconciler) Reconcile(ctx context.Context, req reconcile.Request) (r return reconcile.Result{}, err } - // handling pod if err := r.virtualClient.Get(ctx, req.NamespacedName, &virtPod); err != nil { return reconcile.Result{}, ctrlruntimeclient.IgnoreNotFound(err) } @@ -95,6 +92,7 @@ func (r *PodReconciler) Reconcile(ctx context.Context, req reconcile.Request) (r // and then created on the host, the PV is not synced to the host cluster. func (r *PodReconciler) reconcilePodWithPVC(ctx context.Context, pod *v1.Pod, pvcSource *v1.PersistentVolumeClaimVolumeSource) error { log := ctrl.LoggerFrom(ctx).WithValues("PersistentVolumeClaim", pvcSource.ClaimName) + ctx = ctrl.LoggerInto(ctx, log) var pvc v1.PersistentVolumeClaim diff --git a/k3k-kubelet/controller/service.go b/k3k-kubelet/controller/service.go index b97b7c72..0703434e 100644 --- a/k3k-kubelet/controller/service.go +++ b/k3k-kubelet/controller/service.go @@ -5,15 +5,12 @@ import ( "github.com/rancher/k3k/k3k-kubelet/translate" "github.com/rancher/k3k/pkg/apis/k3k.io/v1alpha1" - "github.com/rancher/k3k/pkg/log" - v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -21,49 +18,47 @@ import ( const ( serviceSyncerController = "service-syncer-controller" - maxConcurrentReconciles = 1 serviceFinalizerName = "service.k3k.io/finalizer" ) type ServiceReconciler struct { - virtualClient ctrlruntimeclient.Client - hostClient ctrlruntimeclient.Client clusterName string clusterNamespace string - Scheme *runtime.Scheme - HostScheme *runtime.Scheme - logger *log.Logger - Translator translate.ToHostTranslator + + virtualClient ctrlruntimeclient.Client + hostClient ctrlruntimeclient.Client + Scheme *runtime.Scheme + HostScheme *runtime.Scheme + Translator translate.ToHostTranslator } // AddServiceSyncer adds service syncer controller to the manager of the virtual cluster -func AddServiceSyncer(ctx context.Context, virtMgr, hostMgr manager.Manager, clusterName, clusterNamespace string, logger *log.Logger) error { +func AddServiceSyncer(ctx context.Context, virtMgr, hostMgr manager.Manager, clusterName, clusterNamespace string) error { translator := translate.ToHostTranslator{ ClusterName: clusterName, ClusterNamespace: clusterNamespace, } - // initialize a new Reconciler + reconciler := ServiceReconciler{ - virtualClient: virtMgr.GetClient(), - hostClient: hostMgr.GetClient(), - Scheme: virtMgr.GetScheme(), - HostScheme: hostMgr.GetScheme(), - logger: logger.Named(serviceSyncerController), - Translator: translator, clusterName: clusterName, clusterNamespace: clusterNamespace, + + virtualClient: virtMgr.GetClient(), + hostClient: hostMgr.GetClient(), + Scheme: virtMgr.GetScheme(), + HostScheme: hostMgr.GetScheme(), + Translator: translator, } return ctrl.NewControllerManagedBy(virtMgr). + Named(serviceSyncerController). For(&v1.Service{}). - WithOptions(controller.Options{ - MaxConcurrentReconciles: maxConcurrentReconciles, - }). Complete(&reconciler) } -func (s *ServiceReconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) { - log := s.logger.With("Cluster", s.clusterName, "Service", req.NamespacedName) +func (r *ServiceReconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) { + log := ctrl.LoggerFrom(ctx).WithValues("cluster", r.clusterName, "clusterNamespace", r.clusterNamespace) + ctx = ctrl.LoggerInto(ctx, log) if req.Name == "kubernetes" || req.Name == "kube-dns" { return reconcile.Result{}, nil @@ -71,27 +66,26 @@ func (s *ServiceReconciler) Reconcile(ctx context.Context, req reconcile.Request var ( virtService v1.Service - hostService v1.Service cluster v1alpha1.Cluster ) - // getting the cluster for setting the controller reference - if err := s.hostClient.Get(ctx, types.NamespacedName{Name: s.clusterName, Namespace: s.clusterNamespace}, &cluster); err != nil { + + if err := r.hostClient.Get(ctx, types.NamespacedName{Name: r.clusterName, Namespace: r.clusterNamespace}, &cluster); err != nil { return reconcile.Result{}, err } - if err := s.virtualClient.Get(ctx, req.NamespacedName, &virtService); err != nil { + if err := r.virtualClient.Get(ctx, req.NamespacedName, &virtService); err != nil { return reconcile.Result{}, ctrlruntimeclient.IgnoreNotFound(err) } - syncedService := s.service(&virtService) - if err := controllerutil.SetControllerReference(&cluster, syncedService, s.HostScheme); err != nil { + syncedService := r.service(&virtService) + if err := controllerutil.SetControllerReference(&cluster, syncedService, r.HostScheme); err != nil { return reconcile.Result{}, err } // handle deletion if !virtService.DeletionTimestamp.IsZero() { // deleting the synced service if exists - if err := s.hostClient.Delete(ctx, syncedService); err != nil { + if err := r.hostClient.Delete(ctx, syncedService); err != nil { return reconcile.Result{}, ctrlruntimeclient.IgnoreNotFound(err) } @@ -99,7 +93,7 @@ func (s *ServiceReconciler) Reconcile(ctx context.Context, req reconcile.Request if controllerutil.ContainsFinalizer(&virtService, serviceFinalizerName) { controllerutil.RemoveFinalizer(&virtService, serviceFinalizerName) - if err := s.virtualClient.Update(ctx, &virtService); err != nil { + if err := r.virtualClient.Update(ctx, &virtService); err != nil { return reconcile.Result{}, err } } @@ -111,15 +105,17 @@ func (s *ServiceReconciler) Reconcile(ctx context.Context, req reconcile.Request if !controllerutil.ContainsFinalizer(&virtService, serviceFinalizerName) { controllerutil.AddFinalizer(&virtService, serviceFinalizerName) - if err := s.virtualClient.Update(ctx, &virtService); err != nil { + if err := r.virtualClient.Update(ctx, &virtService); err != nil { return reconcile.Result{}, err } } + // create or update the service on host - if err := s.hostClient.Get(ctx, types.NamespacedName{Name: syncedService.Name, Namespace: s.clusterNamespace}, &hostService); err != nil { + var hostService v1.Service + if err := r.hostClient.Get(ctx, types.NamespacedName{Name: syncedService.Name, Namespace: r.clusterNamespace}, &hostService); err != nil { if apierrors.IsNotFound(err) { log.Info("creating the service for the first time on the host cluster") - return reconcile.Result{}, s.hostClient.Create(ctx, syncedService) + return reconcile.Result{}, r.hostClient.Create(ctx, syncedService) } return reconcile.Result{}, err @@ -127,7 +123,7 @@ func (s *ServiceReconciler) Reconcile(ctx context.Context, req reconcile.Request log.Info("updating service on the host cluster") - return reconcile.Result{}, s.hostClient.Update(ctx, syncedService) + return reconcile.Result{}, r.hostClient.Update(ctx, syncedService) } func (s *ServiceReconciler) service(obj *v1.Service) *v1.Service { diff --git a/k3k-kubelet/kubelet.go b/k3k-kubelet/kubelet.go index b88d9a83..843cc5a2 100644 --- a/k3k-kubelet/kubelet.go +++ b/k3k-kubelet/kubelet.go @@ -10,6 +10,7 @@ import ( "net/http" "time" + "github.com/go-logr/zapr" certutil "github.com/rancher/dynamiclistener/cert" k3kkubeletcontroller "github.com/rancher/k3k/k3k-kubelet/controller" k3kwebhook "github.com/rancher/k3k/k3k-kubelet/controller/webhook" @@ -93,6 +94,8 @@ func newKubelet(ctx context.Context, c *config, logger *k3klog.Logger) (*kubelet return nil, err } + ctrl.SetLogger(zapr.NewLogger(logger.Desugar().WithOptions(zap.AddCallerSkip(1)))) + hostMgr, err := ctrl.NewManager(hostConfig, manager.Options{ Scheme: baseScheme, LeaderElection: true, @@ -144,19 +147,19 @@ func newKubelet(ctx context.Context, c *config, logger *k3klog.Logger) (*kubelet logger.Info("adding service syncer controller") - if err := k3kkubeletcontroller.AddServiceSyncer(ctx, virtualMgr, hostMgr, c.ClusterName, c.ClusterNamespace, k3klog.New(false)); err != nil { + if err := k3kkubeletcontroller.AddServiceSyncer(ctx, virtualMgr, hostMgr, c.ClusterName, c.ClusterNamespace); err != nil { return nil, errors.New("failed to add service syncer controller: " + err.Error()) } logger.Info("adding pvc syncer controller") - if err := k3kkubeletcontroller.AddPVCSyncer(ctx, virtualMgr, hostMgr, c.ClusterName, c.ClusterNamespace, k3klog.New(false)); err != nil { + if err := k3kkubeletcontroller.AddPVCSyncer(ctx, virtualMgr, hostMgr, c.ClusterName, c.ClusterNamespace); err != nil { return nil, errors.New("failed to add pvc syncer controller: " + err.Error()) } logger.Info("adding pod pvc controller") - if err := k3kkubeletcontroller.AddPodPVCController(ctx, virtualMgr, hostMgr, c.ClusterName, c.ClusterNamespace, k3klog.New(false)); err != nil { + if err := k3kkubeletcontroller.AddPodPVCController(ctx, virtualMgr, hostMgr, c.ClusterName, c.ClusterNamespace); err != nil { return nil, errors.New("failed to add pod pvc controller: " + err.Error()) }