Description
What would you like to to?
Support contextual logging in Kubelet.
Why is this needed?
To implement https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/3077-contextual-logging
How to do it?
General instructions can be found here: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/migration-to-structured-logging.md
The approach I'd like to propose for Kubelet
is to do it directory by directory, making as little changes as possible to other components. If the first level directory requires a lot of changes, consider migrating its subdirectories in a separate PRs, e.g. instead of migrating pkg/kubelet/cm
at once, consider migrating pkg/kubelet/cm/cpumanager
, pkg/kubelet/cm/containermap
, etc.
Use context.TODO()
to create context that should be passed as an argument in future to avoid massive changes in other components. Add a comment explaining that this is a temporary solution and when it needs to be replaced by the direct context usage.
Look at the existing context.TODO()
and context.Background()
calls in the directory. Replace them by the ctx usage if possible. Replace context.Background()
with context.TODO()
if ctx is not yet accessible there.
After all source files in the directory are migrated, add the directory path to the ./hack/logcheck.conf
and run hack/update-golangci-lint-config.sh
to generate hack/golangci*.yaml
configs. This will prevent usage of non-contextual logging for the directory.
Last step of this migration is to migrate pkg/kubelet/*.go
, add pkg/kubelet
to the ./hack/logcheck.conf
, remove all its subdirectories from there and regenerate golangci
configs.
Which components are already migrated and which still need to be migrated?
- ./cmd/kubelet under review
- ./pkg/kubelet 273
- ./pkg/kubelet/cadvisor 0 done
- ./pkg/kubelet/checkpointmanager 0
- ./pkg/kubelet/client 0
- ./pkg/kubelet/clustertrustbundle 0 done
- ./pkg/kubelet/configmap 0
- ./pkg/kubelet/envvars 0
- ./pkg/kubelet/events 0
- ./pkg/kubelet/oom 0 done
- ./pkg/kubelet/pleg 0 done
- ./pkg/kubelet/qos 0
- ./pkg/kubelet/runtimeclass 0
- ./pkg/kubelet/secret 0
- ./pkg/kubelet/sysctl 0 done
- ./pkg/kubelet/token 0 done
- ./pkg/kubelet/types 0
- ./pkg/kubelet/apis 1 needs approval
- ./pkg/kubelet/kubeletconfig 1 needs approval
- ./pkg/kubelet/nodeshutdown 2 needs approval
- ./pkg/kubelet/pod 3 needs approval
- ./pkg/kubelet/preemption 3 needs approval
- ./pkg/kubelet/cloudresource 4 needs approval
- ./pkg/kubelet/container 5 needs approval
- ./pkg/kubelet/metrics 6 under review
- ./pkg/kubelet/userns 7 needs approval
- ./pkg/kubelet/watchdog 7 needs approval
- ./pkg/kubelet/nodestatus 9 needs approval
- ./pkg/kubelet/winstats 12 needs approval
- ./pkg/kubelet/lifecycle 13 needs approval
- ./pkg/kubelet/logs 14 needs approval
- ./pkg/kubelet/util 15 under review
- ./pkg/kubelet/certificate 17 under review
- ./pkg/kubelet/network 17 needs approval
- ./pkg/kubelet/images 22 needs approval
- ./pkg/kubelet/prober 29 needs approval
- ./pkg/kubelet/server 31 under review
- ./pkg/kubelet/config 35 needs approval
- ./pkg/kubelet/stats 36 under review
- ./pkg/kubelet/pluginmanager 37 needs approval
- ./pkg/kubelet/eviction 51 under review
- ./pkg/kubelet/status 57 done
- ./pkg/kubelet/volumemanager 72 under review
- ./pkg/kubelet/kuberuntime 150 needs approval
- ./pkg/kubelet/cm 428
- ./pkg/kubelet/cm/cpumanager 78 under review
- ./pkg/kubelet/cm/devicemanager 114 under review
- ./pkg/kubelet/cm/dra 0 done
- ./pkg/kubelet/cm/memorymanager 63 under review
- ./pkg/kubelet/cm/topologymanager 27 under review