热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Dock的生态开源技术(Etcd&Machine&Compose&Swarm&Mesos&Kubernetes)

dock,的,生态,开源,技术,etcd,amp,machine,amp,compose,amp,swarm,amp,mesos,amp,

Etcd

CoreOS公司开源的高可用分布式键值数据库Etcd,该项目已经被广泛应用到分布式系统的一致性实现服务发现中,基于Go语言实现。

Etcd就是专门为集群环境设计,可以很好地实现数据一致性,提供集群节点状态管理和服务自动发现等(类似ZooKeeper)。

Etcd在进行设计的时候重点考虑了下面四个要素:

  1. 简单:支持REST风格的HTTP+JSON API;
  2. 安全:支持HTTPS方式的访问;
  3. 快速:支持并发每秒一千次的写操作;
  4. 可靠:支持分布式结构,基于Raft

通常情况下,用户使用Etcd可以在多个节点上启动多个实例,并将它们添加为一个集群。同一个集群中的Etcd实例将会自动保持彼此信息的一致性,这意味着分布在各个节点上的应用也将获取到一致的信息。

[1]Apache ZooKeeper是一套知名的分布式系统中进行同步和一致性管理的工具。

[2]doozer是一个一致性分布式数据库实现,主要面向少量数据,更多信息可以参考https://github.com/ha/doozerd。

[3]Raft是一套通过选举主节点来实现分布式系统一致性的算法,相比于大名鼎鼎的Paxos算法,它的算法过程相对容易理解,由Stanford大学的Diego Ongaro和John Ousterhout提出。更多细节可以参考https://raftconsensus.github.io。

主要操作:

数据操作,监听数据操作,目录操作,日志操作,用户操作,角色操作,认证操作,节点操作,集群操作。

Docker Machine

Docker Machine是Docker官方三剑客项目之一,负责使用Docker的第一步,在多种平台上快速安装Docker环境。它支持多种平台,让用户可以在很短时间内搭建一套Docker主机集群。当要对多个Docker主机进行配置和管理时,采用Docker Machine将十分方便快捷。不仅提高了操作速度,更通过批量统一的管理减少了出错的可能。这是在大规模集群和云平台环境中所推荐的。配合Compose和Swarm,可以实现完整的Docker环境生命周期管理。

Machine项目是Docker官方的开源项目,负责实现对Docker主机本身进行管理,其代码在https://github.com/docker/machine上开源。

Machine项目主要由Go编写,用户可以在本地任意指定被Machine管理的Docker主机并对其进行操作。Machine定位是“在本地或者云环境中创建Docker主机”。

其基本功能包括:

  1. 在指定节点上安装Docker引擎,配置其为Docker主机;
  2. 集中管理所有Docker主机。

Machine连接不同类型的节点是通过不同驱动指定的,目前已经支持了包括IBM、Amazon、Google等多家数据中心的云主机。

Docker Compose

Compose项目是Docker官方的开源项目,基于Python语言实现,负责实现对Docker容器集群的快速编排。从功能上看,跟OpenStack中的Heat十分类似。其代码目前在https://github.com/docker/compose上开源。

编排(Orchestration)功能是复杂系统实现灵活可操作性的关键。特别是在Docker应用场景中,编排意味着用户可以灵活地对各种容器资源实现定义和管理

作为Docker官方编排工具,Compose的重要性不言而喻,它可以让用户通过编写一个简单的模板文件,快速地创建和管理基于Docker容器的应用集群

Compose定位是“定义和运行多个Docker容器的应用”,其前身是开源项目Fig,目前仍然兼容Fig格式的模板文件。我们知道使用一个Dockerfile模板文件,可以让用户很方便地定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。Compose恰好满足了这样的需求。它允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

Compose中有两个重要的概念:

  1. 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  2. 项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。

Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose项目由Python编写,实现上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

Docker Swarm

Docker Swarm是Docker公司推出的官方容器集群平台,基于Go语言实现。

Docker Swarm是Docker官方的三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案。使用它,用户可以将多个Docker主机封装为单个大型的虚拟Docker主机,快速打造一套容器云平台。

通过使用Swarm,用户可以将若干Docker主机节点组成的集群当作一个大的虚拟Docker主机使用。并且,原先基于单机的Docker应用可以无缝地迁移到Swarm上来。实现这些功能的前提是服务自动发现能力。在现代分布式系统中,服务的自动发现、注册、更新等能力将成为系统的基本保障和重要基础。在生产环境中,Swarm的管理节点和发现服务后端要采用高可用性的保护,可以采用集群模式。

