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 ...
随机推荐
- 根据http协议下载文件保存到相应的文件下
本实例通过提供的http网址来下载文件,并保存到本地指定的文件下. 本例提供的网址为:http://112.53.80.131:8888/database/11.mdb,下载的文件名为:11.mdb ...
- BZOJ_5118_Fib数列2_矩阵乘法+欧拉定理
BZOJ_5118_Fib数列2_矩阵乘法+欧拉定理 Description Fib定义为Fib(0)=0,Fib(1)=1,对于n≥2,Fib(n)=Fib(n-1)+Fib(n-2) 现给出N,求 ...
- laravel rbac的用户 角色 权限的crud
user.php <?php /* |-------------------------------------------------------------------------- | W ...
- SpringBoot集成Security,JWT,Swagger全分析
GitHub地址: https://github.com/li-jun0201/springsecuritydemo本项目采用SpringBoot1.5.9, SpringSecurity,JWT, ...
- Spring事务的一些特性
事务的四大特征 1.原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做 2.一致性:数据不会因为事务的执行而遭到破坏 3.隔离性:一个事物的执行,不受其他事务的干扰,即并 ...
- 常用 Linux 命令的基本使用
常用 Linux 命令的基本使用 操作系统 作用:管理好硬件设备,让软件可以和硬件发生交互类型 桌面操作系统 Windows macos linux 服务器操作系统 linux Windows ser ...
- ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理)
前言 时间一晃 ASP.NET Core已经迭代到2.1版本了. 迫不及待的的下载了最新的版本,然后生成了一个模版项目来试试水. ...然后就碰到问题了... 我发现..cookie竟然存不进去了.. ...
- 重磅!!!微软发布.NET Core 2.2
我们很高兴地宣布发布.NET Core 2.2.它包括对运行时的诊断改进,对ARM32 for Windows和Azure Active Directory for SQL Client的支持.此版本 ...
- 基于滴答清单 Web 开发的 PC 客户端
基于滴答清单 Web 开发的 PC 客户端 关于「滴答清单」 滴答清单是一款不可多得的 GTD 效率工具,它有着清晰明了的界面设计.恰到好处的功能设置.稳定的同步服务,如果你还缺少一款简洁而有效的 G ...
- C#相等性 - “==”
今天写一下C#里的“==”这个操作符. 原始类型 假象 在刚学C#的时候,我以为C#里的==和.NET里的object.Equals()方法是一样的,就是一个语法糖而已.其实它们的底层机制是不一样的, ...