100 - k8s源码分析-准备工作
今天我们开始讲kubernetes的源码!
之前的其他开源项目还没有说完,后续会陆陆续续更新,我们把主线先放到k8s的源码上。
之前我想详细讲解每一行k8s源码,但是越看越发现一个大型开源项目如果拘泥于每一行的逻辑,很容易把战线拉得太长,最后失去兴趣。所以今天我们先聊聊源码该怎么看。
1、目标
我们为什么要看k8s源码?
我认为无非是提升golang功力、深入k8s原理、参与k8s社区,最后成为一个资深的云计算技术人,享受技术的乐趣(当然云计算技术栈之大不是一个k8s所能代表的,但是显然云计算已经离不开k8s,有能力参与k8s社区的工程师后续继续深入各种cncf技术也会轻松很多,cncf里涉及的各种技术基本奠定了paas,或者说容器云的基础)。
2、方法
第一步:熟悉k8s的基本功能,理解各个组件的分工,做到心中有数,但是不拘泥于掌握每一个功能细节,因为很多特性在日常开发中很难用到(比如各种alpha阶段的api,生产中不会让用的)。
第二步:选定第一个要深入研究的组件,概览其支持的所有子命令和flag,知道该组件能实现哪些功能(知道基于什么实现,和哪些组件打交道),比如看kube-proxy至少先知道是用iptables实现的,得先补补iptables的知识。
第三步:选定源码版本,不要追求master分支,天天变想想也心累啊!建议选一个相对新的,或者是你们公司正在使用的版本
第四步:准备编译、测试环境。也就是一个至少能够把你看的组件编译出来,能够运行起来后debug的环境,这样才能在debug中看各种你在读源码时不理解的对象在运行中到底存了哪些数据。
第五步:最快的速度抓住代码主线,泛读源码。
第六步:针对特定功能精读,调试,深入理解。
第七步:整体精读,适当深入三方库,公共库,绘制整理单个组件架构图、流程图等,帮助自己理解整个组件工作全流程,在平时使用中遇到bug后能够快速反应过来是哪个模块的问题。
最后:读完所有组件后融会贯通,理解各种公共库的抽取逻辑,整个k8s了然于胸!
今天准备啥?
我们选择从1.10版本入手,一方面是目前1.9及之前版本的资料比较多,1.10是不久的将来资料会比较丰富,用户基数比较多的一个版本,所以等到多数人看到本教程的时候,有不懂的地方到网上查时相对1.12这种新版会更轻松。另外是我们在项目中选型用了1.10版本,在近一两年工作中我主要使用的也是1.10版本(当然社区新特性会关注,参与社区也是跟着master走)。
今天我们需要下载好1.10版本的源码,准备go开发环境。
->下代码:
$ git clone https://github.com/kubernetes/kubernetes.git
->本地路径:
$ D:\go\src\k8s.io\kubernetes
->gopath:
$ D:\go\src
ok,go开发环境配置默认大家都是会的,不然也不适合开始后面的学习。
kubernetes的编译和debug环境后面我们再准备,下一讲我们先开始过scheduler组件的逻辑,熟悉代码后再准备环境开始debug。

100 - k8s源码分析-准备工作的更多相关文章
- k8s源码分析准备工作 - 源码准备
本文原始地址:https://farmer-hutao.github.io/k8s-source-code-analysis/ 项目github地址:https://github.com/farmer ...
- 《k8s 源码分析》- Custom Controller 之 Informer
Custom Controller 之 Informer 概述 架构概览 reflector - List & Watch API Server Reflector 对象 ListAndWat ...
- k8s源码分析之kubelet
一.概述 二.Kubelet对象创建过程:(pkg/kubelet/kubelet.go ) NewMainKubelet 正如名字所示,主要的工作就是创建 Kubelet 这个对象,它包含了 kub ...
- CBV源码分析+APIVIew源码分析
{drf,resful,apiview,序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,URL控制器,版本控制} 一.CBV源码分析准备工作: 新建一个Django项目 写 ...
- 7.深入k8s:任务调用Job与CronJob及源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 在使用job中,我会结合源码进行一定的讲解,我们也可以从源码中一窥究竟,一些细节k8s是 ...
- 11.深入k8s:kubelet工作原理及源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 kubelet信息量是很大的,通过我这一篇文章肯定是讲不全的,大家可 ...
- Spring IOC源码分析之-刷新前的准备工作
目录 ClassPathXmlApplicationContext的注册方式 加载父子容器 配置路径解析 容器刷新 刷新容器之刷新预处理 ClassPathXmlApplicationContext的 ...
- k8s client-go源码分析 informer源码分析(1)-概要分析
k8s informer概述 我们都知道可以使用k8s的Clientset来获取所有的原生资源对象,那么怎么能持续的获取集群的所有资源对象,或监听集群的资源对象数据的变化呢?这里不需要轮询去不断执行L ...
- k8s client-go源码分析 informer源码分析(2)-初始化与启动分析
k8s client-go源码分析 informer源码分析(2)-初始化与启动分析 前面一篇文章对k8s informer做了概要分析,本篇文章将对informer的初始化与启动进行分析. info ...
随机推荐
- 【bzoj 3306】树
Description 给定一棵大小为 n 的有根点权树,支持以下操作: • 换根 • 修改点权 • 查询子树最小值 Input 第一行两个整数 n, Q ,分别表示树的大小和操作数. ...
- BZOJ_1833_[ZJOI2010]count 数字计数_数位DP
BZOJ_1833_[ZJOI2010]count 数字计数_数位DP 题意: 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 分析: 数位DP f[i][ ...
- springboot2.x里面访问静态资源的坑
在spring boot的自定义配置类继承 WebMvcConfigurationSupport 后,发现自动配置的静态资源路径( classpath:/META/resources/,classpa ...
- CSS 圣杯布局 / 双飞翼布局的实现
工作的越久,有些基础知识我们可能就逐渐淡忘了,今天我们来回顾一下css的圣杯布局和双飞翼布局, 这两个名词你可能不熟, 那三栏布局你肯定就非常熟悉了, 就是两边定宽, 中间自适应 的 布局 1 , 圣 ...
- 系统的讲解 - PHP 浮点数高精度运算
目录 概述 浮点数运算的"锅" 任意精度数学函数 常用数值处理方案 扩展 小结 概述 记录下,工作中遇到的坑 ... 关于 PHP 浮点数运算,特别是金融行业.电子商务订单管理.数 ...
- pandas和spark的dataframe互转
pandas的dataframe转spark的dataframe from pyspark.sql import SparkSession # 初始化spark会话 spark = SparkSess ...
- HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
题图:by @Olga Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header)和实体组成.大多数 HT ...
- Android根据word模板文档将表单数据生成word文档的方案整理
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 尝试的方案包括以下几种: freemarker 只能在java项目上运行,无法在Android项目上运行: 参考资料:<Fre ...
- web项目自定义路由_实现静态资源URL控制
前言: IIS会默认把:图片.JS.HTML.CSS这些文件当成静态资源处理,为了减少服务器压力,默认这些静态资源是不走URL路由规则控制的. 作为小白及初学者,本人对这些了解甚少,补充基础知识吧: ...
- maven 依赖中scope标签的配置范围详解
在创建Maven项目时,需要在pom.xml 文件中添加相应的依赖,其中有一个scope标签,该标签是设置该依赖范围 (maven项目包含三种classpath{编译classpath,测试class ...