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页,需要完整版的小伙伴,可以转发此文关注小编,扫码下方来获取!!!

大牛对本文的高度评价

 

十多年前,云计算尚未普及,每个公司都需要研究和搭建符合自身需求的一套基础设施和服务 ,充其量可以复用一些开源软件的功能,并通过定制来提升基础设施的搭建和使用效率,但这时的复用程度极其有限。过去十年间,随着云计算的蓬勃发展和深入人心,以及技术人的经验积累, IT基础设 施和服务第一一次有机会在全球范围内大规模复用。

2015年,CNCF (云原生计算基金会)成立,进步为“复用”打下了坚实的基础。云原生依托于云计算,制定了一套标准及与标准对应的开源解决方案,覆盖了从软件开发到交付再到运行维护的全生命周期,这些开源组件,通过有机的组织,依托于云计算,可以快速构建出一套高水准、低成本的基础设施服务,IT生产力得到了极大的提高。这其中,Kubernetes作为云原生技术的核心和大底座,尤为关键。

本文从源码层面对Kubernetes进行了详细的剖析,不容错过,非常值得大家来学习。

希望本文能够帮助到大家的学习,不断地提升自己的技术深度和广度,让自己变得更有价值!