APP下载

容器化管理架构之K8S丛集概述

消息来源:baojiabao.com 作者: 发布时间:2024-05-10

报价宝综合消息容器化管理架构之K8S丛集概述

时下随着虚拟化云和容器技术的大力发展,将云和容器技术作为企业基础设施变得越来普遍。企业利用虚拟化技术实现规模的业务架构,不在关注物理硬件、硬件配置、CPU,内存和磁盘是不是够快是不是够大等诸如此列的问题,一切按照配置自动生成,自动横向扩充套件和收缩。随着应用程序开发的微服务的流行,应用程序变得越来越复杂,通过服务界面相互通讯,应用容器化成了必然选择。尤其构建基于容器的开发测试演示环境成了必然选择。

云端计算和容器技术开启全新的系统架构和思维方式。越来越多的公司开始将他们的工作负载转移到云中,应用程序变成了复杂的系统,由多个整合且不断发展的小部件组成,为了解决容器云的管理Google推出了容器编排系统Kubernetes,各公有云厂商也各自提供自己的类Kubernetes编排系统比如GKE,EKS,AKS等。

通过大型云提供商提供Kubernetes为软件开发人员和公司带来了许多好处。但是,仍有相当数量的公司因各种原因(例如法规,资料安全)不允许直接使用公有云。那么基于公司内部资料中心的Kubernetes私有容器云架构就成了唯一的选择。本文虫虫就给大家介绍Kubernetes私有容器云中涉及的基本概念(网络,安全性,高可用性,灾难恢复等),架构、工具栈等。

K8S体系结构

该部分我们来介绍K8S丛集的体系架构图和各个丛集的构成。介绍业界常见的丛集型别及Kubernetes丛集特性。

HAProxy丛集

高可用性HAProxy负载均衡器由VIP和Corosync/Pacemaker丛集堆叠构成。

VIP虚拟IP,也叫共享IP或浮动IP。VIP是分配给负载均衡排程器的普通IP地址。排程器以主备模式执行,正常情况下通过VIP访问到主调入器再排程到后端应用。如果主排程器发生故障,VIP自动转移到备用排程器,启用备用排程器完成排程,从而实现高可以避免单点故障。

HAProxy负载平衡器都配置对后端应用程序服务器排程,都单独可以承担流量。主排程器发生故障,所有流量自动迁移到备用排程器,实现故障迁移和业务流量的自动切换。

Kubernetes丛集

Kubernetes管理一个高度可用的计算机丛集,这些计算机连线起来作为一个单元工作。 Kubernetes中的抽象允许将容器化应用程序部署到丛集,而无需将它们专门系结到某个计算机上。为了利用这种新的部署模型,应用程序需要以一种将它们与单个主机分离的方式集装箱化打包。与以往的部署模型相比,容器化应用程序更加灵活和可用,应用程序直接安装到特定计算机上,程式包深度整合到主机中。Kubernetes以更有效的方式自动化在丛集范围内分发和排程应用容器。

Gluster丛集

GlusterFS是一个可扩充套件的分散式档案系统,适用于云端储存和媒体流等资料密集型任务。 GlusterFS是免费的开源软件,可在常见的硬件上部署。Gluster的主要目的是为Kubernetes Pods提供GlusterFS卷服务。Gluser使得GlusterFS卷管理类似Kubernetes中的任何其他应用程序一样进行编排和管理。

群集分类

丛集Cluster意思是聚集或集合在一起,可以应用于各种环境。在计算环境中,丛集定义了一种能够以分散式方式将多台计算机组合在一起完成系统的架构和执行。丛集的每个组成点称为节点Node,有节点组合形成群集。常见丛集主要有四种主要型别:

高可用性(HA)

顾名思义,这种型别的丛集的重点是使保持业务高可以用,持续可以访问和响应。无论每个节点发生什么问题,系统都能保持线上状态,并提供服务。为包保证高可用,一般来说多个节点以冗余的方式提供使用者服务。该丛集主要用于服务不可中断的情况,比如银行系统,电子商务系统等。

负载均衡

