一、Kubernetes—组件介绍

目录

 

一、发展经历

二、资源管理器

三、组件说明

1、Borg系统

2、K8S架构


一、发展经历

现在是云计算和大数据时代,越来越多的企业开始使用云服务,云服务只是一个统称而已,总体分为三类:IaaS(基础设施即服务),PaaS(平台即服务),SaaS(软件即服务)。那么什么是IaaS、PaaS、SaaS?它们之前又有什么区别?下面以披萨举例子详细介绍下。

IBM 的软件架构师 Albert Barron 曾经使用披萨作为比喻,解释这个问题。David Ng 进一步引申,让它变得更准确易懂。请设想你是一个餐饮业者,打算做披萨生意。你可以从头到尾,自己生产披萨,但是这样比较麻烦,需要准备的东西多,因此你决定外包一部分工作,采用他人的服务。你有三个方案。

(1)方案一:IaaS

他人提供厨房、炉子、煤气,你使用这些基础设施,来烤你的披萨。

(2)方案二:PaaS

除了基础设施,他人还提供披萨饼皮。你只要把自己的配料洒在饼皮上,让他帮你烤出来就行了。也就是说,你要做的就是设计披萨的味道(海鲜披萨或者鸡肉披萨),他人提供平台服务,让你把自己的设计实现。

(3)方案三:SaaS

他人直接做好了披萨,不用你的介入,到手的就是一个成品。你要做的就是把它卖出去,最多再包装一下,印上你自己的 Logo。

上面的三种方案,可以总结成下面这张图。

一、Kubernetes—组件介绍_第1张图片

从左到右,自己承担的工作量(上图蓝色部分)越来越少,IaaS > PaaS > SaaS。

对应软件开发,则是下面这张图。

一、Kubernetes—组件介绍_第2张图片

SaaS 是软件的开发、管理、部署都交给第三方,不需要关心技术问题,可以拿来即用。普通用户接触到的互联网服务,几乎都是 SaaS,下面是一些例子。

  • 客户管理服务 Salesforce
  • 团队协同服务 Google Apps
  • 储存服务 Box
  • 储存服务 Dropbox
  • 社交服务 Facebook / Twitter / Instagram

PaaS 提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝地扩展(scaling)。开发者只需要关注自己的业务逻辑,不需要关注底层。下面这些都属于 PaaS。

  • Heroku
  • Google App Engine
  • OpenShift

IaaS 是云服务的最底层,主要提供一些基础资源。它与 PaaS 的区别是,用户需要自己控制底层,实现基础设施的使用逻辑。下面这些都属于 IaaS。

  • Amazon EC2
  • Digital Ocean
  • RackSpace Cloud

微软的 Azure 云服务有一张图,解释这三种模式的差异。

一、Kubernetes—组件介绍_第3张图片

上图中,绿色的部分是云服务商决定的,紫色的部分是用户决定的。可以看到,SaaS 模式下用户没有任何自主权,只能使用给定的应用程序;PaaS 模式下可以自己安装应用程序,但是不能定制操作系统;IaaS 模式下则是云服务商提供(虚拟的)硬件,从操作系统开始都可以自己选择和定制。

最后,给三大服务各举个例子,IaaS(比如阿里云)、PaaS(比如新浪云)、SaaS(比如Office 365)。现在对于大部分企业使用的都是SaaS,而且大企业部署业务平台往往是通过容器化集群部署。

二、资源管理器

提起Docker容器化不得不提服务编排,众所周知目前Docker常用的服务编排模式有三种, Mesos DockerSwarm Kubernetes,下面将简单介绍这三种服务编排模式。

Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初是由加州大学伯克利分校的AMPLab开发的,后在Twitter得到广泛使用。但是,在2019年5月,Twitter 公司在旧金山总部举行了一次技术发布会兼 Meetup。会上,Twitter 计算平台(Twitter Computing Platform)产品与技术负责人 David McLaughlin 正式宣布,Twitter 的基础而设施将从 Mesos 全面转向 Kubernetes。

Swarm是Docker公司在2014年12月初新发布的容器管理工具。但是,在2019年7月,阿里云正式宣布,将Docker Swarm从阿里云剔除。

Kubernetes是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg),其在Borg 10年容器化基础架构中,采用GO语言开发。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。

Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。

Kubernetes优势:

  •  容器编排
  •  轻量级
  •  开源
  •  弹性伸缩
  •  负载均衡 IPVS

综上,Kubernetes是容器化编排管理工具的必然趋势,应着重学习其内容。

三、组件说明

Kubernetes是Borg的开源版本(研发团队有重合、功能简化聚焦、架构类似),很多工程师现在投身K8S的系统研究,推进K8S的发展。就在2019年5月4日,Twitter宣布弃用使用了长达数十年的Mesos系统,全面拥抱K8S,足可见K8S在目前云计算生态和环境下的重要地位。越来越多的服务以docker的方式进行运行通过K8S进行编排。所以在学习K8S之前,我们应该了解下Borg系统。

1、Borg系统

Borg是谷歌内部的大规模集群管理系统,在谷歌内部经历数十年的打磨,应该是与谷歌三驾马车(MR,GFS,BigTable)的同时代产物,它一个集群管理系统,上面运行着十万级的任务,数千个不同的应用,管理着数万台机器。其通过权限管理、资源共享、性能隔离等来达到高资源利用率。它能够支持高可用应用,并通过调度策略减少出现故障的概率,提供了任务描述语言、实时任务监控、分析工具等。

