Skip to content

Commit 5fd00e4

Browse files
authored
Merge pull request #396 from aramase/enable-profiling
feat: add pprof profiling
2 parents d33adaa + dcd9e34 commit 5fd00e4

File tree

8 files changed

+50
-17
lines changed

8 files changed

+50
-17
lines changed

Makefile

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,13 @@ override IMAGE_VERSION := $(E2E_IMAGE_VERSION)
2424
endif
2525
IMAGE_TAG=$(REGISTRY)/$(IMAGE_NAME):$(IMAGE_VERSION)
2626
IMAGE_TAG_LATEST=$(REGISTRY)/$(IMAGE_NAME):latest
27-
LDFLAGS?='-X sigs.k8s.io/secrets-store-csi-driver/pkg/secrets-store.vendorVersion=$(IMAGE_VERSION) -extldflags "-static"'
27+
28+
BUILD_TIMESTAMP := $$(date +%Y-%m-%d-%H:%M)
29+
BUILD_COMMIT := $$(git rev-parse --short HEAD)
30+
31+
LDFLAGS?="-X sigs.k8s.io/secrets-store-csi-driver/pkg/version.BuildVersion=$(IMAGE_VERSION) \
32+
-X sigs.k8s.io/secrets-store-csi-driver/pkg/version.Vcs=$(BUILD_COMMIT) \
33+
-X sigs.k8s.io/secrets-store-csi-driver/pkg/version.BuildTime=$(BUILD_TIMESTAMP) --extldflags "-static""
2834
GO_FILES=$(shell go list ./... | grep -v /test/sanity)
2935

3036
.PHONY: all build image clean test-style

