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 3697】采药人的路径
题目链接: TP 题解: 调了好久233. 大概想一想就是树分,然后考虑这样路径(u,v)的特征,以根节点(root)切开,u到root的阴阳差值,和v到root巧合互为相反数,然后考虑要有一个点可作 ...
- BZOJ_1316_树上的询问_点分治
BZOJ_1316_树上的询问_点分治 Description 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. Input 第一行两个整 ...
- 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...
- MySQL--各版本DDL 操作总结
MySQL 5.5 DDL 在MySQL 5.5版本前,所有DDL操作都使用Copy Table的方式完成,操作过程中原表数据库不允许写入,只能读取,在MySQL 5.5版本中引入FIC(Fast i ...
- Description Resource Path Location Type Cannot change version of project facet Dynamic Web Module to 2.3.
报错信息:Description Resource Path Location Type Cannot change version of project facet Dynamic Web Modu ...
- 字符串、List集合、数组互转
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Songti SC"; color: #3933ff } p.p2 { ...
- .net core 注入机制与Autofac
本来是要先出注入机制再出 管道 的,哈哈哈……就是不按计划来…… 这里扯扯题外话:为什么要注入(DI,dependency-injection),而不用 new 对象? 可能我们都很清楚,new 对象 ...
- 干货,不小心执行了rm -f,除了跑路,如何恢复?
前言 每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有bug,呵呵. 那么如果真的删除了不该删除的文件,比如数据库. ...
- 解决ruby安装后无法添加淘宝gem源------------学习记录
使用sass ,需要安装ruby,会建议移除gem源,添加淘宝的gem源,但是淘宝的镜像源已经停止维护啦!!用https://gems.ruby-china.com 代替即可. 操作如下: 1)删除原 ...
- SAP MM 预留单据的历史修改记录?
SAP MM 预留单据的历史修改记录? 在笔者眼里,SAP系统是一个高度严谨的软件系统.用户在SAP系统里的相关操作,系统都会做记录.用户对于系统的相关单据的增删改,SAP系统都有保留change h ...