美文网首页k8s那点事儿
k8s源码学习——代码结构

k8s源码学习——代码结构

作者: 霹雳五号_297e | 来源:发表于2020-04-20 22:27 被阅读0次

阅读源码是程序员学习的必要方法之一,尤其是一些优异的开源项目,其代码基本可以视为业界的一个标杆,阅读这些项目的源码可以说是好处多多。但是,我们也不能无目的无计划地阅读源码,死记硬背,走马观花并不能带来什么实质性的提高。我个人认为,阅读源码的目标主要是以下几个:

1)理解和学习作者解决特定问题的思路和方法

2)模仿和借鉴局部代码的组织形式

3)熟悉和深入理解代码所使用的编程语言的特性

4)学习项目相关领域的知识和方法论

当然,阅读源码并不是一件非常轻松简单的事情,需要耗费大量的精力和思考,甚至会因为效率问题而浪费你大量的时间,毕竟,最难理解的东西永远是“别人的代码”。不过,目前一些成熟优异的开源项目都包含有丰富的文档,这些能够给你阅读源码提供很大的帮助,而一些恰当的方法和技巧也能使你的学习过程事半功倍。比如说,记录就是一种很好的学习方法,你可以随着源码的阅读过程,把你的思考和理解用文章记录下来,不但能够加深你的记忆和理解,事后也能够通过文章来反思学习,同时还能锻炼你的文笔和语言组织能力,可以说是一举多得。最近我正好在研究kubernetes,顺便用一个系列的文章记录了我学习k8s代码的心得和体会。

源码阅读一般从代码结构入手,k8s的程序入口都在cmd目录下面,核心逻辑都在pkg目录下面。这么做的好处是把程序入口和逻辑分开,因为程序入口只做了一些最简单的调用,具体逻辑是模块化的类库,即增强了程序的可读性,也便于一人负责一个模块多人互相协作,这一点在大型项目中非常重要。我们可以看到pkg目录下面有很多子目录,每一个子目录都包含了一个必要组件:

pkg目录结构

如果熟悉kubernetes原理和架构的话,你可以看到其中几个关键组件:

1)api/apis/kubeapiserver:k8s对内对外api。

2)controller: 核心控制逻辑,维持cluster状态,提供弹性,自愈,高可用等能力。

3)kubelete: 部署在节点上的agent,监控和管理每个节点的资源和状态。

4)scheduler: 提供pod部署逻辑的模块。

5)kubectl: k8s命令行工具。

进入每个单独目录,你可以发现他们都遵循几乎一样的目录结构,因为k8s使用了bazel这个工具来编译代码和测试,关于这个工具可以参考 https://bazel.build

子目录结构

点进去我们可以发现每一个子目录都包含了一个BUILD文件和一个OWNERS文件,OWNERS文件比较简单,里面是这个目录的maintainer和reviewer名单,BUILD目录则包含了这个程序的依赖库和单元测试等,在编译的时候需要使用这些的信息。

后面,我会阅读几个主要的模块的源码,看看它们的功能究竟是怎么实现的。

相关文章

  • k8s源码学习-- 代码结构

    k8s版本:v1.13(1)k8s代码的结构api: 输出接口文档用,基本是json源码build:构建脚本cmd...

  • k8s源码学习——代码结构

    阅读源码是程序员学习的必要方法之一,尤其是一些优异的开源项目,其代码基本可以视为业界的一个标杆,阅读这些项目的源码...

  • 学习 lodash 源码整体架构,打造属于自己的函数式编程类库

    前言 这是学习源码整体架构系列第三篇。整体架构这词语好像有点大,姑且就算是源码整体结构吧,主要就是学习是代码整体结...

  • vue.js源码学习笔记

    参考:vue.js官网Vue.js 源码学习笔记Vue2.0源代码阅读 文件结构梳理 整体目录 源代码实现目录 模...

  • 通过 SingleFlight 模式学习 Go 并发编程

    最近接触到微服务框架go-zero,翻看了整个框架代码,发现结构清晰、代码简洁,所以决定阅读源码学习下,本次阅读的...

  • k8s informer机制分析

    在阅读k8s源码时经常会看到类似的代码片段ctx.InformerFactory.Apps().xxx,比如在创建...

  • xgboost和lda学习

    XGBoost 源码阅读笔记 ( 1 ) :代码逻辑结构 XGBoost 源码阅读笔记(2):树构造之 Exact...

  • docker和K8S学习收藏

    参考学习链接docker和k8s学习文档-更多的源码分析Docker从入门到实践

  • ButterKnife源码浅析

    ButterKnife源码分析 1. ButterKnife 简介 1.1 代码结构 butterknife ;a...

  • Vue3.0 介绍

    源码组织方式 提升代码可维护性,源码采用 TypeScript 重写 使用 Monorepo 管理项目结构,将独立...

网友评论

    本文标题:k8s源码学习——代码结构

    本文链接:https://www.haomeiwen.com/subject/qwvmvhtx.html