《k8s-1.13版本源码分析》-源码调试
源码分析系列文章已经开源到github,地址如下:
- github:https://github.com/farmer-hutao/k8s-source-code-analysis
- gitbook:https://farmer-hutao.github.io/k8s-source-code-analysis
源码调试
1. 概述
本节内容并不是在准备好k8s环境后就写的,大家也不需要在开始看源码前研究怎么调试代码。今天之前我已经发了《调度器优选过程》也就是差不多准备好k8s环境后一个月了。所以大家也可以先跳过本节,先开始看后面的源码分析,灵活把握开始调试源码的时间吧。
Debug应该是所有“攻城狮”的基本技能。除非是“Hello World”之类的小程序,不然都会出错,俗称bug,有bug就要debug. 今天不赘述调试本身的技术,我们只以调度器为例聊聊怎么把k8s的代码单步执行跑起来,看看内存里是个啥~
2. k8s环境
我们前面已经搭建了3节点的集群,相关组件主要是static pod的方式在运行,所以调试调度器的时候我们应该把kube-scheduler容器停掉:
1、找到static pod 的yaml文件:
这时候scheduler是运行状态:
2、挪开yaml文件,让scheduler停止:
这时候再看scheduler可以发现pod已经没了
3. 配置goland
在main函数前面点一下这个绿色的三角形,当然这样运行肯定会失败,但是点一下会为我们生成一些配置,可以简化很多事情。点完之后开始配置:
点击上面的Edit,可以看到下面窗口:
这里的Program arguments默认是空的,我们怎么知道这里配置啥呢?
从前面挪动的yaml中可以看到如下配置:
很明显,拷贝这个scheduler.conf到goland所在的机子,加上--kubeconfig
这个flag之后就可以运行了。从前面的截图中可以看到我是将其放在了/etc/kubernetes/scheduler.conf
.
开启调试:
如上,进入了熟悉的界面。
当然到这里还没有和api server交互,要进入调度逻辑需要有待调度的pod才行。我们使用前面验证环境的使用的tomcat:
创建这个Deployment之后可以看到pod是pending的:
我们把断点打在scheduleOne()里面:
非常熟悉的界面来了:
这样就能跟到调度器里的各种逻辑了。
当调度器跑完后,pod也就起来了:
最后说下我的goland是跑在哪里的:
- k8s master:29.123.161.240
- k8s node:29.123.161.207 29.123.161.208
- goland:29.123.161.241
所以goland不在k8s集群内。当然这个没有啥讲究,也可以跑在一起,灵活决定。
4. 写在后面
本来计划讲一下scheduler里的一些主要流程的调试,但是debug这一节放在调度器那章里感觉又不合适,最后决定放在环境准备里面。让新接触本书的小伙伴可以早点看到,灵活决定开始调试的时间。放在这里的话讲太多调度器的知识也不合适。所以这次就不多说具体代码的调试了,在各个章节里如果哪个模块讲解时我觉得需要插一个调试过程,就直接插在对应的地方吧~
《k8s-1.13版本源码分析》-源码调试的更多相关文章
- 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 百篇博客分析OpenHarmony源码 | v13.02
百篇博客系列篇.本篇为: v13.xx 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 51.c.h .o 几点说明 kernel_liteos_a_note | 中文注解鸿蒙内核 ...
- Flink源码分析 - 源码构建
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483692&idx=1&sn=18cddc1ee ...
- Elasticsearch源码分析 - 源码构建
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483694&idx=1&sn=bd03afe5a ...
- 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 百篇博客分析OpenHarmony源码 | v18.04
百篇博客系列篇.本篇为: v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 51.c.h .o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...
- Servlet-Cookie源码分析 源码环境:Tomcat8
最近在学习servlet的一些实现细节,阅读了Cookie的源码. Cookie本质上是服务器发送给客户端(主要是浏览器)的一个会话临时数据. 其源码注释文档的说明: Creates a cookie ...
- nginx源码分析-源码结构
本文主要简单介绍nginx源码目录结构.程序编译流程.如何构建学习nginx的环境等.本文以及后续nginx源码分析文章是基于nginx当前(2009-02-27)的稳定版本0.6.35进行的分析,该 ...
- Spring源码分析——源码分析环境搭建
1.在Windows上安装Gradle gradle工具类似于maven,用于项目的构建,此处主要用于构建spring源码,以便我们将spring源码导入eclipse. 开发环境 Java:JDK8 ...
- 【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码
[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-上位机源码 广东职业技术学院 欧浩源 一.需求分析 按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体 ...
- html5 canvas简易版捕鱼达人游戏源码
插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...
- java分析源码-ReentrantLock
一.前言 在分析了 AbstractQueuedSynchronier 源码后,接着分析ReentrantLock源码,其实在 AbstractQueuedSynchronizer 的分析中,已经提到 ...
随机推荐
- jdk和tomcat环境配置
一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. 2.安装Tomc ...
- 在win10下给vs2013配置opencv3.0
opencv这玩意是真难搞呀. 先吐槽下..... 下面进入正文. 1准备工具: opencv3.0+vs2013 这里面不提供链接下载,自行谷歌百度. 2配置环境: a.打开下载好的opencv(解 ...
- Java RandomAccessFile用法 【转】
RandomAccessFile源地址:http://blog.csdn.net/akon_vm/article/details/7429245 RandomAccessFile是用来访问那些保存数据 ...
- 115个Java面试题和答案——终极列表(下)【转】
第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...
- Linnux入门之简介
一.Linux简介 Minix(教授实验) -> Linux(大三学生Linus)企鹅作为吉祥物 linux主要分为内核版本和发行版本 linux 内核版本 :官网下载:https://www. ...
- Hibernate Session总结
现在我们可以在 IDEA 下新建一个 Hibernate 项目,接着上次内容这次主要总结一下 Hibernate 的 Session,及其核心方法. Session 概述 Session 接口是 Hi ...
- SSH X11 MAC
1. X11 for Mac 2. Ubuntu下通过SSH转发X窗口需要具备的条件 原文:http://unix.stackexchange.com/questions/12755/how- ...
- 浅谈java中的"=="和eqals区别
在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String(&qu ...
- Myeclipse10.7.1 导出war包报错
myeclipse10.7.1 导出war问题解决办法myeclipse10破解后,导出war包时报"SECURITY ALERT: INTEGERITY CHECK ERROR" ...
- MySql在生产环境中是用mysqldump还是xtrabackup备份和恢复数据
如题,究竟该使用mysqldump还是xtrabackup,要说用,两个都能备份,都支持热备,但是生产环境我们要考虑的是效率,就是不管备份还是恢复,都要快,要稳定. 之前我在维护mysql数据库的时候 ...