真棒!终于读完谷歌高级架构师分享的Kubernetes源码剖析文
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
Kubernetes 特点
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化,插件化,可挂载,可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
近几年,容器技术越来越普及。据Gartner 预估,到 2022 年,全球将有 75%的公司使用容器技术,而在 2017 年,这个比例还不到 20% ,这说明容器技术的发展非常迅速。
容器技术的火热引发了容器编排技术的发展,目前最受欢迎的容器编排系统是 Kubemetes ,其引领着技术潮流,用于应对生产环境中编排容器所需的额外复杂度及成本。
kubemetes 系统帮助企业加快了容器编排的速度,并实现了对多容器集群的大规模管理。它允许持续集成和交付、网络处理、服务发现及存储服务等,并具有在多云环境下进行操作的能力。
建议读者在阅读 Kubernetes 源码的过程中,学习一些关于设计模式( DesignPattern )的知识,这样有助于大家理解源码的实现原理,而非只是泛泛地看代码。
学习Kubernetes代码库并不容易,它拥有大量的源码,学习过程会比较枯燥,但通过对源码的学习,我们一定会收益良多。
本文将基于Kubernetes 1.14.0 版本来深入研究和分析Kubernetes源码的关键部分,希望能对读者有所帮助。建议读者在阅读本文的同时参考Kubernetes源码文件,这样学习效果更佳。
Kubernetes架构,
1.1 Kubernetes的发展历史
1.2 Kubernetes架构图
1.3 Kubernetes各组件的功能
1.4 KubernetesProjectLayout设计
Kubernetes构建过程,构建过程是指“编译器”读取Go语言代码文件,经过大量的处理流程,最终产生一个二进制文件的过程:也就是将人类可读的代码转化成计算机可执行的二进制代码的过程。
手动构建Kubernetes 二进制文件是- -件非常麻烦的事情,尤其是对于较为复杂的Kubernetes大型程序来说。Kubernetes 官方专门提供了一套编译工具,使构建过程变得更容易。
2.1构建方式
2.2本地环境构建
2.3容器环境构建
2.4 Bazel环境构建
2.5代码生成器
2.6代码生成过程
2.7 gengo代码生成核心实现
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资源版本转换器
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创建资源对象的过程
client-go编程式交互,
5.1 client- go源码结构
5.2 Client客户端对象
5.3 Informer机制
5.4 WorkQueue
5.5 EentBroacater事件管理器
5.6代码生成器
5.7其他客户端
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预处理
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进程信号处理机制
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领导者选举机制
这份“Kubernetes源码剖析”文档共有378页,需要完整版的小伙伴,可以转发此文关注小编,查看LZ个人介绍来获取!!!
大牛对本文的高度评价
十多年前,云计算尚未普及,每个公司都需要研究和搭建符合自身需求的一套基础设施和服务 ,充其量可以复用一些开源软件的功能,并通过定制来提升基础设施的搭建和使用效率,但这时的复用程度极其有限。过去十年间,随着云计算的蓬勃发展和深入人心,以及技术人的经验积累, IT基础设 施和服务第一一次有机会在全球范围内大规模复用。
2015年,CNCF (云原生计算基金会)成立,进步为“复用”打下了坚实的基础。云原生依托于云计算,制定了一套标准及与标准对应的开源解决方案,覆盖了从软件开发到交付再到运行维护的全生命周期,这些开源组件,通过有机的组织,依托于云计算,可以快速构建出一套高水准、低成本的基础设施服务,IT生产力得到了极大的提高。这其中,Kubernetes作为云原生技术的核心和大底座,尤为关键。
本文从源码层面对Kubernetes进行了详细的剖析,不容错过,非常值得大家来学习。
希望本文能够帮助到大家的学习,不断地提升自己的技术深度和广度,让自己变得更有价值!