「第二部:容器和微服务架构](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

相关文章

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D