光K8S的目录结构就够你学一天!

21 篇文章 1 订阅
11 篇文章 0 订阅
本文探讨了Kubernetes项目的目录结构设计,基于StandardGoProjectLayout,重点关注kube-apiserver的包管理和核心组件的main结构,以及组件初始化的标准化流程。作者还提到,新组件开发可轻松复用现有代码模板。
摘要由CSDN通过智能技术生成

Kubernetes Project Layout设计

Kubernetes项目由Go语言编写。Go语言官方对项目的结构设计没有强制要求,早期的Go语言开发者都喜欢将包文件代码放置在项目的src/目录下,如nsqio开源项目,开发者喜欢将入口文件放入apps/目录。不同开发者的喜好不同,这导致开源项目的结构设计没有统一标准。

后来Go语言社区提出Standard Go Project Layout方案,以对Go语言项目目录结构进行划分。目前该标准已经成为众多Go语言开源项目的选择。

根据Standard Go Project Layout方案,我们对标一下Kubernetes的Project Layout设计,Kubernetes Project Layout结构说明如表所示。


由于Kubernetes项目全球开发者众多,这导致早期的代码包较多,尤其是kube-apiserver项目,其内部所引用的代码包特别多。随着Kubernetes系统版本的迭代,逐渐将部分包进行了合并,其中staging/目录为核心包暂存目录,该目录下的核心包多以软连接的方式链接到vendor/k8s.io目录。

Kubernetes系统组件较多,各组件的代码入口main结构设计风格高度一致,我们以核心组件为例,命令示例如下:


从代码入口main结构来看,各组件的目录结构、文件命名都保持高度一致。假设需要新增一个组件,我们甚至可以复制原有的组件代码,只需简单修改一下就可以将其运行起来。每个组件的初始化过程也非常类似,初始化过程示意图如图所示。


main结构中定义了进程运行的周期,包括从进程启动、运行到退出的过程。以kube-apiserver组件为例,kube-apiserver初始化过程如下:

  • rand.Seed:组件中的全局随机数生成对象。
  • app.NewCommand:实例化命令行参数。通过flags对命令行参数进行解析并存储至Options对象中。
  • logs.InitLogs:实例化日志对象,用于日志管理。(
  • command.Execute:组件进程运行的逻辑。运行前通过Complete函数填充默认参数,通过Validate函数验证所有参数,最后通过Run函数持久运行。只有当进程收到退出信号时,进程才会退出。

Kubernetes其他组件的cmd设计与之类似,故不再重复描述,后续也会针对每个组件详细描述其启动过程。

关注我「程序员溪昂」,带你从源码角度深入学习K8S。
在这里插入图片描述

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值