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

Unify operators into one binary. #21

Merged
merged 2 commits into from
Apr 28, 2020
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
15 changes: 12 additions & 3 deletions cmd/eventing-operator/main.go → cmd/operator/main.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2019 The Knative Authors
Copyright 2020 The Knative Authors

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand All @@ -20,16 +20,25 @@ import (
"log"

"knative.dev/operator/pkg/reconciler/knativeeventing"
"knative.dev/operator/pkg/reconciler/knativeserving"
"knative.dev/pkg/injection/sharedmain"
"knative.dev/pkg/signals"
)

var (
masterURL = flag.String("master", "", "The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.")
kubeconfig = flag.String("kubeconfig", "", "Path to a kubeconfig. Only required if out-of-cluster.")
)

func main() {
flag.Parse()

cfg, err := sharedmain.GetConfig(*knativeeventing.MasterURL, *knativeeventing.Kubeconfig)
cfg, err := sharedmain.GetConfig(*masterURL, *kubeconfig)
if err != nil {
log.Fatal("Error building kubeconfig", err)
}
sharedmain.MainWithConfig(signals.NewContext(), "eventing-operator", cfg, knativeeventing.NewController)
sharedmain.MainWithConfig(signals.NewContext(), "knative-operator", cfg,
knativeserving.NewControllerWithConfig(cfg),
knativeeventing.NewControllerWithConfig(cfg),
)
}
35 changes: 0 additions & 35 deletions cmd/serving-operator/main.go

This file was deleted.

57 changes: 6 additions & 51 deletions config/operator.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,31 +15,29 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: knative-serving-operator
name: knative-operator
spec:
replicas: 1
selector:
matchLabels:
name: knative-serving-operator
name: knative-operator
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
labels:
name: knative-serving-operator
name: knative-operator
spec:
serviceAccountName: knative-serving-operator
serviceAccountName: knative-operator
containers:
- name: knative-serving-operator
image: ko://knative.dev/operator/cmd/serving-operator
- name: knative-operator
image: ko://knative.dev/operator/cmd/operator
imagePullPolicy: IfNotPresent
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: OPERATOR_NAME
value: "knative-serving-operator"
- name: SYSTEM_NAMESPACE
valueFrom:
fieldRef:
Expand All @@ -53,46 +51,3 @@ spec:
ports:
- name: metrics
containerPort: 9090
---

apiVersion: apps/v1
kind: Deployment
metadata:
name: knative-eventing-operator
spec:
replicas: 1
selector:
matchLabels:
name: knative-eventing-operator
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
labels:
name: knative-eventing-operator
spec:
serviceAccountName: knative-eventing-operator
containers:
- name: knative-eventing-operator
image: ko://knative.dev/operator/cmd/eventing-operator
imagePullPolicy: IfNotPresent
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: OPERATOR_NAME
value: "knative-eventing-operator"
- name: SYSTEM_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: CONFIG_LOGGING_NAME
value: config-logging
- name: CONFIG_OBSERVABILITY_NAME
value: config-observability
- name: METRICS_DOMAIN
value: knative.dev/eventing-operator
ports:
- name: metrics
containerPort: 9090
18 changes: 18 additions & 0 deletions config/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,14 @@ rules:
- config-controller
verbs:
- delete
- apiGroups:
- ""
resources:
- serviceaccounts
resourceNames:
- knative-serving-operator
verbs:
- delete
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
Expand Down Expand Up @@ -354,3 +362,13 @@ rules:
- get
- list
- watch
# Old resources that need cleaning up that are not in the knative-eventing
# namespace.
- apiGroups:
- ""
resources:
- serviceaccounts
resourceNames:
- knative-eventing-operator
verbs:
- delete
8 changes: 4 additions & 4 deletions config/role_binding.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ roleRef:
name: knative-serving-operator
subjects:
- kind: ServiceAccount
name: knative-serving-operator
name: knative-operator
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
Expand All @@ -35,7 +35,7 @@ roleRef:
name: knative-serving-operator-aggregated
subjects:
- kind: ServiceAccount
name: knative-serving-operator
name: knative-operator
namespace: default
---
# TODO: Consider restriction of non-aggregated role to knativeeventing namespaces.
Expand All @@ -49,7 +49,7 @@ roleRef:
name: knative-eventing-operator
subjects:
- kind: ServiceAccount
name: knative-eventing-operator
name: knative-operator
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
Expand All @@ -62,5 +62,5 @@ roleRef:
name: knative-eventing-operator-aggregated
subjects:
- kind: ServiceAccount
name: knative-eventing-operator
name: knative-operator
namespace: default
7 changes: 1 addition & 6 deletions config/service_account.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,4 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: knative-serving-operator
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: knative-eventing-operator
name: knative-operator
77 changes: 36 additions & 41 deletions pkg/reconciler/knativeeventing/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,72 +15,67 @@ package knativeeventing

