「第二部:容器和微服务架构](17) 编排微服务和多容器应用程序

2024-02-14 10:30

本文主要是介绍「第二部:容器和微服务架构](17) 编排微服务和多容器应用程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

协调微服务和多容器应用程序以实现高可扩展性和可用性

如果您的应用程序基于微服务或只是跨多个容器拆分,那么使用面向生产的应用程序的编排器是必不可少的。如前所述,在基于微服务的方法中,每个微服务都拥有自己的模型和数据,以便从开发和部署的角度来看它是自治的。但是,即使您有一个更传统的由多个服务组成的应用程序(如SOA),您也将有多个容器或服务,这些容器或服务由一个需要作为分布式系统部署的业务应用程序组成。这些类型的系统在扩展和管理方面很复杂;因此,如果您想要有一个生产就绪且可扩展的多容器应用程序,您绝对需要一个编排器。

图23展示了部署到由多个微服务(容器)组成的应用程序集群中的过程。

d3f0f660a82c5025e70aa758d226b39a.png图23 容器集群

为每个服务实例使用一个容器。Docker容器是“部署单元”,容器是Docker的实例。主机处理许多容器。这看起来是一种合乎逻辑的方法。但是,如何处理负载平衡、路由和编排这些组合应用程序?

单Docker主机中的普通Docker引擎满足了在一台主机上管理单个映像实例的需要,但在管理部署在多台主机上的多个容器以用于更复杂的分布式应用程序时,它就显得力不从心了。在大多数情况下,您需要一个管理平台,它将自动启动容器、扩展每个映像包含多个实例的容器、挂起它们或在需要时关闭它们,并且理想情况下还控制它们如何访问网络和数据存储等资源。

要超越对单个容器或非常简单的组合应用程序的管理,转向具有微服务的大型企业应用程序,您必须转向编排和群集平台。

从架构和开发的角度来看,如果您正在构建由基于微服务的应用程序组成的大型企业,那么了解以下支持高级方案的平台和产品非常重要:

群集和编排器

当你需要在多个Docker主机上扩展应用程序时,就像一个大型的基于微服务的应用程序一样,通过抽象底层平台的复杂性,将所有这些主机作为一个集群来管理是至关重要的。这就是容器集群和编排器提供的功能。Kubernetes是一个编排器的例子,通过Azure Kubernetes服务在Azure中可用。

调度程序。

调度意味着管理员能够在集群中启动容器,以便它们也提供一个UI。集群调度器有几个职责:高效地使用集群的资源,设置用户提供的约束,有效地跨节点或主机平衡容器的负载,在提供高可用性的同时对错误保持健壮。

集群和调度程序的概念是密切相关的,因此不同供应商提供的产品通常同时提供这两组功能。下表显示了集群和调度程序所具有的最重要的平台和软件选择。这些编排器通常在诸如Azure之类的公共云中提供。

用于容器群集、编排和调度的软件平台

Kubernetes

f3100a4d6aae4f668bf5fbee1a0039d9.png

  • Kubernetes是一个开源产品,它提供了从集群基础设施和容器调度到编排功能的各种功能。它允许您跨主机集群自动化应用程序容器的部署、扩展和操作。

  • Kubernetes提供了一个以容器为中心的基础设施,它将应用程序容器分组为逻辑单元,以便于管理和发现。

  • Kubernetes在Linux中比较成熟,在Windows中比较不成熟。

Azure Kubernetes Service (AKS)

2c44216202b9630ea1a812599e2c86c1.pngAKS

  • Azure Kubernetes服务徽标的图像。AKS是Azure中的托管Kubernetes容器编排服务,它简化了Kubernetes群集的管理、部署和操作。

在Microsoft Azure中使用基于容器的编排器

一些云供应商提供Docker容器支持以及Docker集群和编排支持,包括Microsoft Azure、Amazon EC2容器服务和Google容器引擎。Microsoft Azure通过Azure Kubernetes服务(AKS)提供Docker群集和orchestrator支持。

使用Azure Kubernetes服务

Kubernetes集群将多个Docker主机合并为一个虚拟Docker主机,因此您可以将多个容器部署到集群中,并使用任意数量的容器实例进行扩展。集群将处理所有复杂的管理管道,如可伸缩性、运行状况等。

AKS提供了一种方法,可以简化Azure中预先配置为运行容器化应用程序的虚拟机群集的创建、配置和管理。通过使用流行的开源调度和编排工具的优化配置,AKS使您能够使用现有的技能或利用大量不断增长的社区专业知识在Microsoft Azure上部署和管理基于容器的应用程序。

Azure Kubernetes服务优化了流行的Docker集群开源工具和技术的配置,特别是针对Azure。您将得到一个开放的解决方案,它为您的容器和应用程序配置提供可移植性。您可以选择大小、主机数量和orchestrator工具,AKS可以处理其他一切。

86c9bb2243f55687663399f70b229822.png图24 Kubernetes 集群的简化结构与拓扑

在图24中,您可以看到Kubernetes集群的结构,其中主节点(VM)控制集群的大部分协调,您可以将容器部署到其他节点,从应用程序的角度来看,这些节点作为单个池进行管理,并允许您扩展到数千甚至数万个容器。