在这种型别的体系结构中,所有节点都负责执行任务。无论是响应传入的流量请求,还是提供资源,任务总是分配给组成系统的各节点。实际上是一种"一对一"的方法。最简单到最复杂的任务是通过所有可用资源的并集产生的计算能力来执行的。在负载均衡模式中,优先考虑效能,如果任何节点发生故障,它将从系统中删除,并由余节点接管他的任务。

并行处理

在这种型别的丛集中,大型任务在不太复杂的活动之间划分,由系统分布并由组成丛集的各个节点并行执行。因此,这种型别的丛集非常适合非常复杂的计算任务。比如Hadoop丛集的MapReduce模型。

组合模型

在很情况下,效能和稳定性都要兼顾不。所以采用够结合高可用和负载平衡的丛集就成了必然的选择。这样通过组合不同性质的节点,是的丛集既具有一定冗余来保证高可以用性,同时以负载均衡来提供丛集的效能。

Kubernetes丛集就是采用综合了故障转移和高可用性,它支援POD在不同节点上执行,即使一个(或多个)POD发生故障也能保持应用的正常执行。同时具有负载平衡的特性,可以把丛集的请求排程分发到在不同节点的POD,避免特定节点成为热点并最终影响系统的效能。

技术元件

本部分我们将介绍K8S丛集中各个技术元件,K8S丛集是一个由大量的工具栈组成的体系结构,每一个元件都是K8S不可或缺的有机组成部分。

HAProxy

第二部分K8S体系架构中,我们将了HAProxy丛集是K8S体系结构中最重要的组成部分之一。

HAProxy是一种免费开源的代理软件,是最常用的负载均衡排程器。可用于TCP和HTTP的应用的代理、高可用性和负载平衡,是一种快速可靠的排程器解决方案。被大量的高负载网站所使用,国内大的网站架构中也大量采用HAProxy作为排程层或者代理层。多年来,HAProxy已成为事实上的开源负载均衡器标准,在大多数主流Linux发行版一起都提供该软件的打包,在云平台中也通常预设安装该元件。

在K8S丛集中,HAProxy用于负载均衡器(LB)排程器, 用于Kubernetes API。

让我们假设一个场景:如果只有一个HAProxy例项执行负载平衡,会发生什么?架构将存在单点故障(SPOF):不论由于何种原因,单一的HAProxy失败了,我们将完全失去对Kubernetes API的访问许可权。为了解决这个问题,HAProxy将成为由VIP驱动的高可用性丛集(HA)的一部分,并且至少配置了两个HAProxy服务。总之,需要建立一个高度可用的负载平衡群集。

Corosync

Corosync丛集引擎是一个讯息通讯系统,实现应用程序高可用性的附加功能。Corosync被Apache Qpid和Pacemaker等专案用作高可用性框架。Corosync有两个主要用途:保持丛集的状态(知道节点何时加入或离开丛集)并将讯息分发给所有丛集成员。

节点加入群集

要更新群集状态,群集的所有节点都应安装Corosync并以相同方式配置。因此,每次启动包含Corosync的节点时,将会发生如下会话:

新节点发送广播讯息,说:"那里有Corosync成员吗?"

网络中现有的Corosync例项收到讯息并回复:"我在这里!"

新节点从这些现有例项接收响应并说:"您好!我想加入群集。这是我的凭据!"

现有Corosync例项接收此请求加入讯息,验证收到的凭据(配置),并根据仲裁配置决定是否接受该新节点。

节点离开丛集

在节点加入集群后,它会知道所有其他节点。同样,所有其他节点都知道该新节点,并且他们已经知道所有以前的成员。Corosync会持续监视节点成员的执行状况:

每个节点都有一个包含所有其他节点地址的列表。

每个节点将与其本地列表中的节点进行互动。

如果由于任何原因,节点无法与此本地列表中的给定节点进行互动,那么它将认为该节点不健康。

然后,节点将咨询所有其他成员,以检查他们是否可以看到这个可能不健康的节点。

然后每个节点都会进行一次投票,说明该节点是健康的还是不健康的。

Corosync将根据收到的投票评估仲裁配置,以确定该节点应标记为健康或不健康。如果节点标记为执行状况不佳,则群集仍然可以知道该节点,但在该状态下将不会使用该节点。

Pacemaker

