Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

optimize raven controllers #1767

Merged
merged 1 commit into from
Nov 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/yurt-manager/names/controller_names.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ const (
PodBindingController = "pod-binding-controller"
GatewayPickupController = "gateway-pickup-controller"
GatewayInternalServiceController = "gateway-internal-service-controller"
GatewayPublicServiceController = "gateway-public-service"
GatewayPublicServiceController = "gateway-public-service-controller"
GatewayDNSController = "gateway-dns-controller"
NodeLifeCycleController = "node-life-cycle-controller"
)
Expand Down
21 changes: 0 additions & 21 deletions pkg/yurtmanager/controller/raven/common.go

This file was deleted.

27 changes: 13 additions & 14 deletions pkg/yurtmanager/controller/raven/dns/dns_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,7 @@ import (

appconfig "github.com/openyurtio/openyurt/cmd/yurt-manager/app/config"
"github.com/openyurtio/openyurt/cmd/yurt-manager/names"
common "github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/utils"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/util"
)

func Format(format string, args ...interface{}) string {
Expand Down Expand Up @@ -77,7 +76,7 @@ func newReconciler(mgr manager.Manager) reconcile.Reconciler {
func add(mgr manager.Manager, r reconcile.Reconciler) error {
// Create a new controller
c, err := controller.New(names.GatewayDNSController, mgr, controller.Options{
Reconciler: r, MaxConcurrentReconciles: common.ConcurrentReconciles,
Reconciler: r, MaxConcurrentReconciles: util.ConcurrentReconciles,
})
if err != nil {
return err
Expand All @@ -93,7 +92,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
if svc.Spec.Type != corev1.ServiceTypeClusterIP {
return false
}
return svc.Namespace == utils.WorkingNamespace && svc.Name == utils.GatewayProxyInternalService
return svc.Namespace == util.WorkingNamespace && svc.Name == util.GatewayProxyInternalService
}))
if err != nil {
return err
Expand All @@ -114,29 +113,29 @@ func (r *ReconcileDns) Reconcile(ctx context.Context, req reconcile.Request) (re
}()
var proxyAddress = ""
//1. ensure configmap to record dns
cm, err := r.getProxyDNS(ctx, client.ObjectKey{Namespace: utils.WorkingNamespace, Name: utils.RavenProxyNodesConfig})
cm, err := r.getProxyDNS(ctx, client.ObjectKey{Namespace: util.WorkingNamespace, Name: util.RavenProxyNodesConfig})
if err != nil {
return reconcile.Result{Requeue: true, RequeueAfter: 2 * time.Second}, err
}

// 2. acquired raven global config to check whether the proxy s enabled
enableProxy, _ := utils.CheckServer(ctx, r.Client)
enableProxy, _ := util.CheckServer(ctx, r.Client)
if !enableProxy {
r.recorder.Event(cm.DeepCopy(), corev1.EventTypeNormal, "MaintainDNSRecord", "The Raven Layer 7 proxy feature is not enabled for the cluster")
} else {
svc, err := r.getService(ctx, types.NamespacedName{Namespace: utils.WorkingNamespace, Name: utils.GatewayProxyInternalService})
svc, err := r.getService(ctx, types.NamespacedName{Namespace: util.WorkingNamespace, Name: util.GatewayProxyInternalService})
if err != nil && !apierrors.IsNotFound(err) {
klog.V(2).Infof(Format("failed to get service %s/%s", utils.WorkingNamespace, utils.GatewayProxyInternalService))
klog.V(2).Infof(Format("failed to get service %s/%s", util.WorkingNamespace, util.GatewayProxyInternalService))
return reconcile.Result{Requeue: true, RequeueAfter: 2 * time.Second}, err
}
if apierrors.IsNotFound(err) || svc.DeletionTimestamp != nil {
r.recorder.Event(cm.DeepCopy(), corev1.EventTypeNormal, "MaintainDNSRecord",
fmt.Sprintf("The Raven Layer 7 proxy lacks service %s/%s", utils.WorkingNamespace, utils.GatewayProxyInternalService))
fmt.Sprintf("The Raven Layer 7 proxy lacks service %s/%s", util.WorkingNamespace, util.GatewayProxyInternalService))
}
if svc != nil {
if svc.Spec.ClusterIP == "" {
r.recorder.Event(cm.DeepCopy(), corev1.EventTypeNormal, "MaintainDNSRecord",
fmt.Sprintf("The service %s/%s cluster IP is empty", utils.WorkingNamespace, utils.GatewayProxyInternalService))
fmt.Sprintf("The service %s/%s cluster IP is empty", util.WorkingNamespace, util.GatewayProxyInternalService))
} else {
proxyAddress = svc.Spec.ClusterIP
}
Expand All @@ -149,7 +148,7 @@ func (r *ReconcileDns) Reconcile(ctx context.Context, req reconcile.Request) (re
if err != nil {
return reconcile.Result{Requeue: true, RequeueAfter: 2 * time.Second}, fmt.Errorf("failed to list node, error %s", err.Error())
}
cm.Data[utils.ProxyNodesKey] = buildDNSRecords(nodeList, enableProxy, proxyAddress)
cm.Data[util.ProxyNodesKey] = buildDNSRecords(nodeList, enableProxy, proxyAddress)
err = r.updateDNS(cm)
if err != nil {
return reconcile.Result{Requeue: true, RequeueAfter: 2 * time.Second}, fmt.Errorf("failed to update configmap %s/%s, error %s",
Expand Down Expand Up @@ -185,11 +184,11 @@ func (r ReconcileDns) getProxyDNS(ctx context.Context, objKey client.ObjectKey)
func (r *ReconcileDns) buildRavenDNSConfigMap() error {
cm := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: utils.RavenProxyNodesConfig,
Namespace: utils.WorkingNamespace,
Name: util.RavenProxyNodesConfig,
Namespace: util.WorkingNamespace,
},
Data: map[string]string{
utils.ProxyNodesKey: "",
util.ProxyNodesKey: "",
},
}
err := r.Client.Create(context.TODO(), cm, &client.CreateOptions{})
Expand Down
12 changes: 6 additions & 6 deletions pkg/yurtmanager/controller/raven/dns/dns_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import (

"github.com/openyurtio/openyurt/pkg/apis/raven"
ravenv1v1beta1 "github.com/openyurtio/openyurt/pkg/apis/raven/v1beta1"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/utils"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/util"
)

const (
Expand Down Expand Up @@ -118,7 +118,7 @@ func mockKubeClient() client.Client {
{
ObjectMeta: metav1.ObjectMeta{
Name: MockProxySvc,
Namespace: utils.WorkingNamespace,
Namespace: util.WorkingNamespace,
Labels: map[string]string{
raven.LabelCurrentGateway: MockGateway,
raven.LabelCurrentGatewayType: ravenv1v1beta1.Proxy,
Expand All @@ -137,11 +137,11 @@ func mockKubeClient() client.Client {
Items: []v1.ConfigMap{
{
ObjectMeta: metav1.ObjectMeta{
Name: utils.RavenProxyNodesConfig,
Namespace: utils.WorkingNamespace,
Name: util.RavenProxyNodesConfig,
Namespace: util.WorkingNamespace,
},
Data: map[string]string{
utils.ProxyNodesKey: "",
util.ProxyNodesKey: "",
},
},
},
Expand All @@ -160,7 +160,7 @@ func mockReconciler() *ReconcileDns {
func TestReconcileDns_Reconcile(t *testing.T) {
r := mockReconciler()
t.Run("get dns configmap", func(t *testing.T) {
res, err := r.Reconcile(context.Background(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: utils.WorkingNamespace, Name: utils.RavenProxyNodesConfig}})
res, err := r.Reconcile(context.Background(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: util.WorkingNamespace, Name: util.RavenProxyNodesConfig}})
assert.Equal(t, reconcile.Result{}, res)
assert.Equal(t, err, nil)
})
Expand Down
22 changes: 11 additions & 11 deletions pkg/yurtmanager/controller/raven/dns/dns_enqueue_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/event"

"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/utils"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/util"
)

type EnqueueRequestForServiceEvent struct{}
Expand All @@ -38,8 +38,8 @@ func (h *EnqueueRequestForServiceEvent) Create(e event.CreateEvent, q workqueue.
return
}

klog.V(2).Infof(Format("enqueue configmap %s/%s due to service create event", utils.WorkingNamespace, utils.RavenProxyNodesConfig))
utils.AddDNSConfigmapToWorkQueue(q)
klog.V(2).Infof(Format("enqueue configmap %s/%s due to service create event", util.WorkingNamespace, util.RavenProxyNodesConfig))
util.AddDNSConfigmapToWorkQueue(q)
}

func (h *EnqueueRequestForServiceEvent) Update(e event.UpdateEvent, q workqueue.RateLimitingInterface) {
Expand All @@ -54,8 +54,8 @@ func (h *EnqueueRequestForServiceEvent) Update(e event.UpdateEvent, q workqueue.
return
}
if newSvc.Spec.ClusterIP != oldSvc.Spec.ClusterIP {
klog.V(2).Infof(Format("enqueue configmap %s/%s due to service update event", utils.WorkingNamespace, utils.RavenProxyNodesConfig))
utils.AddDNSConfigmapToWorkQueue(q)
klog.V(2).Infof(Format("enqueue configmap %s/%s due to service update event", util.WorkingNamespace, util.RavenProxyNodesConfig))
util.AddDNSConfigmapToWorkQueue(q)
}
}

Expand All @@ -65,8 +65,8 @@ func (h *EnqueueRequestForServiceEvent) Delete(e event.DeleteEvent, q workqueue.
klog.Error(Format("fail to assert runtime Object to v1.Service"))
return
}
klog.V(2).Infof(Format("enqueue configmap %s/%s due to service update event", utils.WorkingNamespace, utils.RavenProxyNodesConfig))
utils.AddDNSConfigmapToWorkQueue(q)
klog.V(2).Infof(Format("enqueue configmap %s/%s due to service update event", util.WorkingNamespace, util.RavenProxyNodesConfig))
util.AddDNSConfigmapToWorkQueue(q)
return
}

Expand All @@ -82,8 +82,8 @@ func (h *EnqueueRequestForNodeEvent) Create(e event.CreateEvent, q workqueue.Rat
klog.Error(Format("fail to assert runtime Object to v1.Node"))
return
}
klog.V(2).Infof(Format("enqueue configmap %s/%s due to node create event", utils.WorkingNamespace, utils.RavenProxyNodesConfig))
utils.AddDNSConfigmapToWorkQueue(q)
klog.V(2).Infof(Format("enqueue configmap %s/%s due to node create event", util.WorkingNamespace, util.RavenProxyNodesConfig))
util.AddDNSConfigmapToWorkQueue(q)
}

func (h *EnqueueRequestForNodeEvent) Update(e event.UpdateEvent, q workqueue.RateLimitingInterface) {
Expand All @@ -96,8 +96,8 @@ func (h *EnqueueRequestForNodeEvent) Delete(e event.DeleteEvent, q workqueue.Rat
klog.Error(Format("fail to assert runtime Object to v1.Node"))
return
}
klog.V(2).Infof(Format("enqueue configmap %s/%s due to node delete event", utils.WorkingNamespace, utils.RavenProxyNodesConfig))
utils.AddDNSConfigmapToWorkQueue(q)
klog.V(2).Infof(Format("enqueue configmap %s/%s due to node delete event", util.WorkingNamespace, util.RavenProxyNodesConfig))
util.AddDNSConfigmapToWorkQueue(q)
}

func (h *EnqueueRequestForNodeEvent) Generic(e event.GenericEvent, q workqueue.RateLimitingInterface) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ import (
"k8s.io/client-go/util/workqueue"
"sigs.k8s.io/controller-runtime/pkg/event"

"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/utils"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/util"
)

func mockService() *corev1.Service {
return &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Namespace: utils.WorkingNamespace,
Name: utils.GatewayProxyInternalService,
Namespace: util.WorkingNamespace,
Name: util.GatewayProxyInternalService,
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ import (
appconfig "github.com/openyurtio/openyurt/cmd/yurt-manager/app/config"
"github.com/openyurtio/openyurt/cmd/yurt-manager/names"
ravenv1beta1 "github.com/openyurtio/openyurt/pkg/apis/raven/v1beta1"
common "github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/utils"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/util"
)

const (
Expand All @@ -72,7 +71,7 @@ type ReconcileService struct {
client.Client
scheme *runtime.Scheme
recorder record.EventRecorder
option utils.Option
option util.Option
}

// newReconciler returns a new reconcile.Reconciler
Expand All @@ -81,15 +80,15 @@ func newReconciler(c *appconfig.CompletedConfig, mgr manager.Manager) reconcile.
Client: mgr.GetClient(),
scheme: mgr.GetScheme(),
recorder: mgr.GetEventRecorderFor(names.GatewayInternalServiceController),
option: utils.NewOption(),
option: util.NewOption(),
}
}

// add adds a new Controller to mgr with r as the reconcile.Reconciler
func add(mgr manager.Manager, r reconcile.Reconciler) error {
// Create a new controller
c, err := controller.New(names.GatewayInternalServiceController, mgr, controller.Options{
Reconciler: r, MaxConcurrentReconciles: common.ConcurrentReconciles,
Reconciler: r, MaxConcurrentReconciles: util.ConcurrentReconciles,
})
if err != nil {
return err
Expand All @@ -108,10 +107,10 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
if !ok {
return false
}
if cm.GetNamespace() != utils.WorkingNamespace {
if cm.GetNamespace() != util.WorkingNamespace {
return false
}
if cm.GetName() != utils.RavenAgentConfig {
if cm.GetName() != util.RavenAgentConfig {
return false
}
return true
Expand All @@ -137,7 +136,7 @@ func (r *ReconcileService) Reconcile(ctx context.Context, req reconcile.Request)
return reconcile.Result{Requeue: true}, err
}

enableProxy, _ := utils.CheckServer(ctx, r.Client)
enableProxy, _ := util.CheckServer(ctx, r.Client)
r.option.SetProxyOption(enableProxy)
if err := r.reconcileService(ctx, req, gwList); err != nil {
err = fmt.Errorf(Format("unable to reconcile service: %s", err))
Expand Down Expand Up @@ -230,20 +229,20 @@ func (r *ReconcileService) getTargetPort() (insecurePort, securePort int32) {
insecurePort = ravenv1beta1.DefaultProxyServerInsecurePort
securePort = ravenv1beta1.DefaultProxyServerSecurePort
var cm corev1.ConfigMap
err := r.Get(context.TODO(), types.NamespacedName{Namespace: utils.WorkingNamespace, Name: utils.RavenAgentConfig}, &cm)
err := r.Get(context.TODO(), types.NamespacedName{Namespace: util.WorkingNamespace, Name: util.RavenAgentConfig}, &cm)
if err != nil {
return
}
if cm.Data == nil {
return
}
_, internalInsecurePort, err := net.SplitHostPort(cm.Data[utils.ProxyServerInsecurePortKey])
_, internalInsecurePort, err := net.SplitHostPort(cm.Data[util.ProxyServerInsecurePortKey])
if err == nil {
insecure, _ := strconv.Atoi(internalInsecurePort)
insecurePort = int32(insecure)
}

_, internalSecurePort, err := net.SplitHostPort(cm.Data[utils.ProxyServerSecurePortKey])
_, internalSecurePort, err := net.SplitHostPort(cm.Data[util.ProxyServerSecurePortKey])
if err == nil {
secure, _ := strconv.Atoi(internalSecurePort)
securePort = int32(secure)
Expand Down Expand Up @@ -367,7 +366,7 @@ func (r *ReconcileService) ensureSpecEndpoints(ctx context.Context, gateways []*
continue
}
specAddresses = append(specAddresses, corev1.EndpointAddress{
IP: utils.GetNodeInternalIP(node),
IP: util.GetNodeInternalIP(node),
NodeName: func(n corev1.Node) *string { return &n.Name }(node),
})
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import (
"github.com/openyurtio/openyurt/pkg/apis"
"github.com/openyurtio/openyurt/pkg/apis/raven"
ravenv1beta1 "github.com/openyurtio/openyurt/pkg/apis/raven/v1beta1"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/utils"
"github.com/openyurtio/openyurt/pkg/yurtmanager/controller/raven/util"
)

const (
Expand Down Expand Up @@ -114,12 +114,12 @@ func MockReconcile() *ReconcileService {
Items: []corev1.ConfigMap{
{
ObjectMeta: metav1.ObjectMeta{
Name: utils.RavenGlobalConfig,
Namespace: utils.WorkingNamespace,
Name: util.RavenGlobalConfig,
Namespace: util.WorkingNamespace,
},
Data: map[string]string{
utils.RavenEnableProxy: "true",
utils.RavenEnableTunnel: "true",
util.RavenEnableProxy: "true",
util.RavenEnableTunnel: "true",
},
},
},
Expand Down Expand Up @@ -199,14 +199,14 @@ func MockReconcile() *ReconcileService {
return &ReconcileService{
Client: fake.NewClientBuilder().WithScheme(scheme).WithRuntimeObjects(objs...).Build(),
recorder: record.NewFakeRecorder(100),
option: utils.NewOption(),
option: util.NewOption(),
}
}

func TestReconcileService_Reconcile(t *testing.T) {
r := MockReconcile()
_, err := r.Reconcile(context.Background(), reconcile.Request{NamespacedName: types.NamespacedName{Name: utils.GatewayProxyInternalService, Namespace: utils.WorkingNamespace}})
_, err := r.Reconcile(context.Background(), reconcile.Request{NamespacedName: types.NamespacedName{Name: util.GatewayProxyInternalService, Namespace: util.WorkingNamespace}})
if err != nil {
t.Errorf("failed to reconcile service %s/%s", utils.WorkingNamespace, utils.GatewayProxyInternalService)
t.Errorf("failed to reconcile service %s/%s", util.WorkingNamespace, util.GatewayProxyInternalService)
}
}
Loading