From fb190b49cd9a21b8a61a4422d574d193fcd2d514 Mon Sep 17 00:00:00 2001 From: Even Holthe Date: Mon, 3 Feb 2025 10:00:23 +0100 Subject: [PATCH] Add support for profiling via pprof Disabled by default in case we're incurring a performance hit --- cmd/skiperator/main.go | 11 +++++++++-- pkg/flags/flags.go | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/cmd/skiperator/main.go b/cmd/skiperator/main.go index d66a3475..65465786 100644 --- a/cmd/skiperator/main.go +++ b/cmd/skiperator/main.go @@ -3,6 +3,9 @@ package main import ( "flag" "fmt" + "os" + "strings" + "github.com/kartverket/skiperator/internal/controllers" "github.com/kartverket/skiperator/internal/controllers/common" "github.com/kartverket/skiperator/pkg/flags" @@ -10,9 +13,7 @@ import ( "github.com/kartverket/skiperator/pkg/resourceschemas" "k8s.io/client-go/discovery" "k8s.io/client-go/rest" - "os" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" - "strings" "go.uber.org/zap/zapcore" // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) @@ -69,6 +70,11 @@ func main() { detectK8sVersion(kubeconfig) + pprofBindAddr := "" + if flags.FeatureFlags.EnableProfiling { + pprofBindAddr = ":8281" + } + mgr, err := ctrl.NewManager(kubeconfig, ctrl.Options{ Scheme: scheme, HealthProbeBindAddress: ":8081", @@ -76,6 +82,7 @@ func main() { LeaderElectionNamespace: *leaderElectionNamespace, Metrics: metricsserver.Options{BindAddress: ":8181"}, LeaderElectionID: "skiperator", + PprofBindAddress: pprofBindAddr, }) if err != nil { setupLog.Error(err, "unable to start manager") diff --git a/pkg/flags/flags.go b/pkg/flags/flags.go index d775802e..388d7e8a 100644 --- a/pkg/flags/flags.go +++ b/pkg/flags/flags.go @@ -14,11 +14,13 @@ var FeatureFlags *Features // environment variables. type Features struct { DisablePodTopologySpreadConstraints bool + EnableProfiling bool } func init() { FeatureFlags = &Features{ DisablePodTopologySpreadConstraints: getEnvWithFallback("DISABLE_PTSC", false), + EnableProfiling: getEnvWithFallback("ENABLE_PROFILING", false), } }