import (
"context"
"flag"
"os"
"path/filepath"

"github.com/go-logr/zapr"
mfc "github.com/manifestival/client-go-client"
mf "github.com/manifestival/manifestival"
"go.uber.org/zap"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/cache"

"knative.dev/operator/pkg/apis/operator/v1alpha1"
knativeEventinginformer "knative.dev/operator/pkg/client/injection/informers/operator/v1alpha1/knativeeventing"
knereconciler "knative.dev/operator/pkg/client/injection/reconciler/operator/v1alpha1/knativeeventing"
"knative.dev/operator/pkg/reconciler"
kubeclient "knative.dev/pkg/client/injection/kube/client"
deploymentinformer "knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment"
"knative.dev/pkg/configmap"
"knative.dev/pkg/controller"
"knative.dev/pkg/injection/sharedmain"
"knative.dev/pkg/logging"
)

var (
MasterURL = flag.String("master", "", "The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.")
Kubeconfig = flag.String("kubeconfig", "", "Path to a kubeconfig. Only required if out-of-cluster.")
)

// NewController initializes the controller and is called by the generated code
// NewControllerWithConfig initializes the controller and is called by the generated code
// Registers eventhandlers to enqueue events
func NewController(
ctx context.Context,
cmw configmap.Watcher,
) *controller.Impl {
knativeEventingInformer := knativeEventinginformer.Get(ctx)
deploymentInformer := deploymentinformer.Get(ctx)
logger := logging.FromContext(ctx)
func NewControllerWithConfig(cfg *rest.Config) func(context.Context, configmap.Watcher) *controller.Impl {
return func(ctx context.Context, cmw configmap.Watcher) *controller.Impl {
knativeEventingInformer := knativeEventinginformer.Get(ctx)
deploymentInformer := deploymentinformer.Get(ctx)
kubeClient := kubeclient.Get(ctx)
logger := logging.FromContext(ctx)

koDataDir := os.Getenv("KO_DATA_PATH")
// Clean up old non-unified operator resources before even starting the controller.
if err := reconciler.RemovePreUnifiedResources(kubeClient, "knative-eventing-operator"); err != nil {
logger.Fatalw("Failed to remove old resources", zap.Error(err))
}

cfg, err := sharedmain.GetConfig(*MasterURL, *Kubeconfig)
if err != nil {
logger.Error(err, "Error building kubeconfig")
}
koDataDir := os.Getenv("KO_DATA_PATH")
config, err := mfc.NewManifest(filepath.Join(koDataDir, "knative-eventing/"),
cfg,
mf.UseLogger(zapr.NewLogger(logger.Desugar()).WithName("manifestival")))
if err != nil {
logger.Error(err, "Error creating the Manifest for knative-eventing")
os.Exit(1)
}

config, err := mfc.NewManifest(filepath.Join(koDataDir, "knative-eventing/"),
cfg,
mf.UseLogger(zapr.NewLogger(logger.Desugar()).WithName("manifestival")))
if err != nil {
logger.Error(err, "Error creating the Manifest for knative-eventing")
os.Exit(1)
}
c := &Reconciler{
kubeClientSet: kubeClient,
config: config,
eventings: sets.NewString(),
}
impl := knereconciler.NewImpl(ctx, c)

c := &Reconciler{
kubeClientSet: kubeclient.Get(ctx),
config: config,
eventings: sets.NewString(),
}
impl := knereconciler.NewImpl(ctx, c)

logger.Info("Setting up event handlers")
logger.Info("Setting up event handlers")

knativeEventingInformer.Informer().AddEventHandler(controller.HandleAll(impl.Enqueue))
knativeEventingInformer.Informer().AddEventHandler(controller.HandleAll(impl.Enqueue))

deploymentInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: controller.Filter(v1alpha1.SchemeGroupVersion.WithKind("KnativeEventing")),
Handler: controller.HandleAll(impl.EnqueueControllerOf),
})
deploymentInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: controller.Filter(v1alpha1.SchemeGroupVersion.WithKind("KnativeEventing")),
Handler: controller.HandleAll(impl.EnqueueControllerOf),
})

return impl
return impl
}
}
Loading