1 概要
本文主要介绍下如何在本地进行Controller Manager代码的调试,对于想要阅读各个控制器代码细节的同学可以参考参考。总的思路就是先在本地启动一个k8s集群,然后将Controller Manager组件删掉,然后将k8s的源码从github上clone下来,checkout到对应的版本,用Goland打开,找到Controller Manager的main函数以debug模式启动代替集群中的Controller Manager组件,这样就可以断点逐行调试。
2 环境准备
我本地使用的环境
操作系统:Ubuntu 20.04.3(虚拟机或者物理机)
Docker:20.10.8
Kubernetes:1.22.2
go:1.22.3
Goland:2024.2
安装k8s集群
在调试之前需要在本地安装一个k8s集群,由于只是调试Controller Manager,所以只需要一个单节点的集群即可,单节点的集群安装这里就不阐述了,网上很多。
删除Controller Manager组件
集群启动好之后,首先进入到/etc/kubernetes/manifests目录找到kube-controller-manager.yaml文件,如下
kube-controller-manager.yaml文件中定义的是Controller Manager的Pod配置,如下
将文件中的command的启动参数复制出来,然后将kube-controller-manager.yaml删除(一定要删除,修改文件名称都不行),确保kube-system这个命名空间没有Controller Manager组件,如下
Goland配置
在Goland中找到Controller Manager的main函数以debug模式启动
这里第一次启动肯定不成功,因为没有配置,主要是为了在Goland中添加一条启动的历史记录,然后点击Edit Configurations配置
这里主要配置下Program arguments参数,将刚才从kube-controller-manager.yaml文件复制出来的启动参数配置在这里,如果是非root用户启动的Goland,那么需要勾选上Run with sudo,不然启动的时候有些配置文件没权限加载,如下
配置好了之后再次启动即可,启动完成之后可以自己apply一个deployment试试看能不能转到Goland中,我本地的效果如下,
这样就可以愉快的deubg代码了