《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 的分析中,已经提到 ...
随机推荐
- vim编辑器常见命令归纳大全
Esc:命令行模式 i:插入命令 a:附加命令 o:打开命令 c:修改命令 r:取代命令 s:替换命令 以上进入文本输入模式 : 进入末行模式 末行模式: w:保存 q:退出,没保存则无法退出 w ...
- STL-Map 源码剖析
G++ ,cygnus\cygwin-b20\include\g++\stl_map.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Compan ...
- JAVA学习资源分享
JAVA学习资源分享 最高端的JAVA架构师资源(来自龙果学院 价值¥1399元).JAVA互联网分布式架构(龙果学院 价值¥899元).Spring Boot(2017年最新 包括源码原理分析) + ...
- 【Service Fabric】小白入门记录 本地Service Fabric集群安装及设置
本篇内容是自学自记,现在我还不知道Service Fabric究竟是怎么个入门法,反正按照入门教程先进行本地Service Fabric集群的安装,万里路始于足下,要学习总得先把环境装好了才能开始学习 ...
- Urllib库的使用
一.任务描述 本实验任务主要对urllib库进行一些基本操作,通过完成本实验任务,要求学生熟练掌握urllib库的使用,并对urllib库的基本操作进行整理并填写工作任务报告. 二.任务目标 1. ...
- MySql Query Cache 优化
query cache原理 当mysql接收到一条select类型的query时,mysql会对这条query进行hash计算而得到一个hash值,然后通过该hash值到query cache中去匹配 ...
- 【线程系列五】什么时候释放锁—wait()、notify()
由于等待一个锁定线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不需要锁的时候及时释放锁是很重要的.在以下情况下,持有锁的线程会释放锁: 1. 执行完同步代码块. 2. 在执行 ...
- TGI
淘宝的很多分析会用到TGI这个指标,但是是如何计算的以及该如何理解和应用这个指标?TGI:即Target Group Index(目标群体指数)TGI指数= [目标群体中具有某一特征的群体所占比例/总 ...
- 浏览器中缓存Cache
在请求服务器资源时,服务器会将图片.网页文件等资源保存在客户端的临时文件夹中,称为缓存,当浏览器向服务器请求相同的资源时,如果与服务器版本一致,则从缓存读取 Cookie:服务器存放在 ...
- [ Java面试题 ]WEB篇
1.AJAX有哪些有点和缺点? 优点: 1.最大的一点是页面无刷新,用户的体验非常好. 2.使用异步方式与服务器通信,具有更加迅速的响应能力. 3.可以把以前一些服务器负担的工作转嫁到客户端,利用客户 ...