了解容器、容器编排和混合云
标签: 容器
Erik Kappelman
发布: 2018-05-03
如果您关注基于容器的开发和部署的进展情况(我希望是这样),那么您会发现,这些开发已经彻底改变了应用的创建和提供方式,而且这种改变还在继续。本文主要探究容器、容器编排、Kubernetes、混合云和相应的运作工具。
为了更准确地了解 Kubernetes 和混合云,我们首先应着重关注容器的定义,以及容器如何适应更广泛的环境。一个 容器 就是一个或小或大的虚拟系统环境。容器化或操作系统级别的虚拟化是指允许操作系统创建多个用户环境或容器的软件,可以是唯一的或冗余的,但彼此之间相互独立。这些用户环境具有自主性,相互之间并不了解。对于在容器内运行的软件来说,容器只是另一台机器。您可能认为这听起来像是虚拟机,这样理解也没错。
容器通常被描述为某种虚拟机。这种说法不无道理,而且粗略看来也不错。但实际上,容器和虚拟机之间存在很大的差异。
如果我们现在将一个应用随意划分为许多小的组成部分,然后将该应用分配到任意数量的不同服务器和云环境(公共或私有)中,那么这还能被视为一种客户端/服务器/网络框架吗?
虚拟机 的实例是由 系统管理程序 所创建的,这是一种将访客操作系统与运行该系统的机器硬件基础架构连接起来的软件。这样便能够使用原本不能与指定计算机的硬件基础架构协同工作的操作系统。比如,系统管理程序允许 Windows 机器运行 macOS,反之亦然。这十分有利,原因有很多,比如扩大现有硬件的用途,更常见的情况是,作为安全的开发环境,通常称为 沙箱。
另一方面,除了主机使用的操作系统以外,容器并非旨在运行其他操作系统,甚至根本无法运行这些系统。(您可以通过一种变通办法,将容器与不同的操作系统结合使用,但这不在本文讨论范围内。)您现在知道了什么是容器,但是容器为什么十分有用?容器主要用于分配资源和增强安全性。
容器可以增强安全性,因为它们相互之间以及与操作系统其他部分之间都是隔开的。在传统的客户端/服务器关系中,服务器控制客户端可以访问和无法访问的内容,以及当客户端访问或尝试访问服务器的不同部分时会发生什么情况。虽然服务器拥有控制权,但如果客户端或执行的程序可以说服服务器授予许可,那么就仍然可以与服务器系统的任何部分进行交互。显然,这存在问题,而且会以各种方式导致一连串的互联网安全漏洞。
容器软件支持创建一种系统,能让客户端在完全受控的唯一分区环境中与服务器进行交互。这样客户端就不会干扰服务器和其他客户端,这在云计算时代特别有用。在容器出现之前,如果在云环境中运行 Web 服务器,那么云提供商可能会选择非常大型的服务器,使用系统管理程序来运行一个或多个访客操作系统(您的应用)。这种设置存在的一个问题就是,其他人的安全缺陷会成为您自己的安全缺陷。也就是说,您的应用可能是锁定的,且绝对安全,但是其他应用可能并不安全,是您友好的黑客邻居唾手可得的果实。一旦这个应用受损,技术娴熟的侵入者实际上就能获得系统管理程序的访问权限 — 该服务器上运行的所有应用都将受损。
容器的另一个主要优势就在于能够有效地分配资源。对于使用 PaaS 等云技术的个人和团队都适用。对于提供这些云技术的公司,容器也大有帮助。例如,如果您使用云服务来托管自己创建的应用,该应用允许个人在假生产环境中编写代码,那么每个用户都会有自己的专用容器,根据需要为他们提供或多或少的资源。对于云服务提供商,他们可以使用容器在他们的服务器上复制和备份您的应用,确保某些地方发生故障时不会导致服务中断。他们还可以轻松地改变每个用户可以访问的资源量。所以,容器通常在部署托管链的多个级别上有效地管理资源。
免费试用 IBM Cloud
通过 IBM Cloud Lite 快速轻松地构建下一个应用。您的免费帐户永不过期,而且您会获得 256 MB 的 Cloud Foundry 运行时内存,以及包含 Kubernetes 集群的 2 GB 存储空间。
在云服务提供商示例中,显而易见,如何使用容器来保存每个不同用户的应用或者同一个用户应用的不同部分,这种方法很快就会变得异常复杂。这并不适用于人工处理,而应是自动化的。总而言之, 容器编排 就是自动设定在服务器中创建和使用容器的方式、时间以及地点。容器编排系统可能具备的不同功能包括:以有利的方式将主机与容器连接起来,必要时启动和销毁容器,以及适当时将不同的容器链接起来。
容器的作用一部分源于它们的一次性本质,这意味着一个应用可以由数百或数千个容器组成。这是虚拟机和容器之间的另一个重大区别。系统管理程序上的机器实例包含一个完整的操作系统。容器不能运行一个完整的操作系统;它们只能运行执行任务所需的操作系统的几个部分。在容器的一个常见应用中,每个容器都执行不同且有用的小型操作或服务。这被称之为 微服务架构 — 每个容器都执行非常小或者 微型 的服务。如果容器编排不当或者效率低下,那么就会丧失容器的这种使用方式原本的效用。没有有效的容器编排,也就没有了使用容器的理由。
Kubernetes(希腊语“领航员”的意思)是一种容器编排框架,具备各种功能,用途广泛。我们来了解下 Kubernetes 的特定元素。从最基本的意义而言,Kubernetes 框架(以及任何容器编排工具,就此而言)由各种集群和 Pod 构成。 集群 是一个群组,里面包含一个或多个物理服务器或虚拟机,容器实际上在这些物理服务器或虚拟机上运行。这些机器称之为 节点。集群是需要有效分配的资源。每个集群都有一个 主节点,掌管集群中发生的一切事情,比如安排和维护不同的应用状态。主节点的工作就是确保集群有效运行,通常是冗余的,以防发生故障。通过 部署 来运行集群。部署本质上就是用于创建 Pod 的指导手册,由集群中的主节点使用。 Pod 用于存放由容器构成的应用或应用集合。Pod 中的容器可以轻松通信和共享信息,但具体取决于 Pod 的需求。容器也可以和 Pod 的其他区域进行通信,比如数据库。Pod 在多个应用分享数据源或服务时非常有用,可以将资源集中在一个 Pod 中,这样应用就可以充分利用共享资源,提高效率。部署会告诉主节点需要多少个 Pod 副本,哪些容器在 Pod 中,以及关于这些容器的信息等等。 服务 则将所有这些与外部世界连接起来,指定哪些 Pod 可用以及它们的获取位置(哪个端口)。这是 Kubernetes 框架的基础构成。
Kubernetes 的一个缺点就是,很难创建平常的部署框架,因为存在太多的操作难题。所以,云服务提供商现在将 Kubernetes 整合到他们的服务当中。例如,IBM 最近将 Kubernetes 添加到其云产品中。通过使用 IBM Cloud Container Service,您现在可以相对轻松地将自己的应用部署到 Kubernetes 环境中。
通过 IBM 在线界面,可以创建集群,并可使用 Helm charts 将应用部署到这个集群。 Helm Charts 是基于 Kubernetes 的软件的蓝图,可以更加轻松地部署、升级和管理基于 Kubernetes 的应用。一旦创建并部署完成,就可以通过 Kubernetes 仪表板来管理这些应用,在该仪表板中,您可以使用 Kubernetes 提供的所有先进的功能。
Kubernetes 是一种用于创建 IBM 全新混合云产品的工具。但请等一下,什么是混合云?简单来说, 混合云 是私有云结构和公共云结构的组合,目的是实现效率最大化。
让我们试着设想一个可以成为混合云的简单私有/公共云设置。贵公司 ACME Widgets 以往一直使用内置服务器提供在线服务。出于有利于贵公司发展的种种原因,您希望采用云部署,但是并不希望将一切都从内部迁移出去,因为内部服务器上保存的有些数据是敏感数据,或者可能是您使用专用硬件来执行特定流程,而在内部提供这些流程效果更好。这种安排并不新鲜,许多公司先前都已采用了公共云和私有云 — 但 Kubernetes 的作用在于,让这些云既能真正实现协同工作,同时又保持完全独立。这就是混合云。过去,这些云都是独立的实体,没有可用的预置型工具来帮助它们协同工作。Kubernetes Federation 工具则改变了这种局面。
Federation 是用于管理多个集群的工具。这些集群可位于云端或者内部服务器中。您只需要设置每个集群,然后向 Federation API 服务器注册即可。Federation 可以帮助系统管理员优化可用资源的使用情况,确保资源安全可靠。如果您有多个数据中心,可能需要将客户发送给当时延迟时间最短的服务器。有了 Federation,轻而易举就可实现这一操作。例如,您所提供的在线服务中有 90% 都可以在云端安全运行,但有 10% 需要留在内部服务器上。Federation 可轻松构成类似这样的系统。
虽然这个商机确实是个未知数,但我将作出一些预测。我相信,我们正在朝着某种互联网奇点前进。(我知道这已是老生常谈,但最后 终将 会实现。)在我看来,尽管事实上底层物理结构仍然基于客户端/网络/服务器这种框架,但是技术服务提供商用来构建、部署和管理应用与软件的方式已经取得了长足的进步。这就好像是我们已经站在了最前沿,掌握了一些真正卓而不凡的技术,并且已经有些时日。我认为,混合云正是这个过程的开端。如果我们现在将一个应用随意划分为许多小的组成部分,然后将该应用分配到任意数量的不同服务器和云环境(公共或私有)中,那么这还能被视为一种客户端/服务器/网络框架吗?底层基础架构基本上仍和以往一样,但是我们使用这种结构的方式已经和最初截然不同,这就好像是改变了结构本身一样。
我认为这些变化可能会导致互联网物理基础架构彻底重组,脱离客户端/网络/服务器范式,逐渐转变为更好地支持目前的开发工具和方法的范式。实际上,这最终应该会提升互联网上数据共享的速度以及安全性。这意味着,企业和个人有更多的机会来利用互联网,在知识、艺术和经济上充实自我。无论发生什么,容器、容器编排软件以及混合云都将长久存在……至少要等到我们提出更出色的替代方案,这种局面才有可能改观。
本文翻译自: Kubernetes at the Helm, containers in the engine room(2018-04-04)