作为容器集群管理器,Swarm最大的优势之一就是100%支持标准的Docker API。各种基于标准API的工具,如Compose、docker-py,各种管理软件,甚至Docker本身等都可以很容易地与Swarm进行集成。这大大方便了用户将原先基于单节点的系统移植到Swarm上。同时Swarm内置了对Docker网络插件的支持,用户可以很容易地部署跨主机的容器集群服务。

Swarm是典型的master-slave结构,通过发现服务来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理。在V2中,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点瓶颈。同时,V2中内置了基于DNS的负载均衡和对外部负载均衡机制的集成支持。 

Mesos——优秀的集群资源调度平台

Mesos项目是源自UC Berkeley对集群资源进行抽象和管理的开源项目,类似于操作系统内核,用户可以使用它很容易地实现分布式应用的自动化调度。同时,Mesos自身也很好地结合了Docker等相关容器技术,基于Mesos已有的大量应用框架,可以实现用户应用的快速上线。 

Mesos可以将整个数据中心的资源(包括CPU、内存、存储、网络等)进行抽象和调度,使得多个应用同时运行在集群中分享资源,并无需关心资源的物理分布情况。如果把数据中心中的集群资源看做一台服务器,那么Mesos要做的事情,其实就是今天操作系统内核的职责:“抽象资源+调度任务”。

Mesos项目主要由C++语言编写,项目官方地址为http://mesos.apache.org,代码仍在快速演化中。

Mesos拥有许多引人注目的特性,包括:

  1. 支持数万个节点的大规模场景(Apple、Twitter、eBay等公司的实践)。
  2. 支持多种应用框架,包括Marathon、Singularity、Aurora等。
  3. 支持HA(基于ZooKeeper实现)。
  4. 支持Docker、LXC等容器机制进行任务隔离。
  5. 提供了多个流行语言的API,包括Python、Java、C++等。
  6. 自带了简洁易用的WebUI,方便用户直接进行操作。

值得注意的是,Mesos自身只是一个资源抽象的平台,要使用它往往需要结合运行其上的分布式应用(在Mesos中被称作框架,framework),比如Hadoop、Spark、Marathon、Elasticsearch等大部分时候,用户只需要跟这些框架打交道即可,完全无需关心底下的资源调度情况,因为Mesos已经自动帮你实现了。这大大方便了上层应用的开发和运维。当然,用户也可以基于Mesos打造自己的分布式应用框架。

Mesos中有三个基本的组件:管理服务(master)、任务服务(slave)以及应用框架(framework)。

跟大部分分布式系统中类似,主节点(master)起到管理作用,将看到全局的信息,负责不同应用框架之间的资源调度和逻辑控制。应用框架需要注册到管理服务上才能被使用。用户和应用需要通过主节点提供的API来获取集群状态和操作集群资源。

slave负责汇报本从节点上的资源状态(空闲资源、运行状态等等)给主节点,并负责隔离本地资源来执行主节点分配的具体任务。隔离机制目前包括各种容器机制,包括LXC、Docker等。

应用框架(framework)是实际干活的,包括两个主要组件:

  • 调度器(scheduler):注册到主节点,等待分配资源;
  • 执行器(executor):在从节点上执行框架指定的任务(框架也可以使用Mesos自带的执行器,包括shell脚本执行器和Docker执行器)。

应用框架可以分两种:一种是对资源的需求,是会扩展的(如Hadoop、Spark等),申请后还可能调整;另一种是对资源需求大小是固定的(如MPI等),一次申请即可。

Kubernetes——生产级容器集群平台

Kubernetes是Google团队发起并维护的开源容器集群管理系统,支持如Docker等容器技术。类似Docker Swarm,使用Kubernetes,用户可以轻松搭建和管理一个私有容器云。该项目基于Go语言实现,试图为基于容器的应用部署和管理打造一套强大并且易用的管理平台

