非云环境中Kubernetes的配置和运行:架构概述

这是非云环境Kubernetes的配置和运行系列的第一篇文章,本文将阐述集群架构,给出业界应用集群的各种类型,介绍应用开发的演变过程,帮助读者了解如何脱离云服务来安装和配置Kubernetes集群。

想要先睹为快的读者,可直接克隆该项目的GitHub代码库。代码库中的文档正在持续改进中,并完全可用。代码库地址为: mvallim/kubernetes-under-the-hood

集群架构图

HAProxy集群

HAProxy提供高可用负载均衡器,技术栈中包括浮动IP和 Corosync/ Pacemaker集群。

浮动IP也称“共享”或“虚拟”IP地址。浮动IP是分配给节点的正常IP地址,这些节点最终可能会产生失败。在故障切换(failover)模式下,同处被动(Passive)状态下的节点以Active/Passive模式与活动节点(Active)一并运行。一旦节点产生失败,浮动IP将透明地自动指派给被动状态节点,确保活动节点避免产生宕机。

每个HAProxy负载均衡器配置为用于分担后端应用服务器的流量。一旦主负载均衡器宕机,那么浮动IP将自动迁移到第二负载均衡器,保证服务无宕机时间。

Kubernetes 集群

Kubernetes 可协调高可用计算机集群。集群中,各台计算机作为单一的单元连接到工作环境。Kubernetes 提供抽象,支持用户将容器化应用部署到集群,无需刻意指定给单台机器。为使用新的部署模型,应用需要以单台主机可解耦的方式打包,即应用需要做容器化。相比以往的部署模型,容器化应用更为灵活,可用性更好。在原有的部署模型中,应用以软件包的方式直接安装到特定机器上,与主机是深度集成的。Kubernetes 在集群间以更高效的方式自动分发和调度应用容器。

Kubernetes 是适用于生产环境的开源平台。

Gluster

GlusterFS 是一种适用于云存储和媒体流等数据密集型任务的可扩展网络文件系统。GlusterFS 是免费开源软件,支持当前可用的通用硬件。其中,Gluster 的主要作用是为 Kubernetes Pods 提供文件卷服务。在 Kubernetes 中,GlusterFS 和 其它应用一样受管理和编排。这是一种发挥GlusterFS 卷预先配置(provisioned)、持久化功能的很好方式。

集群的定义

从英文词意上看,集群(Cluster)的同义词是“聚集”(agglomerate)或“集结成团”(agglomeration)。该术语可应用于多种场景。对于计算场景,该术语定义了一种组合多台计算机共同工作的系统架构。

每台工作站称为集群的一个“节点”,节点组成了集群。在一些情况下,相同应用场景中可能还会使用“超算”(supercomputers)或“集群计算”(cluster computing)等术语,表示用于组合使用所有设备而开发的硬件或者软件,

参考: https://en.wikipedia.org/wiki/Computer_cluster

集群是如何形成的?

看上去,将多台计算机聚集在一起完成同一工作非常简单,但事实上并非如此。针对如何高效构建集群,最早的工作由 IBM 在上世纪 60 年代开展,并一直持续发展。此类工作的目标总是增加集群的效率,即优化所有资源的完全使用,并支持集群的动态扩展。

集群是否千篇一律?

不是的。根据所关注的集群特性不同,存在多种类型的集群,适用于不同的任务和特定的市场。下面列出四种类型的集群:

故障切换(Failover),或称为高可用(HA,High Availability)

正如其名,该类集群主要设计用于保持应用持续可用、可响应。无论集群中每个节点的状态如何,最重要的是保持系统能提供服务。由此,多个节点以冗余方式工作,对用户而言是不可见的。为介绍该理念,可以想象为篮球运动中的替补队员。他们与首发队员具有相同的角色,事实上是首发队员的备份,总是保持热身状态在场外等待。如果首发队员出于某种原因需要离场,那么替补队员可以立刻上场。在没有明确告知的情况下,观众和其他队友可能不会关注到这一点。此类集群通常用于电子邮件等宕机不可接受的服务。

负载均衡(Load Balancing)

在此类架构中,所有节点都加载了需执行的任务。任务总是分发给组成系统的各节点,节点对所接收的流量请求或提供资源做出响应。从字面上看,该类架构可描述为一种“齐心协力”工作的方式。对执行复杂任务,可使用所有可用资源组合而成的计算能力。此类架构模型主要关注的是性能。如果任何一个节点宕机,就会从系统中移除,任务将在剩余集群中重新分配。

并行处理(Parallel Processing)

在此类集群架构中,大型任务被分割为多个低复杂度的活动,并在系统中分发,由组成集群的多个节点并行执行。因此,此类型集群特别适合于非常复杂的计算任务。大体而言,这类似于将具有 5000 块的拼图分发给 10 位朋友,每个人负责拼出 500 块的拼图。一旦每个朋友完成了自己的部分,各部分拼图组合在一起,就能完成整个拼图(大家都知道 MapReduce 吧)。

组合模型(Combined Models)

在一些情况下,系统可能会优先考虑稳定性而非性能,或是反之。例如,邮件传输代理(MTA)服务器或电子邮件服务器同时需要稳定性和性能。这样,企业可考虑组合负载均衡和高可用的集群。系统组合各类型集群的处理能力,同时具有包括冗余节点的内部网络,以避免服务宕机。

Kubernetes 属于那种类型?

Kubernetes 使用的是组合方式。对于容错和高可用方面,Kubernetes 可以调度或重新调度 Pods 运行在不同节点上。即便一个或多个节点宕机,也能保持应用可用。对于负载均衡方面,它可以将请求分发给运行在不同节点上的 Pod,以免特定节点成为处理中的热点,最终影响应用的整体性能。

原文链接:

Kubernetes Journey — Up and running out of the cloud — Architecture Overview

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/PHcOusZfK3bdVIRQk84z
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券