终于读完谷歌高级架构师分享的Kubernetes源码剖析文档
前言Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。Ku
前言
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
Kubernetes 特点
- 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
- 可扩展: 模块化,插件化,可挂载,可组合
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
近几年,容器技术越来越普及。据Gartner 预估,到 2022 年,全球将有 75%的公司使用容器技术,而在 2017 年,这个比例还不到 20% ,这说明容器技术的发展非常迅速。
容器技术的火热引发了容器编排技术的发展,目前最受欢迎的容器编排系统是 Kubemetes ,其引领着技术潮流,用于应对生产环境中编排容器所需的额外复杂度及成本。
kubemetes 系统帮助企业加快了容器编排的速度,并实现了对多容器集群的大规模管理。它允许持续集成和交付、网络处理、服务发现及存储服务等,并具有在多云环境下进行操作的能力。
建议读者在阅读 Kubernetes 源码的过程中,学习一些关于设计模式( DesignPattern )的知识,这样有助于大家理解源码的实现原理,而非只是泛泛地看代码。
学习Kubernetes代码库并不容易,它拥有大量的源码,学习过程会比较枯燥,但通过对源码的学习,我们一定会收益良多。
本文将基于Kubernetes 1.14.0 版本来深入研究和分析Kubernetes源码的关键部分,希望能对读者有所帮助。建议读者在阅读本文的同时参考Kubernetes源码文件,这样学习效果更佳。
目录
主要内容
第1章Kubernetes架构,
- 1.1 Kubernetes的发展历史
- 1.2 Kubernetes架构图
- 1.3 Kubernetes各组件的功能
- 1.4 KubernetesProjectLayout设计
第2章Kubernetes构建过程,构建过程是指“编译器”读取Go语言代码文件,经过大量的处理流程,最终产生一个二进制文件的过程:也就是将人类可读的代码转化成计算机可执行的二进制代码的过程。
手动构建Kubernetes 二进制文件是- -件非常麻烦的事情,尤其是对于较为复杂的Kubernetes大型程序来说。Kubernetes 官方专门提供了一套编译工具,使构建过程变得更容易。
- 2.1构建方式
- 2.2本地环境构建
- 2.3容器环境构建
- 2.4 Bazel环境构建
- 2.5代码生成器
- 2.6代码生成过程
- 2.7 gengo代码生成核心实现
第3章Kubernetes核心数据结构,
- 3.1 Group、Version、 Resource核心数据结构
- 3.2 ResourceList
- 3.3 Group
- 3.4 Version
- 3.5 Resource
- 3.6 Kubernetes内置资源全图
- 3.7 runtime.Object类型基石
- 3.8 Unstructured数据
- 3.9 Scheme资源注册表
- 3.10 Codec编解码器
- 3.11 Converter资源版本转换器
第4章kubectl命令行交互,在维护 ubernetes 系统集群时, kubectl 应该是最常用的工具之一。从 ubernetes架构设计的角度来看, kubectl 工具是 Kubernetes API Server 的客户端。它的主要工作是向 netes API Server 发起 HTTP 请求。 Kt netes 个完全以资源为中心的系统,而 kubectl 会通过发起 HTTP 请求来操纵这些资源(即对资源进行 CRUD 操作),以完全控制 Kubernetes 系统集群。
- 4.1 kubectl命令行参数详解
- 4.2 Cobra命令行参数解析
- 4.3创建资源对象的过程
第5章client-go编程式交互,
- 5.1 client- go源码结构
- 5.2 Client客户端对象
- 5.3 Informer机制
- 5.4 WorkQueue
- 5.5 EentBroacater事件管理器
- 5.6代码生成器
- 5.7其他客户端
第6章Etcd存储核心实现,Kubemetes 系统使用 Etcd 作为 Kubemetes 集群的唯一存储, Etcd 在生产环境中一般以集群形式部署(称为 Etcd 集)。
Etcd 集群是分布式 K/V 存储集群,提供了可靠的强一致性服务发 Etcd 集群存储 ubemetes 系统的集群状态和元数据,其中包括所有 Kubemetes 资源对象信息、资源对象状态、集群节点信息等。 ubemetes 将所有数据存储至 Etcd 集群前缀为/registry的目录下。
- 6.1 Etcd存储架构设计
- 6.2 RESTStorage存储服务通用接口
- 6.3 RegistryStore存储服务通用操作
- 6.4 Storage.Interface通用存储接口
- 6.5 CacherStorage缓存层
- 6.6 UnderlyingStorage底层存储对象
- 6.7 Codec编解码数据
- 6.8 Strategy预处理
第7章kube-apiserver核心实现,
- 7.1热身概念
- 7.2 kube apiserver命令行参数详解
- 7.3 kube apiserver架构设计详解
- 7.4 kube apiserver启动流程
- 7.5权限控制
- 7.6认证
- 7.7授权
- 7.8准入控制器
- 7.9进程信号处理机制
第8章kube -scheduler核心实现,kube-scheduler 组件是 Kubernetes 系统的核心组件之一,主要负责整个集群 Pod资源对象的调度,根据内置或扩展的调度算法(预选与优选调度算法),将未调度的Pod 资源对象调度到最优的工作节点上,从而更加合理、更加充分地利用集群的资源。
- 8.1 kube-scheduler命令行参数详解
- 8.2 kube-scheduler架构设计详解
- 8.3 kube-scheduler组件的启动流程
- 8.4优先级与抢占机制
- 8.5亲和性调度
- 8.6内置调度算法
- 8.7调度器核心实现
- 8.8领导者选举机制
大牛对本文的高度评价
十多年前,云计算尚未普及,每个公司都需要研究和搭建符合自身需求的一套基础设施和服务 ,充其量可以复用一些开源软件的功能,并通过定制来提升基础设施的搭建和使用效率,但这时的复用程度极其有限。过去十年间,随着云计算的蓬勃发展和深入人心,以及技术人的经验积累, IT基础设 施和服务第一一次有机会在全球范围内大规模复用。
2015年,CNCF (云原生计算基金会)成立,进步为“复用”打下了坚实的基础。云原生依托于云计算,制定了一套标准及与标准对应的开源解决方案,覆盖了从软件开发到交付再到运行维护的全生命周期,这些开源组件,通过有机的组织,依托于云计算,可以快速构建出一套高水准、低成本的基础设施服务,IT生产力得到了极大的提高。这其中,Kubernetes作为云原生技术的核心和大底座,尤为关键。
本文从源码层面对Kubernetes进行了详细的剖析,不容错过,非常值得大家来学习。
希望本文能够帮助到大家的学习,不断地提升自己的技术深度和广度,让自己变得更有价值!
资源获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻
精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻
更多推荐
所有评论(0)