Kubernetes拥有鲜明的技术优势:

  • 优秀的API设计,以及简洁高效的架构设计,主要组件个数很少,彼此之间通过接口调用;
  • 基于微服务模式的多层资源抽象模型,兼顾灵活性与可操作性,提出的Pod模型被许多平台借鉴;
  • 可拓展性好,模块化容易替换,伸缩能力极佳,1.2.0版本单集群支持1000个节点,同时运行30000个Pods;
  • 自动化程度高,真正实现“所得即所需”,用户通过模板声明服务后,生命周期都是自动化管理;
  • 部署支持多种环境,包括虚拟机、裸机部署,还很好地支持常见云平台,包括AWS、GCE等;
  • 支持丰富的运维工具,方便用户对集群进行性能测试、问题检查和状态监控;
  • 自带控制台、客户端命令等工具,允许用户通过多种方式与kubernetes集群进行交互。

基于Kubernetes,可以很容易地实现一套PaaS,比如Openshift和Deis。Kubernetes目前在github.com/kubernetes/kubernetes进行维护。

Kubernete模型中的核心概念。这些核心概念反映了Kubernetes设计过程中对应用容器集群的认知模型。

集群组件,从架构上看,Kubernetes集群(Cluster)也采用了典型的“主-从”架构。一个集群主要由管理组件(Master)和工作节点(Node)组件构成。

Kubernetes集群的主要任务始终围绕着应用的生命周期。通过将不同资源进行不同层次的抽象,Kubernetes提供了灵活可靠的生命周期管理。

资源的核心抽象主要包括:

  1. 容器组(Pod):由位于同一节点上若干容器组成,彼此共享网络命名空间和存储卷(Volume)。Pod是Kubernetes中进行管理的最小资源单位,是最为基础的概念。跟容器类似,Pod是短暂的,随时可变的;
  2. 服务(Service):若干(往往是同类型的)Pod形成的对外提供某个功能的抽象,不随Pod改变而变化,带有唯一固定的访问路径,如IP地址或者域名。
  3. 复制控制器(Replication Controller):负责启动Pod,并维护其健康运行的状态。是用户管理Pod的句柄。
  4. 部署(Deployment):创建Pod,并可根据参数自动创建管理Pod的复制控制器,并且支持升级。1.2.0版本引入提供比复制控制器更方便的操作;
  5. 横向Pod扩展器(Horizontal Pod Autoscaler,HPA):类似云里面的自动扩展组,根据Pod的使用率(典型如CPU)自动调整一个部署里面Pod的个数,保障服务可用性;

还有一些管理资源相关的辅助概念,主要包括:

  1. 注解(Annotation):键值对,可以存放大量任意数据,一般用来添加对资源对象的详细说明,可供其他工具处理。
  2. 标签(Label):键值对,可以标记到资源对象上,用来对资源进行分类和筛选;
  3. 名字(Name):用户提供给资源的别名,同类资源不能重名;
  4. 命名空间(Namespace):这里是指资源的空间,避免不同租户的资源发生命名冲突,另外可以进行资源限额;
  5. 持久卷(PersistentVolume):类似于Docker中数据卷的概念,就是一个数据目录,Pod对其有访问权限。
  6. 秘密数据(Secret):存放敏感数据,例如用户认证的口令等;
  7. 选择器(Selector):基于标签概念的一个正则表达式,可通过标签来筛选出一组资源;
  8. Daemon集(DaemonSet):确保节点上肯定运行某个Pod,一般用来采集日志和监控节点;
  9. 任务(Job):确保给定数目的Pod正常退出(完成了任务);
  10. 入口资源(Ingress Resource):用来提供七层代理服务;
  11. 资源限额(Resource Quotas):用来限制某个命名空间下对资源的使用,开始逐渐提供多租户支持;
  12. 安全上下文(Security Context):应用到容器上的系统安全配置,包括uid、gid、capabilities、SELinux角色等;
  13. 服务账号(Service Accounts):操作资源的用户账号。

推荐阅读
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 如何在服务器上配置SSL证书
    SSL证书是用于验证互联网上身份的一种数字凭证,通过启用HTTPS协议,确保用户与服务器之间的通信安全。本文将详细介绍如何在API和服务器上配置SSL证书,以提升网站的安全性和可信度。 ... [详细]
  • Visual Studio Code (VSCode) 是一款功能强大的源代码编辑器,支持多种编程语言,具备丰富的扩展生态。本文将详细介绍如何在 macOS 上安装、配置并使用 VSCode。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 单元测试:使用mocha和should.js搭建nodejs的单元测试
    2019独角兽企业重金招聘Python工程师标准BDD测试利器:mochashould.js众所周知对于任何一个项目来说,做好单元测试都是必不可少 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
author-avatar
高度的寂寞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有