From ac3c5fa311a99c68afc67716afc14b1fecfac442 Mon Sep 17 00:00:00 2001 From: jihuin <56172920+jihuin@users.noreply.github.com> Date: Fri, 1 Nov 2019 16:10:40 -0700 Subject: [PATCH 1/6] Added metrics port to operator yaml --- config/operator.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/config/operator.yaml b/config/operator.yaml index ae08ee08..5ffe71e6 100644 --- a/config/operator.yaml +++ b/config/operator.yaml @@ -32,3 +32,10 @@ spec: fieldPath: metadata.namespace - name: METRICS_DOMAIN value: knative.dev/serving-operator + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + ports: + - name: metrics + containerPort: 9090 From 86d46bd7e793a8589fd74d66420c6993eef9fc21 Mon Sep 17 00:00:00 2001 From: jihuin Date: Thu, 7 Nov 2019 11:23:50 -0800 Subject: [PATCH 2/6] Added stats reporter to emit metrics when reconciling knative serving --- .../knativeserving_controller.go | 4 + pkg/reconciler/reconciler.go | 14 ++ pkg/reconciler/stats_reporter.go | 136 ++++++++++++++++++ pkg/reconciler/stats_reporter_test.go | 91 ++++++++++++ 4 files changed, 245 insertions(+) create mode 100644 pkg/reconciler/stats_reporter.go create mode 100644 pkg/reconciler/stats_reporter_test.go diff --git a/pkg/reconciler/knativeserving/knativeserving_controller.go b/pkg/reconciler/knativeserving/knativeserving_controller.go index f870046c..e42f20d0 100644 --- a/pkg/reconciler/knativeserving/knativeserving_controller.go +++ b/pkg/reconciler/knativeserving/knativeserving_controller.go @@ -18,6 +18,7 @@ package knativeserving import ( "context" + "time" mf "github.com/jcrossley3/manifestival" "go.uber.org/zap" @@ -60,6 +61,7 @@ var _ controller.Reconciler = (*Reconciler)(nil) // converge the two. It then updates the Status block of the Knativeserving resource // with the current status of the resource. func (r *Reconciler) Reconcile(ctx context.Context, key string) error { + tStart := time.Now() // Convert the namespace/name string into a distinct namespace and name namespace, name, err := cache.SplitMetaNamespaceKey(key) if err != nil { @@ -104,6 +106,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, key string) error { r.Recorder.Event(knativeServing, corev1.EventTypeWarning, "InternalError", reconcileErr.Error()) return reconcileErr } + + r.StatsReporter.ReportReconcile(namespace, name, time.Since(tStart)) return nil } diff --git a/pkg/reconciler/reconciler.go b/pkg/reconciler/reconciler.go index 13006956..5a1541bd 100644 --- a/pkg/reconciler/reconciler.go +++ b/pkg/reconciler/reconciler.go @@ -62,6 +62,9 @@ type Base struct { // Kubernetes API. Recorder record.EventRecorder + // StatsReporter reports reconciler's metrics. + StatsReporter StatsReporter + // Sugared logger is easier to use but is not as performant as the // raw logger. In performance critical paths, call logger.Desugar() // and use the returned raw logger instead. In addition to the @@ -100,6 +103,16 @@ func NewBase(ctx context.Context, controllerAgentName string, cmw configmap.Watc }() } + statsReporter := GetStatsReporter(ctx) + if statsReporter == nil { + logger.Debug("Creating stats reporter") + var err error + statsReporter, err = NewStatsReporter(controllerAgentName) + if err != nil { + logger.Fatal(err) + } + } + base := &Base{ KubeClientSet: kubeClient, SharedClientSet: sharedclient.Get(ctx), @@ -107,6 +120,7 @@ func NewBase(ctx context.Context, controllerAgentName string, cmw configmap.Watc DynamicClientSet: dynamicclient.Get(ctx), ConfigMapWatcher: cmw, Recorder: recorder, + StatsReporter: statsReporter, Logger: logger, } diff --git a/pkg/reconciler/stats_reporter.go b/pkg/reconciler/stats_reporter.go new file mode 100644 index 00000000..318c1338 --- /dev/null +++ b/pkg/reconciler/stats_reporter.go @@ -0,0 +1,136 @@ +/* +Copyright 2018 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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package reconciler + +import ( + "context" + "fmt" + "time" + + "go.opencensus.io/stats" + "go.opencensus.io/stats/view" + "go.opencensus.io/tag" + "knative.dev/pkg/metrics" +) + +const ( + // reconcileCountN is the number of successful reconcile operations. + reconcileCountN = "knative_operator_reconcile_count" + // reconcileLatencyN is the time it takes for a sucessful reconcile operation. + reconcileLatencyN = "knative_operator_reconcile_latency" +) + +var ( + reconcileCountStat = stats.Int64( + reconcileCountN, + "Number of reconcile operations", + stats.UnitNone) + reconcileLatencyStat = stats.Int64( + reconcileLatencyN, + "Latency of reconcile operations", + stats.UnitMilliseconds) + + // Create the tag keys that will be used to add tags to our measurements. + // Tag keys must conform to the restrictions described in + // go.opencensus.io/tag/validate.go. Currently those restrictions are: + // - length between 1 and 255 inclusive + // - characters are printable US-ASCII + reconcilerTagKey = tag.MustNewKey("reconciler") + keyTagKey = tag.MustNewKey("key") +) + +func init() { + // Create views to see our measurements. This can return an error if + // a previously-registered view has the same name with a different value. + // View name defaults to the measure name if unspecified. + if err := view.Register( + &view.View{ + Description: "Number of reconcile operations", + Measure: reconcileCountStat, + Aggregation: view.Count(), + TagKeys: []tag.Key{reconcilerTagKey, keyTagKey}, + }, + &view.View{ + Description: "Latency of reconcile operations", + Measure: reconcileLatencyStat, + Aggregation: view.LastValue(), + TagKeys: []tag.Key{reconcilerTagKey, keyTagKey}, + }, + ); err != nil { + panic(err) + } +} + +// StatsReporter defines the interface for sending metrics +type StatsReporter interface { + // ReportReconcile reports the count and latency metrics for a reconcile operation + ReportReconcile(resourceNamespace, resourceName string, duration time.Duration) error +} + +// Reporter holds cached metric objects to report metrics +type reporter struct { + reconciler string + ctx context.Context +} + +// srKey is used to associate StatsReporters with contexts. +type srKey struct{} + +// WithStatsReporter attaches the given StatsReporter to the provided context +// in the returned context. +func WithStatsReporter(ctx context.Context, sr StatsReporter) context.Context { + return context.WithValue(ctx, srKey{}, sr) +} + +// GetStatsReporter attempts to look up the StatsReporter on a given context. +// It may return null if none is found. +func GetStatsReporter(ctx context.Context) StatsReporter { + untyped := ctx.Value(srKey{}) + if untyped == nil { + return nil + } + return untyped.(StatsReporter) +} + +// NewStatsReporter creates a reporter that collects and reports metrics +func NewStatsReporter(reconciler string) (StatsReporter, error) { + // Reconciler tag is static. Create a context containing that and cache it. + ctx, err := tag.New( + context.Background(), + tag.Insert(reconcilerTagKey, reconciler)) + if err != nil { + return nil, err + } + + return &reporter{reconciler: reconciler, ctx: ctx}, nil +} + +// ReportReconcile reports the count and latency metrics for a reconcile operation +func (r *reporter) ReportReconcile(resourceNamespace, resourceName string, duration time.Duration) error { + key := fmt.Sprintf("%s/%s", resourceNamespace, resourceName) + ctx, err := tag.New( + context.Background(), + tag.Insert(reconcilerTagKey, r.reconciler), + tag.Insert(keyTagKey, key)) + if err != nil { + return err + } + + metrics.Record(ctx, reconcileCountStat.M(1)) + metrics.Record(ctx, reconcileLatencyStat.M(duration.Milliseconds())) + return nil +} diff --git a/pkg/reconciler/stats_reporter_test.go b/pkg/reconciler/stats_reporter_test.go new file mode 100644 index 00000000..419d7e46 --- /dev/null +++ b/pkg/reconciler/stats_reporter_test.go @@ -0,0 +1,91 @@ +/* +Copyright 2018 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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package reconciler + +import ( + "context" + "fmt" + "testing" + "time" + + "go.opencensus.io/stats/view" + "go.opencensus.io/tag" + + "knative.dev/pkg/metrics/metricstest" +) + +const ( + reconcilerMockName = "mock_reconciler" + testResourceNamespace = "test_namespace" + testResourceName = "test_resource" +) + +func TestNewStatsReporter(t *testing.T) { + r, err := NewStatsReporter(reconcilerMockName) + if err != nil { + t.Errorf("Failed to create reporter: %v", err) + } + + m := tag.FromContext(r.(*reporter).ctx) + v, ok := m.Value(reconcilerTagKey) + if !ok { + t.Fatalf("Expected tag %q", reconcilerTagKey) + } + if v != reconcilerMockName { + t.Fatalf("Expected %q for tag %q, got %q", reconcilerMockName, reconcilerTagKey, v) + } +} + +func TestReporter_ReportDuration(t *testing.T) { + reporter, err := NewStatsReporter(reconcilerMockName) + if err != nil { + t.Errorf("Failed to create reporter: %v", err) + } + countWas := int64(0) + if m := getMetric(t, reconcileCountN); m != nil { + countWas = m.Data.(*view.CountData).Value + } + + if err = reporter.ReportReconcile(testResourceNamespace, testResourceName, time.Second); err != nil { + t.Error(err) + } + expectedTags := map[string]string{ + keyTagKey.Name(): fmt.Sprintf("%s/%s", testResourceNamespace, testResourceName), + reconcilerTagKey.Name(): reconcilerMockName, + } + + metricstest.CheckCountData(t, reconcileCountN, expectedTags, countWas+1) + metricstest.CheckLastValueData(t, reconcileLatencyN, expectedTags, 1000) +} + +func getMetric(t *testing.T, metric string) *view.Row { + t.Helper() + rows, err := view.RetrieveData(metric) + if err != nil { + t.Errorf("Failed retrieving data: %v", err) + } + if len(rows) == 0 { + return nil + } + return rows[0] +} + +func TestWithStatsReporter(t *testing.T) { + if WithStatsReporter(context.TODO(), nil) == nil { + t.Errorf("stats reporter reports empty context") + } +} From a75e3d4c779b2840784bef49bbc4a06e0c80d005 Mon Sep 17 00:00:00 2001 From: jihuin <56172920+jihuin@users.noreply.github.com> Date: Tue, 12 Nov 2019 16:31:15 -0800 Subject: [PATCH 3/6] Revert "Added stats reporter to emit metrics when reconciling knative serving" This reverts commit 86d46bd7e793a8589fd74d66420c6993eef9fc21. --- .../knativeserving_controller.go | 4 - pkg/reconciler/reconciler.go | 14 -- pkg/reconciler/stats_reporter.go | 136 ------------------ pkg/reconciler/stats_reporter_test.go | 91 ------------ 4 files changed, 245 deletions(-) delete mode 100644 pkg/reconciler/stats_reporter.go delete mode 100644 pkg/reconciler/stats_reporter_test.go diff --git a/pkg/reconciler/knativeserving/knativeserving_controller.go b/pkg/reconciler/knativeserving/knativeserving_controller.go index e42f20d0..f870046c 100644 --- a/pkg/reconciler/knativeserving/knativeserving_controller.go +++ b/pkg/reconciler/knativeserving/knativeserving_controller.go @@ -18,7 +18,6 @@ package knativeserving import ( "context" - "time" mf "github.com/jcrossley3/manifestival" "go.uber.org/zap" @@ -61,7 +60,6 @@ var _ controller.Reconciler = (*Reconciler)(nil) // converge the two. It then updates the Status block of the Knativeserving resource // with the current status of the resource. func (r *Reconciler) Reconcile(ctx context.Context, key string) error { - tStart := time.Now() // Convert the namespace/name string into a distinct namespace and name namespace, name, err := cache.SplitMetaNamespaceKey(key) if err != nil { @@ -106,8 +104,6 @@ func (r *Reconciler) Reconcile(ctx context.Context, key string) error { r.Recorder.Event(knativeServing, corev1.EventTypeWarning, "InternalError", reconcileErr.Error()) return reconcileErr } - - r.StatsReporter.ReportReconcile(namespace, name, time.Since(tStart)) return nil } diff --git a/pkg/reconciler/reconciler.go b/pkg/reconciler/reconciler.go index 5a1541bd..13006956 100644 --- a/pkg/reconciler/reconciler.go +++ b/pkg/reconciler/reconciler.go @@ -62,9 +62,6 @@ type Base struct { // Kubernetes API. Recorder record.EventRecorder - // StatsReporter reports reconciler's metrics. - StatsReporter StatsReporter - // Sugared logger is easier to use but is not as performant as the // raw logger. In performance critical paths, call logger.Desugar() // and use the returned raw logger instead. In addition to the @@ -103,16 +100,6 @@ func NewBase(ctx context.Context, controllerAgentName string, cmw configmap.Watc }() } - statsReporter := GetStatsReporter(ctx) - if statsReporter == nil { - logger.Debug("Creating stats reporter") - var err error - statsReporter, err = NewStatsReporter(controllerAgentName) - if err != nil { - logger.Fatal(err) - } - } - base := &Base{ KubeClientSet: kubeClient, SharedClientSet: sharedclient.Get(ctx), @@ -120,7 +107,6 @@ func NewBase(ctx context.Context, controllerAgentName string, cmw configmap.Watc DynamicClientSet: dynamicclient.Get(ctx), ConfigMapWatcher: cmw, Recorder: recorder, - StatsReporter: statsReporter, Logger: logger, } diff --git a/pkg/reconciler/stats_reporter.go b/pkg/reconciler/stats_reporter.go deleted file mode 100644 index 318c1338..00000000 --- a/pkg/reconciler/stats_reporter.go +++ /dev/null @@ -1,136 +0,0 @@ -/* -Copyright 2018 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. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package reconciler - -import ( - "context" - "fmt" - "time" - - "go.opencensus.io/stats" - "go.opencensus.io/stats/view" - "go.opencensus.io/tag" - "knative.dev/pkg/metrics" -) - -const ( - // reconcileCountN is the number of successful reconcile operations. - reconcileCountN = "knative_operator_reconcile_count" - // reconcileLatencyN is the time it takes for a sucessful reconcile operation. - reconcileLatencyN = "knative_operator_reconcile_latency" -) - -var ( - reconcileCountStat = stats.Int64( - reconcileCountN, - "Number of reconcile operations", - stats.UnitNone) - reconcileLatencyStat = stats.Int64( - reconcileLatencyN, - "Latency of reconcile operations", - stats.UnitMilliseconds) - - // Create the tag keys that will be used to add tags to our measurements. - // Tag keys must conform to the restrictions described in - // go.opencensus.io/tag/validate.go. Currently those restrictions are: - // - length between 1 and 255 inclusive - // - characters are printable US-ASCII - reconcilerTagKey = tag.MustNewKey("reconciler") - keyTagKey = tag.MustNewKey("key") -) - -func init() { - // Create views to see our measurements. This can return an error if - // a previously-registered view has the same name with a different value. - // View name defaults to the measure name if unspecified. - if err := view.Register( - &view.View{ - Description: "Number of reconcile operations", - Measure: reconcileCountStat, - Aggregation: view.Count(), - TagKeys: []tag.Key{reconcilerTagKey, keyTagKey}, - }, - &view.View{ - Description: "Latency of reconcile operations", - Measure: reconcileLatencyStat, - Aggregation: view.LastValue(), - TagKeys: []tag.Key{reconcilerTagKey, keyTagKey}, - }, - ); err != nil { - panic(err) - } -} - -// StatsReporter defines the interface for sending metrics -type StatsReporter interface { - // ReportReconcile reports the count and latency metrics for a reconcile operation - ReportReconcile(resourceNamespace, resourceName string, duration time.Duration) error -} - -// Reporter holds cached metric objects to report metrics -type reporter struct { - reconciler string - ctx context.Context -} - -// srKey is used to associate StatsReporters with contexts. -type srKey struct{} - -// WithStatsReporter attaches the given StatsReporter to the provided context -// in the returned context. -func WithStatsReporter(ctx context.Context, sr StatsReporter) context.Context { - return context.WithValue(ctx, srKey{}, sr) -} - -// GetStatsReporter attempts to look up the StatsReporter on a given context. -// It may return null if none is found. -func GetStatsReporter(ctx context.Context) StatsReporter { - untyped := ctx.Value(srKey{}) - if untyped == nil { - return nil - } - return untyped.(StatsReporter) -} - -// NewStatsReporter creates a reporter that collects and reports metrics -func NewStatsReporter(reconciler string) (StatsReporter, error) { - // Reconciler tag is static. Create a context containing that and cache it. - ctx, err := tag.New( - context.Background(), - tag.Insert(reconcilerTagKey, reconciler)) - if err != nil { - return nil, err - } - - return &reporter{reconciler: reconciler, ctx: ctx}, nil -} - -// ReportReconcile reports the count and latency metrics for a reconcile operation -func (r *reporter) ReportReconcile(resourceNamespace, resourceName string, duration time.Duration) error { - key := fmt.Sprintf("%s/%s", resourceNamespace, resourceName) - ctx, err := tag.New( - context.Background(), - tag.Insert(reconcilerTagKey, r.reconciler), - tag.Insert(keyTagKey, key)) - if err != nil { - return err - } - - metrics.Record(ctx, reconcileCountStat.M(1)) - metrics.Record(ctx, reconcileLatencyStat.M(duration.Milliseconds())) - return nil -} diff --git a/pkg/reconciler/stats_reporter_test.go b/pkg/reconciler/stats_reporter_test.go deleted file mode 100644 index 419d7e46..00000000 --- a/pkg/reconciler/stats_reporter_test.go +++ /dev/null @@ -1,91 +0,0 @@ -/* -Copyright 2018 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. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package reconciler - -import ( - "context" - "fmt" - "testing" - "time" - - "go.opencensus.io/stats/view" - "go.opencensus.io/tag" - - "knative.dev/pkg/metrics/metricstest" -) - -const ( - reconcilerMockName = "mock_reconciler" - testResourceNamespace = "test_namespace" - testResourceName = "test_resource" -) - -func TestNewStatsReporter(t *testing.T) { - r, err := NewStatsReporter(reconcilerMockName) - if err != nil { - t.Errorf("Failed to create reporter: %v", err) - } - - m := tag.FromContext(r.(*reporter).ctx) - v, ok := m.Value(reconcilerTagKey) - if !ok { - t.Fatalf("Expected tag %q", reconcilerTagKey) - } - if v != reconcilerMockName { - t.Fatalf("Expected %q for tag %q, got %q", reconcilerMockName, reconcilerTagKey, v) - } -} - -func TestReporter_ReportDuration(t *testing.T) { - reporter, err := NewStatsReporter(reconcilerMockName) - if err != nil { - t.Errorf("Failed to create reporter: %v", err) - } - countWas := int64(0) - if m := getMetric(t, reconcileCountN); m != nil { - countWas = m.Data.(*view.CountData).Value - } - - if err = reporter.ReportReconcile(testResourceNamespace, testResourceName, time.Second); err != nil { - t.Error(err) - } - expectedTags := map[string]string{ - keyTagKey.Name(): fmt.Sprintf("%s/%s", testResourceNamespace, testResourceName), - reconcilerTagKey.Name(): reconcilerMockName, - } - - metricstest.CheckCountData(t, reconcileCountN, expectedTags, countWas+1) - metricstest.CheckLastValueData(t, reconcileLatencyN, expectedTags, 1000) -} - -func getMetric(t *testing.T, metric string) *view.Row { - t.Helper() - rows, err := view.RetrieveData(metric) - if err != nil { - t.Errorf("Failed retrieving data: %v", err) - } - if len(rows) == 0 { - return nil - } - return rows[0] -} - -func TestWithStatsReporter(t *testing.T) { - if WithStatsReporter(context.TODO(), nil) == nil { - t.Errorf("stats reporter reports empty context") - } -} From 885f020301de223be14515f7eea0ad11d1230af6 Mon Sep 17 00:00:00 2001 From: jihuin <56172920+jihuin@users.noreply.github.com> Date: Tue, 12 Nov 2019 16:32:47 -0800 Subject: [PATCH 4/6] Sync with upstream --- cmd/manager/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/manager/main.go b/cmd/manager/main.go index 2ea0102f..d8cdab9e 100644 --- a/cmd/manager/main.go +++ b/cmd/manager/main.go @@ -32,5 +32,5 @@ func main() { if err != nil { log.Fatal("Error building kubeconfig", err) } - sharedmain.MainWithConfig(signals.NewContext(), "serving-operator", cfg, knativeserving.NewController) + sharedmain.MainWithConfig(signals.NewContext(), "serving_operator", cfg, knativeserving.NewController) } From b8e0c3aacf84fcd37ba90beb92532af76c7aebe1 Mon Sep 17 00:00:00 2001 From: jihuin Date: Tue, 12 Nov 2019 17:23:28 -0800 Subject: [PATCH 5/6] Changed the component name from 'serving_operator' to 'operator' --- cmd/manager/main.go | 2 +- config/operator.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/manager/main.go b/cmd/manager/main.go index d8cdab9e..5be01008 100644 --- a/cmd/manager/main.go +++ b/cmd/manager/main.go @@ -32,5 +32,5 @@ func main() { if err != nil { log.Fatal("Error building kubeconfig", err) } - sharedmain.MainWithConfig(signals.NewContext(), "serving_operator", cfg, knativeserving.NewController) + sharedmain.MainWithConfig(signals.NewContext(), "operator", cfg, knativeserving.NewController) } diff --git a/config/operator.yaml b/config/operator.yaml index 5ffe71e6..51ff5724 100644 --- a/config/operator.yaml +++ b/config/operator.yaml @@ -36,6 +36,6 @@ spec: value: config-logging - name: CONFIG_OBSERVABILITY_NAME value: config-observability - ports: + ports: - name: metrics containerPort: 9090 From 568f225ee4c4c957431b133d6b24eef947ec0c0b Mon Sep 17 00:00:00 2001 From: jihuin Date: Thu, 14 Nov 2019 12:54:41 -0800 Subject: [PATCH 6/6] Changed the component name to `serving_operator` --- cmd/manager/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/manager/main.go b/cmd/manager/main.go index 5be01008..d8cdab9e 100644 --- a/cmd/manager/main.go +++ b/cmd/manager/main.go @@ -32,5 +32,5 @@ func main() { if err != nil { log.Fatal("Error building kubeconfig", err) } - sharedmain.MainWithConfig(signals.NewContext(), "operator", cfg, knativeserving.NewController) + sharedmain.MainWithConfig(signals.NewContext(), "serving_operator", cfg, knativeserving.NewController) }