今天我们开始讲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源码分析-准备工作的更多相关文章

  1. k8s源码分析准备工作 - 源码准备

    本文原始地址:https://farmer-hutao.github.io/k8s-source-code-analysis/ 项目github地址:https://github.com/farmer ...

  2. 《k8s 源码分析》- Custom Controller 之 Informer

    Custom Controller 之 Informer 概述 架构概览 reflector - List & Watch API Server Reflector 对象 ListAndWat ...

  3. k8s源码分析之kubelet

    一.概述 二.Kubelet对象创建过程:(pkg/kubelet/kubelet.go ) NewMainKubelet 正如名字所示,主要的工作就是创建 Kubelet 这个对象,它包含了 kub ...

  4. CBV源码分析+APIVIew源码分析

    {drf,resful,apiview,序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,URL控制器,版本控制} 一.CBV源码分析准备工作: 新建一个Django项目 写 ...

  5. 7.深入k8s:任务调用Job与CronJob及源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 在使用job中,我会结合源码进行一定的讲解,我们也可以从源码中一窥究竟,一些细节k8s是 ...

  6. 11.深入k8s:kubelet工作原理及源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 kubelet信息量是很大的,通过我这一篇文章肯定是讲不全的,大家可 ...

  7. Spring IOC源码分析之-刷新前的准备工作

    目录 ClassPathXmlApplicationContext的注册方式 加载父子容器 配置路径解析 容器刷新 刷新容器之刷新预处理 ClassPathXmlApplicationContext的 ...

  8. k8s client-go源码分析 informer源码分析(1)-概要分析

    k8s informer概述 我们都知道可以使用k8s的Clientset来获取所有的原生资源对象,那么怎么能持续的获取集群的所有资源对象,或监听集群的资源对象数据的变化呢?这里不需要轮询去不断执行L ...

  9. k8s client-go源码分析 informer源码分析(2)-初始化与启动分析

    k8s client-go源码分析 informer源码分析(2)-初始化与启动分析 前面一篇文章对k8s informer做了概要分析,本篇文章将对informer的初始化与启动进行分析. info ...

随机推荐

  1. EffictiveC++笔记 第3章

    Chapter 3 资源管理 条款13: 以对象管理资源 有时即使你顺利地写了对应对象的delete语句,但是前面的区域可能会有一个过早的return语句或者抛出了异常.它们一旦执行,控制流绝不会触及 ...

  2. keras实现简单性别识别(二分类问题)

    keras实现简单性别识别(二分类问题) 第一步:准备好需要的库 tensorflow  1.4.0 h5py 2.7.0 hdf5 1.8.15.1 Keras     2.0.8 opencv-p ...

  3. 记录遭遇挖矿程序kthrotlds的失败处理经历

    1 发现问题 在腾讯云上购买了一个centos7的服务器,平时用来练手,偶尔也安装一些程序进行测试,上面安装了mysql和redis,前段时间数据库经常掉线,连不上,到腾讯云后台进行查看,通过服务器实 ...

  4. MIP技术进展月报第2期: 数据绑定,异步脚本加速

    一. 功能更新 1. mip-bind 上线,实现复杂交互 MIP bind 双向绑定机制和组件上线,提供双向绑定的特性:能够允许页面实现数据驱动功能,开发者可以在任意场景修改数据,并驱动页面元素变动 ...

  5. Redis学习——详解Redis配置文件(三)

    一.Redis脚本简介 在我们介绍Redis的配置文件之前,我们先来说一下Redis安装完成后生成的几个可执行文件: redis-server .redis-cli .redis-benchmark ...

  6. KnockoutJS知识规整目录

    对于Web开发来讲,前端接触是避免不了的,特别是对于中小公司,没有严格的职位区分,前后端人员互相身兼是常有的事情,使用一些好的框架,能够帮助我们快速开发并完成需要的功能,对于前端的JS框架来讲MVVM ...

  7. IdentityModel 中文文档(v1.0.0) 目录

    欢迎使用IdentityModel文档! 第一部分 协议客户端库 第1章 发现端点(Discovery Endpoint) 第2章 授权端点(Authorize Endpoint) 第3章 结束会话端 ...

  8. Eclipse4JavaEE安装SpringBoot

    第一步:下载SpringBoot SpringBoot官网下载链接 第二步:在Eclipse里进行安装 打开Eclipse,菜单栏Help ->Install New Software,进入下图 ...

  9. Java多线程与并发之面试常问题

    JAVA多线程与并发 进程与线程的区别 进程是资源分配的最小单位,线程是CPU调度的最小单位 所有与进程相关的资源,都被记录在PCB(进程控制块)中 进程是抢占处理机的调度单位:线程属于某个进程,共享 ...

  10. Django学习之十三:提高页面开发效率减少冗余的模板系统

    目录 Django 模板 模板语法 逻辑语法 函数式过滤器 内置filter 功能tag 注释 内置tag 导入三方tag and filter(load) 过滤器和功能tag的区别 自定义tag和f ...