å¨è¿éæå¥å¾çæè¿°

(1)BorgMaster

BorgMaster包含两个进程:主进程:负责处理客户端RPC调用,管理系统中所有对象的状态机,与Borglet进行通信。以及一个分离的调度器。

BorgMaster在逻辑上是一个进程,但是有5个副本,每个副本都维护cell状态的一份内存副本,cell状态同时在高可用、分布式、基于Paxos的存储系统中做本地磁盘持久化存储。一个单一的被选举的master既是Paxos leader,也是状态管理者。当cell启动或者被选举master挂掉时,系统会选举Borgmaster,选举机制按照Paxos算法流程进行。选举master的过程通常会消耗10秒,在一些规模较大的cell会消耗1分钟左右。

BorgMaster的状态会定时设置checkpoint,具体形式就是在Paxos store中存储周期性的镜像snapshot和增量更改日志。其作用可以存储BorgMaster的状态,修复问题,离线模拟等。

此外还提供了一个模拟器Fauxmaster,其是BorgMaster的一个复制品,可以用来修复bug,模拟执行。

说明:master是一个调度系统的核心,为了保证可用性通常的做法就是进行副本维护,当一个master出现故障的时候可以由新的master来替代。

(2)scheduler

当job被提交时,BorgMaster会将其记录到paxos store中,并将task增加到等待队列中,调度器通过一步的方式扫描队列将机器分配给任务,调度过程主要包括可行性检查和打分。

可行性检查主要用于解决硬约束,找到一组满足硬约束的机器;打分则是满足软约束,在可行的机器中根据用户偏好为机器打分,用户偏好主要是系统内置的标准,如:被抢占的task的优先级和数量最小化,具有任务软件包的机器、分散任务到不同的失败域中,将高优先级和低优先级的task分配到同一个node上,使得高优先的任务可以抢占低优先级的任务等。borgmaster一开始使用E-PVN进行打分,其会将任务分散到不同的机器上,称为worst fit;而best fit会尽量使用紧凑的机器以减少资源碎片。考虑到系统中不同类型任务单额资源需求,采用混合的模型进行打分。

如果对于一个新task没有充足的资源,那么系统会杀死低优先级的任务,杀死的低优先级的任务会被放置在等待队列中。任务启动延迟平均在25秒,有80%的时间花费在包安装上。因此在调度的时候尽量把任务调度在含有包的机器上,同时因为包是不变得,所以可以共享和缓存,同时还提供了一些并行分发包的协议。

(3)Borglet

Borglet是运行在每台机器上的代理,负责启动和停止task,重启任务,管理本地资源,向master和监控模块汇报自己的状态。master会周期性的向Borglet拉取其当前的状态,这样做能够控制通信速度避免“恢复风暴”。

为了性能扩展,master副本会运行一个无状态的link shard去处理与部分Borglet的通信,但重新选举时会重新分区,master副本会聚合和压缩信息,向被选举的master报告状态机的不同部分,减少更新负担。如果borglet多轮都没有进行响应会被标记为down。运行在上面的任务会被重新调度至其他机器,如果通信恢复,master会通知Borglet杀死已经重调度的任务保证一致性。

说明:borglet的设计与其他调度系统相同,提供汇报功能。不同的是borg中采用拉取的方式进行,而在yarn中采取的是推的方式。另外borg中的副本会与一些borglet通信以此方式来减少更新负担。

2、K8S架构

Kubernetes属于主从分布式架构,主要由Master Node和Worker Node组成,以及包括客户端命令行工具kubectl和其它附加项。

一、Kubernetes—组件介绍_第4张图片

  • APISERVER:所有服务访问统一入口
  • CrontrollerManager:维持副本期望数目
  • Scheduler:负责接收任务,选择合适的节点进行分配任务
  • ETCD:键值对数据库  储存K8S集群所有重要信息(持久化)
  • Kubelet:直接跟容器引擎交互实现容器的生命周期管理
  • Kube-proxy:负责写入规则至 IPTABLES、IPVS 实现服务映射访问的
  • COREDNS:可以为集群中的SVC创建一个域名IP的对应关系解析
  • DASHBOARD:给 K8S 集群提供一个 B/S 结构访问体系
  • INGRESS CONTROLLER:官方只能实现四层代理,INGRESS 可以实现七层代理
  • FEDERATION:提供一个可以跨集群中心多K8S统一管理功能
  • PROMETHEUS:提供K8S集群的监控能力
  • ELK:提供 K8S 集群日志统一分析介入平台

etcd的官方将它定位成一个可信赖的分布式键值存储服务,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转。

一、Kubernetes—组件介绍_第5张图片

注意:V2版本已在Kubernetes v1.11中弃用,推荐在Kubernetes集群中使用Etcd v3。


Hello,大家好,我是菜鸟HSS,始终坚信没有天生的高手,更没有永远的菜鸟。专注于Linux云计算和大数据的学习和研究。欢迎扫码关注我的公众号「菜鸟自学大数据Hadoop」,本公众号一切分享、资源皆免费,希望能尽自己一己之力帮助到更多的朋友,同时自己的技术也能得到提升,达到一种双赢的效果。

一、Kubernetes—组件介绍_第6张图片

你可能感兴趣的:(kubernetes,kubernetes,k8s,容器)