1.安装dlv
$ git clone https://github.com/go-delve/delve
$ cd delve
$ go install github.com/go-delve/delve/cmd/dlv
安装后dlv文件会在GOROOT/bin下。执行./bin有输出则是安装成功。为了方便可以把dlv注册一下
export PATH=$PATH:/root/go/bin
source ~/.bashrc
2.编译kubelet
前提已经部署了k8s服务
下载对应版本的k8s源码
cd kubernetes
编译kubelet 1.22.2

需要传入GOGCFLAGS,否则会设置成-w -s
make WHAT=“cmd/kubelet” GOGCFLAGS=“-N -l” GOLDFLAGS=“”
如果是其他版本,如1.25.3

make all WHAT=cmd/kubelet GOFLAGS=-v DBG=1
如果未指定DBG 会设置成-w -s
编译成功后的文件在_output/bin下
systemctl status kubelet

CGRPUP下的命令需要复制过来(我的停掉了所以没有)或者pe -ef | grep PID(29603)
正常是 1.22版本是
–bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml -v=9 --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.5 --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6
1.25.3版本是
–bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --container-runtime=remote --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8 --cgroup-driver=systemd
然后停掉kubelet
$ systemctl stop kubelet.service
执行dlv
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient exec /root/kubernetes/_output/bin/kubelet – --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml -v=9 --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.5 --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6
debug调试

之后就可以本地bebug打断点调试了