K8s 源码剖析及debug实战(二):debug K8s 源码
文章目录
0. 引言
欢迎关注本专栏,本专栏主要从 K8s 源码出发,深入理解 K8s 一些组件底层的代码逻辑,同时借助 debug Minikube 来进一步了解 K8s 底层的代码运行逻辑细节,帮助我们更好的了解不为人知的运行机制,让自己学会如何调试源码,玩转 K8s。
本专栏适合于运维、开发以及希望精进 K8s 细节的同学。同时本人水平有限,尽量将本人理解的内容最大程度的展现给大家~
前情提要:
《K8s 源码剖析及debug实战(一):Minikube 安装及源码准备》
1. 启动 Minikube
其中 --kubernetes-version
可以选择其他版本,我这里用的是 v1.21.2
minikube start --driver=docker --image-mirror-country='cn' --image-repository='docker.io' --kubernetes-version=v1.21.2
如果启动遇到拉取镜像异常,参考《Mac 安装 Minikube 及解决 “[ERROR ImagePull]: failed to pull image“ 问题》 第4章。
当 K8s 所有管控面的组件拉起后,Minikube 才启动成功:
kubectl get pod -A
2. 停止 K8s 组件
下面以组件 kube-scheduler 为例,介绍如何 debug K8s。
2.1 找到 Minikube 容器
我这里的启动参数 --driver=docker
,说明 K8s 进程是在 docker 容器中的。
docker ps |grep minikube
2.2 找到 K8s 配置文件
- 进入到 Minikube 容器
docker exec -it minikube bash
- 进入 K8s 配置路径
cd /etc/kubernetes
其中 manifests
目录里存放着 K8s 所有的核心组件的 yaml 文件。
- 以 kube-scheduler 为例,查看启动命令
ps -ef |grep scheduler
从图中可以看到,这里的启动参数有配置文件 /etc/kubernetes/scheduler.conf
,因此将 /etc/kubernetes/scheduler.conf
保存下来,后续要用
2.3 停止组件
因为我们要用自己本地的代码代替环境中的组件,所以环境里的组件要停止,让逻辑走到本地来。以 kube-scheduler 为例:
mv /etc/kubernetes/manifests/kube-scheduler.yaml /etc/kubernetes/kube-scheduler.yaml
一旦把 kube-scheduler.yaml
从 manifests
文件夹中移走,则 K8s 的 kube-schedueler pod 会删除。环境没有 kube-schedueler pod:
3. Goland 配置
3.1 scheduler.conf 配置
将上节的 /etc/kubernetes/scheduler.conf
拷贝到源码的 cmd/kube-scheduler/scheduler.conf
。
注意,本地 scheduler.conf
的 server 需要修改:
具体的端口需要查看 docker:
docker ps |grep minikube
找到指向 8443/tcp
的,这里的端口就是上面要改的,也就是说,我们访问本地的 51891
端口,就可以访问到容器的 kube-scheduler
。
3.2 启动配置
启动参数:
--authentication-kubeconfig=cmd/kube-scheduler/scheduler.conf
--authorization-kubeconfig=cmd/kube-scheduler/scheduler.conf
--bind-address=127.0.0.1
--kubeconfig=cmd/kube-scheduler/scheduler.conf
--leader-elect=false
--port=0
4. 验证
- 打上断点
- 点击 Goland 的 debug 按钮
- 运行一个 pod
kubectl run busybox --image=busybox:1.28
- 可以捕捉到程序,进入到断点
同时 pod 处于 pending 阶段:
kubectl get pod -A
如此,大功告成,可以 debug K8s 源码了!!
5. 参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!