您的位置:首页 > 运维架构 > Docker

Kubernetes可以为容器编排做点什么

2017-08-29 20:29 316 查看

Kubernetes可以为容器编排做点什么

【编者的话】毋庸置疑,Kubernetes目前已成为业内最炙手可热的容器编排框架。本文主要从宏观上阐述了Kubernetes是什么,有什么功能和特性,以及能为容器编排带来什么好处。本文只写了一个概览,有很多细节并未提及,只希望可以给正在Kubernetes道路上探索的同学一点启发。更多Kubernetes知识请关注dockone其他文章。

随着微软和亚马逊高BIG加入云原生计算基金会(简称“CNCF”),Kubernetes作为开源的容器编排产品正在成为业内管理容器环境的实实在在的标准。



Kubernetes 是一个开源容器编排框架。它的功能很强大,不仅可以在运行Docker容器的同时确保它们不间断运行,还可以做到在容器崩溃或主机崩溃时,重新启动容器,就像VMware HA一样,但以一种不同的方式来处理。Kubernetes 支持许多不同的云提供商和裸机部署,您可以在Linux操作系统内核进行部署,并在用户层运行容器。

为什么选择Kubernetes?

大规模管理容器或容器管理。Kubernetes在希腊语中有领航员或舵手之意。Kubernetes的基本目的是确保您可以规模化管理所有容器。虽然容器本身使应用程序打包和部署过程更容易了,但是如此大规模地管理这些容器仍需要做很多的工作。Kubernetes的基本功能是让我们可以将一个容器集群作为一个单一系统进行管理,这样可以让我们能够正确轻松地开发同时简化管理所有这些容器的操作。这种方法有助于开发团队将应用程序编码到容器中,并将其移交给Ops,并且Ops可以直接运行这些容器(而无需关心其他)。

让我们回过头来看容器本身,其实它本质上是一种封装应用程序的方法,使应用程序易于在任何地方运行。然而,运营团队需要管理系统来管理这些容器。而Kubernetes框架就可以管理大量的容器环境。

核心组件

一个容器是一个密封的应用,封装成开发,运输和部署的标准单元。一个容器镜像包含代码,运行时库,依赖关系,配置 - 即将其作为轻量级包运行所需的所有内容。开发人员可以将其代码及其依赖项打包到容器对象中,然后可以在任何环境中运行它,而且由于它们通常是小对象,所以可以将大量容器推送到单个机器上。Docker是当今世界最受欢迎的容器之一,并且它还很年轻截止目前才4+岁,但是最原始的容器技术却可以追溯到古老的Unix时代。

Pods 是多个协同工作容器单元的组合。一个节点(Pod)是可以使用Kubernetes创建,且易于发现和管理的最小的可部署运行的单元。

如果您想要运行多个容器 - 我们假设一个特定的Web服务器的四个副本和一个数据库 - 例如Kubernetes有一个技术来支持。这个技术被称为副本(replication)控制器,它可以确保指定数量的pods副本正在您需要的特定服务上运行。

Kubernetes的一个基本前提是,我们可以执行一些名为“所需状态管理”的内容,这意味着我们可以为集群服务提供一个特定的配置,并且可以由集群服务在基础设施中执行这种配置。

如果您配置k8s(Kubernetes的简称),可以在物理主机中运行四个pod,并且由于某些原因,如果某些pod崩溃,那么k8将自动在任何可用的集群节点上启动一个新的pod,以确保您具有所需的四个状态副本可用。

API是在集群服务之前执行所需状态管理的主要组件之一。这是系统的一个关键构件。系统的第二个关键构件是worker。一个worker真的只是一个容器主机。workers也作为与k8s集群服务进行通信的Kubelets(补充:Kubelets主要工作是管理Pod和容器的生命周期)。

Services 是一组协同工作的pods。它是一个包含容器的pod的逻辑结构。Services 将pods聚合在一起就像一个Web服务器场所,例如,几个pods(Web服务器/内容仓库)一起提供一个服务。您还可以考虑负载平衡器作为后端服务的示例。通常您会注意到,单独的独立服务需要多个单一的容器 - 他们通常需要一组共存容器,一个用于核心功能,其他更多用于支持分析,实时监控,数据库服务,日志记录等活动。

标签(Labels)常用于逻辑构造和组织一组对象。标签也可以用于搜索不同逻辑或物理对象。

容器化环境中的基本构造:

- Containers:在群集上运行的容器

- Pods: 聚合容器,组合应用

- Services: 协同工作的Pods

- Labels: 用于组织服务,区分对象

Kubernetes承诺将云原生基础组件集中在一起,并提供将应用程序扩展到企业级的能力。基于对容器的广泛支持,Kubernetes可根据您的应用需求提供更多的灵活性来选择容器。

随着Java,Go,.Net等广泛的编程语言和框架支持,Kubernetes已经得到了开发社区的大力支持。Kubernetes内置支持各种数据库,ETL系统和大数据分析。

集群可以在任何地方安装和运行。Kubernetes完全与供应商无关,并得到Google Compute Engine,Vagrant,RackSpace,CoreOS,Fedore,Azure,AWS和vSphere等多个云提供商的支持。它是GitHub最活跃的项目之一。

Kubernetes可以跨不同的云平台,并提供快速有效地响应增长客户需求的能力。应用程序可以按需扩展,应用程序的部署可以更快,更具预测性。在无需在公共或私有云环境中使用大量资源的前提下,为开发人员提供了扩展更多增强功能和新功能的灵活性。

相关:容器 云计算 web服务 软件开发

原文链接:What Kubernetes can do for container orchestration(译者:ds_sky2008)

[原作者简介]

维卡斯·希夫普里亚(Vikas Shivpuriya)是一家大型保险公司的技术总监,主要负责产品策略和开发。在IBM,Vikas负责开发云平台,信息,集成,分析和部署,并帮助提供IBM混合云应用平台功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息