Use the following manifest to dump the {heap,allocs,goroutine} profile of a running gardenlet every 10 minutes:
$ k apply -f profile-dump.yaml
deployment.apps/profile-dump created
persistentvolumeclaim/profile-dump created
$ kg get po,pvc -l app=profile-dump
NAME READY STATUS RESTARTS AGE
pod/profile-dump-58d456548b-csswx 1/1 Running 0 43s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/profile-dump Bound pv-foo-bar-0398ba56-dca7-467c-a525-17a2365fae1d 5Gi RWO default 43s
$ kg logs -f profile-dump-58d456548b-csswx
====== Tue Sep 14 09:33:05 UTC 2021 ======
Connecting to gardenlet.garden.svc:443 (10.243.45.107:443)
saving to '/var/profile-dump/gardenlet-20210914T093305Z-heap'
gardenlet-20210914T0 100% |********************************| 157k 0:00:00 ETA
'/var/profile-dump/gardenlet-20210914T093305Z-heap' saved
Connecting to gardenlet.garden.svc:443 (10.243.45.107:443)
saving to '/var/profile-dump/gardenlet-20210914T093305Z-allocs'
gardenlet-20210914T0 100% |********************************| 157k 0:00:00 ETA
'/var/profile-dump/gardenlet-20210914T093305Z-allocs' saved
Connecting to gardenlet.garden.svc:443 (10.243.45.107:443)
saving to '/var/profile-dump/gardenlet-20210914T093305Z-goroutine'
gardenlet-20210914T0 100% |********************************| 7274 0:00:00 ETA
'/var/profile-dump/gardenlet-20210914T093305Z-goroutine' saved
...Retrieve the profiles via kubectl cp and start pprof:
$ k cp garden/profile-dump-58d456548b-csswx:/var/profile-dump /tmp/profile-dump
tar: removing leading '/' from member names
$ go tool pprof -http :8080 /tmp/profile-dump/gardenlet-20210914T093305Z-heap
Serving web UI on http://localhost:8080Cleanup:
$ k delete -f profile-dump.yaml
deployment.apps "profile-dump" deleted
persistentvolumeclaim "profile-dump" deleted