源码分析系列文章已经开源到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版本源码分析》-源码调试的更多相关文章

  1. 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 百篇博客分析OpenHarmony源码 | v13.02

    百篇博客系列篇.本篇为: v13.xx 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 51.c.h .o 几点说明 kernel_liteos_a_note | 中文注解鸿蒙内核 ...

  2. Flink源码分析 - 源码构建

    原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483692&idx=1&sn=18cddc1ee ...

  3. Elasticsearch源码分析 - 源码构建

    原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483694&idx=1&sn=bd03afe5a ...

  4. 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 百篇博客分析OpenHarmony源码 | v18.04

    百篇博客系列篇.本篇为: v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 51.c.h .o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...

  5. Servlet-Cookie源码分析 源码环境:Tomcat8

    最近在学习servlet的一些实现细节,阅读了Cookie的源码. Cookie本质上是服务器发送给客户端(主要是浏览器)的一个会话临时数据. 其源码注释文档的说明: Creates a cookie ...

  6. nginx源码分析-源码结构

    本文主要简单介绍nginx源码目录结构.程序编译流程.如何构建学习nginx的环境等.本文以及后续nginx源码分析文章是基于nginx当前(2009-02-27)的稳定版本0.6.35进行的分析,该 ...

  7. Spring源码分析——源码分析环境搭建

    1.在Windows上安装Gradle gradle工具类似于maven,用于项目的构建,此处主要用于构建spring源码,以便我们将spring源码导入eclipse. 开发环境 Java:JDK8 ...

  8. 【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码

    [CC2530入门教程-增强版]基础技能综合实训案例(基础版)-上位机源码 广东职业技术学院  欧浩源 一.需求分析 按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体 ...

  9. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  10. java分析源码-ReentrantLock

    一.前言 在分析了 AbstractQueuedSynchronier 源码后,接着分析ReentrantLock源码,其实在 AbstractQueuedSynchronizer 的分析中,已经提到 ...

随机推荐

  1. jdk和tomcat环境配置

    一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. 2.安装Tomc ...

  2. 在win10下给vs2013配置opencv3.0

    opencv这玩意是真难搞呀. 先吐槽下..... 下面进入正文. 1准备工具: opencv3.0+vs2013 这里面不提供链接下载,自行谷歌百度. 2配置环境: a.打开下载好的opencv(解 ...

  3. Java RandomAccessFile用法 【转】

    RandomAccessFile源地址:http://blog.csdn.net/akon_vm/article/details/7429245 RandomAccessFile是用来访问那些保存数据 ...

  4. 115个Java面试题和答案——终极列表(下)【转】

    第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...

  5. Linnux入门之简介

    一.Linux简介 Minix(教授实验) -> Linux(大三学生Linus)企鹅作为吉祥物 linux主要分为内核版本和发行版本 linux 内核版本 :官网下载:https://www. ...

  6. Hibernate Session总结

    现在我们可以在 IDEA 下新建一个 Hibernate 项目,接着上次内容这次主要总结一下 Hibernate 的 Session,及其核心方法. Session 概述 Session 接口是 Hi ...

  7. SSH X11 MAC

    1. X11 for Mac     2. Ubuntu下通过SSH转发X窗口需要具备的条件 原文:http://unix.stackexchange.com/questions/12755/how- ...

  8. 浅谈java中的"=="和eqals区别

    在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String(&qu ...

  9. Myeclipse10.7.1 导出war包报错

    myeclipse10.7.1 导出war问题解决办法myeclipse10破解后,导出war包时报"SECURITY ALERT: INTEGERITY CHECK ERROR" ...

  10. MySql在生产环境中是用mysqldump还是xtrabackup备份和恢复数据

    如题,究竟该使用mysqldump还是xtrabackup,要说用,两个都能备份,都支持热备,但是生产环境我们要考虑的是效率,就是不管备份还是恢复,都要快,要稳定. 之前我在维护mysql数据库的时候 ...