cmd/secrets-store-csi-driver/main.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@ package main
1919
import (
2020
"context"
2121
"flag"
22+
"fmt"
23+
"net/http"
24+
_ "net/http/pprof" // #nosec
2225
"strings"
2326
"time"
2427

2528
"sigs.k8s.io/secrets-store-csi-driver/pkg/metrics"
2629
"sigs.k8s.io/secrets-store-csi-driver/pkg/rotation"
30+
"sigs.k8s.io/secrets-store-csi-driver/pkg/version"
2731

2832
"k8s.io/apimachinery/pkg/runtime"
2933
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -54,6 +58,8 @@ var (
5458
grpcSupportedProviders = flag.String("grpc-supported-providers", "", "set list of providers that support grpc for driver-provider [alpha]")
5559
enableSecretRotation = flag.Bool("enable-secret-rotation", false, "Enable secret rotation feature [alpha]")
5660
rotationPollInterval = flag.Duration("rotation-poll-interval", 2*time.Minute, "Secret rotation poll interval duration")
61+
enableProfile = flag.Bool("enable-pprof", false, "enable pprof profiling")
62+
profilePort = flag.Int("pprof-port", 6065, "port for pprof profiling")
5763

5864
scheme = runtime.NewScheme()
5965
)
@@ -76,18 +82,22 @@ func main() {
7682
if *debug {
7783
klog.Warning("--debug flag has been DEPRECATED and will be removed in future releases. Use -v=<log level> to configure log verbosity.")
7884
}
85+
if *enableProfile {
86+
klog.Infof("Starting profiling on port %d", *profilePort)
87+
go func() {
88+
addr := fmt.Sprintf("%s:%d", "localhost", *profilePort)
89+
klog.ErrorS(http.ListenAndServe(addr, nil), "unable to start profiling server")
90+
}()
91+
}
7992

8093
// initialize metrics exporter before creating measurements
81-
// Issue: https://github.com/open-telemetry/opentelemetry-go/issues/677
82-
// this has been resolved in otel release v0.5.0
83-
// TODO (aramase) update to latest version of otel and deps
8494
err := metrics.InitMetricsExporter()
8595
if err != nil {
8696
klog.Fatalf("failed to initialize metrics exporter, error: %+v", err)
8797
}
8898

8999
cfg := ctrl.GetConfigOrDie()
90-
cfg.UserAgent = "csi-secrets-store/controller"
100+
cfg.UserAgent = version.GetUserAgent("controller")
91101

92102
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
93103
Scheme: scheme,

pkg/csi-common/driver.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,10 @@ func NewCSIDriver(name string, v string, nodeID string) *CSIDriver {
4242
klog.Errorf("Driver name missing")
4343
return nil
4444
}
45-
4645
if nodeID == "" {
4746
klog.Errorf("NodeID missing")
4847
return nil
4948
}
50-
// TODO version format and validation
5149
if len(v) == 0 {
5250
klog.Errorf("Version argument missing")
5351
return nil

pkg/rotation/reconciler.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import (
5050
"sigs.k8s.io/secrets-store-csi-driver/pkg/util/fileutil"
5151
"sigs.k8s.io/secrets-store-csi-driver/pkg/util/k8sutil"
5252
"sigs.k8s.io/secrets-store-csi-driver/pkg/util/secretutil"
53+
"sigs.k8s.io/secrets-store-csi-driver/pkg/version"
5354
)
5455

5556
const (
@@ -88,6 +89,7 @@ func NewReconciler(s *runtime.Scheme, providerVolumePath, nodeName string, rotat
8889
if err != nil {
8990
return nil, err
9091
}
92+
config.UserAgent = version.GetUserAgent("rotation")
9193
kubeClient := kubernetes.NewForConfigOrDie(config)
9294
crdClient := secretsStoreClient.NewForConfigOrDie(config)
9395
c, err := client.New(config, client.Options{Scheme: s, Mapper: nil})

pkg/secrets-store/secrets-store.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@ type SecretsStore struct {
3939
ids *identityServer
4040
}
4141

42-
var (
43-
vendorVersion = "0.0.17"
44-
)
45-
4642
// GetDriver returns a new secrets store driver
4743
func GetDriver() *SecretsStore {
4844
return &SecretsStore{}
@@ -90,15 +86,14 @@ func newIdentityServer(d *csicommon.CSIDriver) *identityServer {
9086
// Run starts the CSI plugin
9187
func (s *SecretsStore) Run(ctx context.Context, driverName, nodeID, endpoint, providerVolumePath, minProviderVersions string, providerClients map[string]*CSIProviderClient, client client.Client) {
9288
klog.Infof("Driver: %v ", driverName)
93-
klog.Infof("Version: %s", vendorVersion)
89+
klog.Infof("Version: %s, BuildTime: %s", version.BuildVersion, version.BuildTime)
9490
klog.Infof("Provider Volume Path: %s", providerVolumePath)
95-
klog.Infof("Minimum provider versions: %s", minProviderVersions)
9691
for p := range providerClients {
9792
klog.Infof("GRPC supported provider: %s", p)
9893
}
9994

10095
// Initialize default library driver
101-
s.driver = csicommon.NewCSIDriver(driverName, vendorVersion, nodeID)
96+
s.driver = csicommon.NewCSIDriver(driverName, version.BuildVersion, nodeID)
10297
if s.driver == nil {
10398
klog.Fatal("Failed to initialize SecretsStore CSI Driver.")
10499
}

pkg/secrets-store/secrets-store_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ package secretsstore
1919
import csicommon "sigs.k8s.io/secrets-store-csi-driver/pkg/csi-common"
2020

2121
const (
22-
fakeDriverName = "fake"
23-
fakeNodeID = "fakeNodeID"
22+
fakeDriverName = "fake"
23+
fakeNodeID = "fakeNodeID"
24+
fakeVendorVersion = "fakeDriverVersion"
2425
)
2526

2627
func NewFakeDriver() *csicommon.CSIDriver {
27-
driver := csicommon.NewCSIDriver(fakeDriverName, vendorVersion, fakeNodeID)
28+
driver := csicommon.NewCSIDriver(fakeDriverName, fakeVendorVersion, fakeNodeID)
2829
return driver
2930
}

pkg/version/version.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,28 @@ import (
1919
"encoding/json"
2020
"fmt"
2121
"os/exec"
22+
"runtime"
2223
"strings"
2324

2425
"github.com/blang/semver"
2526
"k8s.io/klog/v2"
2627
)
2728

29+
var (
30+
// Vcs is the commit hash for the binary build
31+
Vcs string
32+
// BuildTime is the date for the binary build
33+
BuildTime string
34+
// BuildVersion is the secrets-store-csi-driver version
35+
BuildVersion string
36+
)
37+
38+
// GetUserAgent returns a user agent of the format: csi-secrets-store/<controller name>/<version> (<goos>/<goarch>) <vcs>/<timestamp>
39+
func GetUserAgent(controllerName string) string {
40+
return fmt.Sprintf("csi-secrets-store/%s/%s (%s/%s) %s/%s", controllerName, BuildVersion, runtime.GOOS, runtime.GOARCH, Vcs, BuildTime)
41+
}
42+
43+
// TODO (aramase) remove these functions after all providers have switched to using gRPC
2844
// providerVersion holds current provider version
2945
type providerVersion struct {
3046
// Version is the current provider version

test/sanity/sanity_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ import (
1919
"os"
2020
"path/filepath"
2121
"testing"
22+
"time"
2223

2324
"github.com/kubernetes-csi/csi-test/v4/pkg/sanity"
2425

2526
secretsstore "sigs.k8s.io/secrets-store-csi-driver/pkg/secrets-store"
27+
"sigs.k8s.io/secrets-store-csi-driver/pkg/version"
2628
)
2729

2830
const (
@@ -47,6 +49,9 @@ func TestSanity(t *testing.T) {
4749
config.RemoveTargetPath = func(targetPath string) error {
4850
return os.RemoveAll(targetPath)
4951
}
52+
53+
version.BuildVersion = "mock"
54+
version.BuildTime = time.Now().String()
5055
sanity.Test(t, config)
5156
}
5257

0 commit comments

Comments
 (0)