Kubernetes开发环境

在开发环境中,Docker在2018年7月宣布,Kubernetes也可以通过简单安装Docker桌面在单一开发机器(Windows 10或macOS)中运行。您可以稍后部署到云(AKS)进行进一步的集成测试,如图4-25所示。

2561fc4dc14c18dec73884e6d7f2bbdf.png图25 在dev machine和cloud中运行Kubernetes

Azure Kubernetes服务(AKS)入门

要开始使用AKS,可以从Azure门户或通过使用CLI部署AKS集群。有关在Azure中部署Kubernetes群集的详细信息,请参阅部署Azure Kubernetes服务(AKS)群集。

作为AKS的一部分默认安装的任何软件都不收费。所有默认选项都是用开源软件实现的。AKS可用于Azure中的多个虚拟机。您只需为您选择的计算实例以及所消耗的其他基础架构资源(如存储和网络)付费。AKS本身没有增加费用。Kubernetes的默认生产部署选项是使用Helm图表,这将在下一节介绍。

使用Helm Charts部署到Kubernetes集群

将应用程序部署到Kubernetes集群时,可以使用原始的kubectl.exe CLI工具,该工具使用基于本机格式的部署文件(.yaml文件),如前一节所述。但是,对于更复杂的Kubernetes应用程序,比如部署复杂的基于微服务的应用程序时,建议使用Helm。

Helm图表可以帮助您定义、版本、安装、共享、升级或回滚最复杂的Kubernetes应用程序。

更进一步说,还建议使用Helm,因为Azure中的其他Kubernetes环境(如Azure开发空间)也基于Helm图表。

Helm由云本地计算基金会(CNCF)维护,与微软、谷歌、Bitnami和Helm贡献者社区合作。

有关Helm图表和Kubernetes的更多实现信息,请参阅使用Helm图表将eShopOnContainers部署到AKS post。

在Kubernetes应用程序生命周期中使用Azure开发空间

Azure开发空间为团队提供了快速、迭代的Kubernetes开发体验。通过最少的开发机器设置,您可以直接在Azure Kubernetes服务(AKS)中迭代运行和调试容器。使用熟悉的工具(如Visual Studio、visualstudio代码或命令行)在Windows、Mac或Linux上进行开发。

如前所述,Azure开发空间在部署基于容器的应用程序时使用Helm图表。

Azure Dev Spaces可以帮助开发团队提高Kubernetes的工作效率,因为它允许您通过简单使用Visual Studio 2019或Visual Studio代码直接在Azure的全局Kubernetes集群中快速迭代和调试代码。Azure中的Kubernetes集群是一个共享的托管Kubernetes集群,因此您的团队可以协同工作。您可以单独开发代码,然后部署到全局集群,并使用其他组件进行端到端测试,而无需复制或模拟依赖项。

如图26所示,Azure开发空间中最不同的功能是创建可以与集群中的其他全局部署集成运行的“空间”的功能。

fdc646b0ef4966816b34ca85d7099cf3.png图26 在Azure开发空间中使用多个空间

基本上你可以在Azure中设置一个共享的开发空间。每个开发人员都可以只关注应用程序的一部分,并且可以在开发空间中迭代地开发预提交代码,该空间已经包含了他们的场景所依赖的所有其他服务和云资源。依赖项始终是最新的,开发人员的工作方式反映了生产。

Azure Dev Spaces提供了一个空间的概念,它允许您在相对隔离的环境下工作,而不必担心破坏团队的工作。每个开发空间都是层次结构的一部分,它允许您使用自己正在进行的微服务覆盖“顶级”主开发空间中的一个(或多个)微服务。

此功能基于URL前缀,因此当在URL中使用任何开发空间前缀时,如果目标微服务存在于开发空间中,则会向其提供请求,否则会向上转发到层次结构中找到的目标微服务的第一个实例,最终到达顶部的主开发空间。

要获得具体示例的实际视图,请参阅Azure Dev Spaces上的eShopOnContainers wiki页面。

讨论:请加入知识星球【首席架构师圈】或者加微信小号【jiagoushi_pro】或者加QQ群【11107777】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
7d487da06c24ee1429e7fb8541dbb121.png
微信小号

【cea_csa_cto】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

816055b1f0785a4c849f717f49fd5893.png

QQ群

【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

fe6379222140f9bb59029df42a0e9536.png

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

7b045ab8c4ea0fd16bb4d86f23507b2f.png

知识星球向大咖提问,近距离接触,或者获得私密资料分享。知识星球【首席架构师圈】
微信圈子志趣相投的同好交流。微信圈子【首席架构师圈】
喜马拉雅路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
微博【智能时刻】智能时刻
哔哩哔哩【超级架构师】
抖音【cea_csa_cto】超级架构师
快手【cea_csa_cto】超级架构师
小红书【cea_csa_cto】超级架构师首席架构师智库

谢谢大家关注,转发,点赞和点在看。

这篇关于「第二部:容器和微服务架构](17) 编排微服务和多容器应用程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/708256

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者