【这是我参与「第四届青训营」笔记创作活动的第15天。】今天的学习内容是K8S资源管理和调度的课前预习。
容器和编排系统
-
什么是容器
容器是解决如何在从一个计算环境移动到另一个计算环境时使软件可靠运行的问题的解决方案。这可能是从开发人员的笔记本电脑到测试环境,从过渡环境到生产环境,也许从数据中心的物理机到私有云或公共云中的虚拟机。
简而言之,容器由整个运行时环境组成:应用程序,加上其所有依赖项,库和其他二进制文件,以及运行它所需的配置文件,捆绑到一个包中。通过容器化应用程序平台及其依赖项,可以抽象出操作系统分布和底层基础结构的差异。
-
容器能提供什么好处?
容器的大小可能只有几十兆字节,而具有自己整个操作系统的虚拟机的大小可能只有几千兆字节。因此,单个服务器可以托管比虚拟机多得多的容器。
另一个主要好处是,虚拟机可能需要几分钟才能启动其操作系统并开始运行其托管的应用程序,而容器化应用程序几乎可以立即启动。这意味着容器可以在需要时以“及时”的方式实例化,并且在不再需要时可以消失,从而释放其主机上的资源。
第三个好处是容器化允许更大的模块化。无需在单个容器内运行整个复杂应用程序,而是可以将应用程序拆分为模块(如数据库、应用程序前端等)。这就是所谓的微服务方法。以这种方式构建的应用程序更易于管理,因为每个模块都相对简单,并且可以对模块进行更改,而无需重新构建整个应用程序。由于容器非常轻量级,因此单个模块(或微服务)只能在需要时实例化,并且几乎可以立即使用。
-
编排系统
虽然定义各不相同,但Kubernetes,Docker和Swarm都属于一类DevOps基础设施管理工具,称为容器编排引擎(COE)。COE 在资源池和在这些资源上运行的应用程序容器之间提供了一个抽象层。
除了容器之外,COE 解决的主要问题是如何获取云或数据中心中的多个离散资源,并将它们合并到单个池中,可以在其中部署各种应用程序。这些应用程序的范围可以从简单的三层 Web 体系结构到大规模数据引入和处理,以及介于两者之间的所有内容。
-
Kubernetes
Kubernetes(也称为“k8s”)于2014年6月首次发布,并用Go编写。从古希腊语翻译过来,Kubernetes这个词的意思是“舵手”。该项目起源于Google并由Google开源,并且基于他们大规模运行容器的经验。
在功能方面,它可能是本文中研究的三个选项中集成度最高的。Kubernetes 被广泛使用,它背后有一个庞大的社区。Google将Kubernetes用于自己的容器即服务(CaaS产品,称为Google Container Engine(GKE)。还有许多其他平台支持Kubernetes,包括Red Hat OpenShift和Microsoft Azure。
Docker是Kubernetes目前支持的最普遍的容器引擎,但CoreOS rkt(发音为“rocket”)也受支持。
Kubernetes 使用基于 YAML 的部署模型。除了在主机上调度容器之外,Kubernetes 还提供了许多其他功能。
主要功能包括内置的自动缩放、负载平衡、卷管理和机密管理。此外,还有一个 Web UI 可帮助管理和排除群集故障。有了这些功能,Kubernetes通常需要比Swarm或Mesos更少的第三方软件。
Kubernetes与Swarm和Mesos的区别还在于“pods”的概念,Pods是一组容器,在Kubernetes术语中,它们被安排在一起组成一个“服务”。
虽然可以将 Kubernetes 主节点配置为高可用性集群,但这并不像单节点主节点安装那样得到很好的支持,并且是 Kubernetes 的高级用例。
Kubernetes的学习曲线稍微陡峭一些,并且比Swarm需要更多的努力来配置。部分由于它对功能的更紧密集成,Kubernetes有时被认为比这里讨论的其他两个编排引擎更“固执己见”。
-
Swarm
Docker Swarm 是 Docker 的原生容器编排引擎。最初发布于2015年11月,它也用Go编写。Swarmkit 是自 1.12 版本起包含的 Swarm 的 Docker 原生版本,对于那些希望使用 Swarm 的人来说,这是 Docker 的推荐版本。
Swarm 与 Docker API 紧密集成,非常适合与 Docker 一起使用。适用于单个主机 Docker 集群的相同基元与 Swarm 一起使用。这可以简化容器基础结构的管理,因为无需配置单独的编排引擎,也无需重新学习 Docker 概念即可使用 Swarm。
与Kubernetes一样,Swarm也有一个基于YAML的部署模型,使用Docker Compose。其他值得注意的功能包括群集的自动修复,使用DNS覆盖网络,通过使用多个主节点实现高可用性,以及使用带有证书颁发机构的TLS的网络安全。
-
Mesos
Apache Mesos版本1.0于2016年7月发布,但它的根源可以追溯到2009年,当时它最初由加州大学伯克利分校的博士生开发。与Swarm和Kubernetes不同,Mesos是用C++编写的。
Mesos与这里提到的前两个有所不同,因为它需要更多的分布式方法来管理数据中心和云资源。Mesos 可以有多个主节点,这些主节点使用 Zookeeper 来跟踪主节点之间的集群状态,并形成高可用性集群。
其他容器管理框架可以在Mesos上运行,包括Kubernetes,Apache Aurora,Chronos和Mesosphere Marathon。此外,分布式数据中心操作系统Mesosphere DC/OS基于Apache Mesos。
这意味着 Mesos 采用更加模块化的方法来管理容器,使用户能够在应用程序类型和运行规模方面具有更大的灵活性。
Mesos可以扩展到数以万计的节点,并被Twitter,Airbnb,Yelp和eBay等公司使用。苹果甚至拥有自己的基于Mesos的专有框架,称为Jarvis,用于为Siri提供动力。
Mesos中值得一提的一些功能是对多种类型的容器引擎的支持,包括Docker和它自己的“Containerizer”,以及Web UI,以及在多个操作系统上运行的能力,包括Linux,OS X,甚至Windows。
由于其复杂性和灵活性,Mesos的学习曲线比Docker Swarm更陡峭。但是,同样的灵活性和复杂性也是允许Twitter和Airbnb等公司使用Mesos来管理其大规模应用程序的优势。