kubernetes|图文并茂!带你深度解析Kubernetes( 四 )

  • 2017年10月 , Docker官方支持Kubernetes 。
    • 2018年3月 , Kubernetes正式从CNCF毕业 , 开始一统江湖 。 (所谓毕业是指这个产品可以直接使用在生产环境)
    • 目前 , Kubernetes已经成为容器编排领域的事实标准 。
    Kubernetes , 读者一定会有一个疑问:为什么最后是Kubernetes?
    每个人对这个问题 , 都有一些自己的理解 , 本文从技术方面对该问题进行了阐述 。
    二、Why Kubernetes
    Kubernetes源于希腊语 , 意为“舵手” 。 k8s缩写是因为k和s之间有八个字符的原因 。 它是google在2015开源的容器调度编排的平台 。 它是建立在Google大规模运行生产工作负载(Borg系统)十几年经验的基础上 ,结合了社区中最优秀的想法和实践 , 已经成为了目前容器编排的事实标准 。
    其实看到Docker和Kubernetes的Logo , 就可以很快明白Kubernetes的作用 。 Docker的Logo是一条鲸鱼船 , 运载着许多封装好的集装箱(container) , 代表着一次打包到处运行的意图 。 而Kubernetes的Logo就是这条船的方向舵!
    对于Why Kubernetes?很多人都有自己的理解 , 接下来笔者从技术的角度 , 阐述一下自己的观点 。 Kubernetes技术上的成功 , 个人认为核心在于三个关键点:
    • 成熟的技术前身
    • 优秀的框架架构
    • 良好的核心设计
    (一)Kubernetes前身Kubernetes的基础特性 , 并不是几个工程师突然“拍脑袋”想出来的东西 , 而是 Google 公司在容器化基础设施领域多年来实践经验的沉淀与升华 。 这个实践与升华的过程 , 就是Kubernetes的前身是Borg系统 。
    Borg系统一直以来都被誉为Google内部最强大的“秘密武器” , 是Google整个基础设施的核心依赖 。 很多应用框架已经运行在Borg上多年 , 其中包括了内部的MapReduce、GFS、BigTable、Megastore等 , 上层应用程序更是有这些耳熟能详的产品:Gmail、Google Docs、Google Search等 。
    其架构图如下所示:

    架构分析:
    • 集群分为Master节点与Worker节点 。
    • Master节点由多台机器构成 , 一主多备 。
    • BorgMaster由主进程和scheduler进程组成 , 主进程处理clientRpc请求 , scheduler负责调度tasks 。
    • Borglet是Worker节点上的代理进程 , 用于启停tasks 。
    根据2015年4月google发布的Large-scale clustermanagement at Google with Borg , 与其2020年7月发布的Borg: the nextgeneration , 两篇论文中的数据表明:Borg系统通过对在线任务与离线任务进行混合部署 , 可以节约20%-30%的资源 , 极大提高了资源利用率 。 下表是2011年与2019年的Borg集群 , 与2015年AWS、Facebool、Twitter数据中心资源利用率的对比图 。

    对于成熟高效的Borg系统 , 继承者Kubernetes从中获得了宝贵的经验:
    • Pods 。 Pod是Kubernetes中调度的单位 。 它是一个或多个容器在其中运行的资源封装 。 保证属于同一 Pod的容器可以一起调度到同一台计算机上 , 并且可以通过本地卷共享状态 。 Borg有一个类似的抽象 , 称为alloc(“资源分配”的缩写) 。
    • Service 。 Kubernetes使用服务抽象支持命名和负载均衡:带名字的服务 , 会映射到由标签选择器定义的一组动态Pod集 。 集群中的任何容器都可以使用服务名访问服务 。
    • Labels 。 通过使用标签组织Pod , Kubernetes比Borg支持更灵活的集合 , 标签是用户附加到Pod(实际上是系统中的任何对象)的任意键值对 。
    • Ip-per-Pod 。 Borg容器只能共享主机网络 , 必须将端口作为调度的资源 。 在Kubernetes中IP是以Pod为单位分配的 , 一个Pod内部的所有容器共享一个网络堆栈 。
    (二)Kubernetes架构
    • 整体架构
    Kubernets整体架构 , 如下所示:

    整个系统由控制面(Master)与数据面(Worker Node)组成 。 Master核心组件:
    • API Server 。 集群控制的唯一入口 , 它是各个组件通信的中心枢纽 。