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 配置文件

  1. 进入到 Minikube 容器
docker exec -it minikube bash
  1. 进入 K8s 配置路径
cd /etc/kubernetes

其中 manifests 目录里存放着 K8s 所有的核心组件的 yaml 文件。
在这里插入图片描述

  1. 以 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.yamlmanifests 文件夹中移走,则 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. 验证

  1. 打上断点
    在这里插入图片描述
  2. 点击 Goland 的 debug 按钮
  3. 运行一个 pod
kubectl run  busybox  --image=busybox:1.28
  1. 可以捕捉到程序,进入到断点在这里插入图片描述
    同时 pod 处于 pending 阶段:
kubectl get pod -A

在这里插入图片描述
如此,大功告成,可以 debug K8s 源码了!!

5. 参考

《K8s 源码剖析及debug实战(一):Minikube 安装及源码准备》

欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

也欢迎关注我的wx公众号:一个比特定乾坤请添加图片描述

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SmallerFL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值