K8s系列一之Controller Manager源码调试环境搭建

2024-09-01 10:58:10 浏览数 (2)

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文件,如下

manifestsmanifests

kube-controller-manager.yaml文件中定义的是Controller Manager的Pod配置,如下

CM PodCM Pod

将文件中的command的启动参数复制出来,然后将kube-controller-manager.yaml删除(一定要删除,修改文件名称都不行),确保kube-system这个命名空间没有Controller Manager组件,如下

No CM PodNo CM Pod

Goland配置

在Goland中找到Controller Manager的main函数以debug模式启动

CM MainCM Main

这里第一次启动肯定不成功,因为没有配置,主要是为了在Goland中添加一条启动的历史记录,然后点击Edit Configurations配置

Edit ConfigurationsEdit Configurations

这里主要配置下Program arguments参数,将刚才从kube-controller-manager.yaml文件复制出来的启动参数配置在这里,如果是非root用户启动的Goland,那么需要勾选上Run with sudo,不然启动的时候有些配置文件没权限加载,如下

Program ArgumentsProgram Arguments
Run With SudoRun With Sudo

配置好了之后再次启动即可,启动完成之后可以自己apply一个deployment试试看能不能转到Goland中,我本地的效果如下,

这样就可以愉快的deubg代码了

DebugDebug

0 人点赞