Pacemaker是一个开源,高可用性资源管理器,适用于小型和大型丛集。主要用于在Corosync中建立和和配置资源,从而实现负载均衡排程器高度可用。为此,丛集使用Pacemaker宣告一个VIP和一个HAProxy资源,这两个资源都将在Corosync丛集管理的节点中设定。Pacemaker使用宣告式方法建立一个配置档案,指定每个节点上应该存在哪些资源以及这些资源如何相互关联。如果HAProxy在同一节点中处于活动状态,则VIP应仅在给定节点中处于活动状态,反之亦然。简单来说,当节点处于活动模式时,我们希望将VIP和HAProxy分配给它并在其上执行,而所有其他节点将处于被动模式,直到由于某种原因,节点或资源附在它上面失败了。当发生这种情况时,分配给活动节点的资源被"迁移到"(或启动)其中一个可以满足所有依赖条件被动节点,所选节点将成为活动节点,之前的活动节点将转换为被动状态。

dnsmasq

Dnsmasq为小型网络提供网络基础设施:DNS,DHCP,路由器设施和网络引导。Dnsmasq涉及轻巧,占用资源少,适用于资源受限的路由器和防火墙。它还被广泛用于智能手机和行动式热点(AP)的网络共享,还用于虚拟化框架中的虚拟网络。支援的平台包括Linux,Android,*BSD和Mac OS X等系统。Dnsmasq提供完整的IPv6支援。"

在K8S丛集中dnsmasq主要用为节点提供DNS和DHCP功能。

DHCP将负责为加入网络的每个新主机(节点)分配IP地址和网络配置。这样就无需为每个加入网络的新主机建立过多设定,也无需手动执行此操作。主机向网络执行广播,DHCP服务以所需的设定进行响应。

DNS负责解析内部网络中的域名以及来自公共DNS的域名。

DHCP和DNS协同工作,对于每个加入网络的新主机,DHCP都会使用此主机名到其IP的对映来更新DNS服务,这样丛集(所有节点)就可以通过其名称引用新主机,而无需关心其IP地址。

VirtualBox

VirtualBox是一款功能强大的x86和AMD64/Intel64虚拟化产品,适用于企业和家庭使用者。VirtualBox不仅是一款功能丰富,功能强大的企业客户产品,它也是唯一一款依据GNU通用公共许可证GPLv2免费提供的开源软件专业解决方案。

Coud-INIT

cloud-init是在GPLv3开源许可证和Apache V2.0下免费软件开发和释出的软件。最初用于Amazon EC2中的Linux的Ubuntu发行版,但现在每个主要云中的Linux和UNIX发行版都大都支援它。

LVM逻辑卷管理器

与传统的磁盘和分割槽检视相比,逻辑卷管理提供了计算机系统上磁盘储存的更高阶抽象。这为系统管理员提供了更大的灵活性,可以为应用程序和使用者分配储存。在逻辑卷管理器的控制下建立的储存卷可以调整大小并随意移动。LVM允许我们对磁盘进行动态的管理。

在特定情况下,需要建立一个VM映像,它会成为许多其他映像(Gateway,HAProxy,Kubernetes主/工作节点和Gluster)的基础,每个服务都有自己的空间需求(比如/ var,/usr,/tmp,/opt,/etc),LVM将为我们提供根据需要动态调整分割槽卷大小的灵活性,而无需事先关注这些细节。

Gluster

Gluster是一个免费的开源软件可扩充套件的网络档案系统。详细介绍见上一部分的Gluster丛集。

Docker

Docker基于Linux核心的轻量系统虚拟化技术,通过在Docker容器中打包软件和气基础依赖包可以实应用的快速释出和交付部署,并且保持基础环境的高度统一。Docker容器由Docker Engine服务进行执行和管理。Docker专案由Docker.Inc开发,并与2013年开源免费提供。Docker最初基于namespace,cgroup和LXC技术使用Golang语言开发,源代码以Apache 2.0协议开源。。它不仅提供执行容器,还可以轻松建立,构建,上载和控制版本映象(基于Git思想)。

Kubernetes

Kubernetes(K8s)是一个开源系统,用于自动化容器化应用编排、部署

扩充套件和管理的系统

Kubernetes是一个开源容器编排系统,用于自动化应用程序部署,扩充套件和管理,能够智慧,干净地管理容器。

2019-08-12 01:48:00

相关文章