聚焦Kubernetes


在容器化的世界很容易忽视年轻的Kubernetes。鉴于其爆炸性的流行趋势,你可能已经忘了此软件出现还不到四年。那些使用该软件的人实际上已经走在尖端技术的前沿。借助容器技术,通过应用程序执行细节抽象化使得软件开发更为简化。与虚拟机相比,模块化容器化的部署使得IT团队大大减少开销并降低操作的复杂性。

2017年10 月 17 日,Docker 创始人、CTO Solomon Hykes在丹麦哥本哈根举行的 DockerCon 大会上宣布,将扩大其 Docker 平台并选择积极拥抱容器编排对手 Kubernetes,并且工程师们已经可以注册测试版。这意味着 Docker 客户及开发人员将同时可以选择使用 Kubernetes 与 DockerSwarm 进行容器工作负载的编排。

Kubernetes 介绍

Kubernetes (又被称作KubeK8s)是由Google开发的一个强大的平台,可以在集群环境中管理容器化应用程序。本文我们将聚焦体系结构,研究其所能解决的问题,并理解Kube模型用于处理容器化部署和扩展的组件。

什么是Kube?

Kube帮助解决客户在生产、开发和测试环境中,管理和编排容器时所面临的逻辑挑战,并通过声明代码防止大量的错误产生。

如果没有Kube或Docker Swam的容器编排功能,团队需要在每次发布新feature时手动更新数百个容器,从而使部署既缓慢又容易出错Kube是一个开源的容器编排平台,用于大规模管理分布式容器化应用程序。使用Kube,团队可以自动配置应用程序,管理他们的生命周期,以及维护和跟踪服务器集群中的资源分配。所有容器化应用程序通常在Rktdocker上运行。除了快速自动化发布和部署,如果出现任何状况,Kube还为应用程序基础架构提供了一个“自愈”环境。当出现该情况时,平台将对所观察到的群集状态与用户期望的状态协调。假如工作node挂了,所有的pod将会被重新安排到可用的node上。

Benefit

拥有Kubernetes, 团队可以:

自动并立即按需缩放集群(在不需要时缩小规模以节省资源和金钱)。

内部任何地方运行。无论是在公共云或私有云(例如AWS或Google)中,混合配置。

由于其轻便性,可在裸机、本地开发和云环境中不断部署。

更短的调试时间,更多地交付业务价值。

独立和自动化的操作和开发。

快速迭代部署周期,提高系统弹性。

Components

Kube的学习曲线被认为比Docker稍微广泛一些。因此要有效地使用Kube,就需要了解它的组件及其在系统架构中的功能。

Pods

Kubernetes的官方文章称 “Pods是最小的可部署计算单元,可以在Kubernetes中创建和管理” Docker, 这些单元是单一的容器。 然而在Kubernetes中pods可以包含更多容器。一个pod中的所有容器都好像联合运行在单一主机上,共享Linux 命名空间、IP地址和端口空间。作为一组或多个容器,pod通过标准进程间通信(IPC)命名空间进行通信,并访问相同的共享卷。By itself, a pod is ephemeral and will not be rescheduled to a new node if it dies. 单靠自身,Pod并非持久化。如果它挂了,将不会重新安排到一个新的node上。但可以通过保持一个或多个pod的实例与副本集一起活动来克服这一问题。后面会做详述。

Labels & Selectors

label标签是可以分配给对象(包括podnode)的价值属性。他们定义区分对用户有意义及合适对象特性label可以在创建对象时分配,也可以稍后贴上或修改。使用label可以识别、组织、选择对象子集并在开发渠道的多种维度创建顺序。发布启动(beta,稳定)环境类型(dev,prod)和或体系结构层(前端/后端)等信息都可以在label中识别labelselector作为核心方式协同工作以管理对象和组。 Kubernetes selector有两种类型:基于等式的selector基于集合的selector 基于等式的selector使用key-value pairs根据基本相等(或不相等)对对象组进行排序。基于集合的selector按值集排序key

Replica Sets

如前所述,如果node出现故障,则运行其上面的pod将不会被重新安排。Replica sets克服了Kube中的这一问题,确保在任何给定时间都有指定数量的pod实例(或副本集)一起运行。因此为了保持您的pod活着,请确保至少有一个replicate sets分配给它。  除了管理单一pod,Replica sets还可以管理并扩展到由一个共同label分类的pod组。由于在部署过程中大部分功能都是自动化的,因此您无需进行主动管理,但还是应该对系统功能有所了解以便更好地管理您的应用程序。

Networking

Kube内部,networking就是连接网络端点(pod)由于不同的IP地址,不同pod中的容器必须通过另一种方IPC通信。 Kubernetes networking解决了这种跨node节点的podpod连接,以及实现服务发现和podpod负载平衡pod安全性是通过网络划分限制访问而实现的网络策略定义了如何允许pod子集相互之间以及与其他网络端点进行交互。配置基于每个命名空间进行。

Services

Kubernetes service是一种抽象,它根据标签勾勒出了pod的逻辑子集(参见上文)。Kube的服务根据其所分配的服务来识别和利用pod组的label selector。通过服务来管理端点的方便性完全取决于label。除了服务发现功能之外,服务的这种抽象还为集群中的pod进一步提供内部负载平衡。Kubernetes提供了两种查找服务的主要方法。在节点上运行pod时,kubelet(节点代理)根据预定义为每个活动服务添加环境变量。另一种方法是使用内置DNS服务。DNS服务器监视所有新服务的Kubernetes API,并为每个服务分配一组DNS记录。当DNS在整个集群中启用时,所有的pod都应该能够自动完成服务的名称解析。


金蓝海科技有限公司 京ICP备18017748号-1