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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 「第二部:容器和微服务架构](17) 编排微服务和多容器应用程序

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


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

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


图23 容器集群

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


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


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


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


群集和编排器

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

调度程序。


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

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


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


Kubernetes

  • Kubernetes是一个开源产品,它提供了从集群基础设施和容器调度到编排功能的各种功能。它允许您跨主机集群自动化应用程序容器的部署、扩展和操作。
  • Kubernetes提供了一个以容器为中心的基础设施,它将应用程序容器分组为逻辑单元,以便于管理和发现。
  • Kubernetes在Linux中比较成熟,在Windows中比较不成熟。


Azure Kubernetes Service (AKS)

AKS

  • 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可以处理其他一切。


图24 Kubernetes 集群的简化结构与拓扑

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


Kubernetes开发环境


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


图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开发空间中最不同的功能是创建可以与集群中的其他全局部署集成运行的“空间”的功能。


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


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


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


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


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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1天前
|
存储 监控 负载均衡
深入理解微服务架构中的服务发现机制
【6月更文挑战第25天】在微服务架构中,服务发现是确保各独立服务组件能够高效、可靠通信的关键环节。本文将探讨服务发现的基本原理、核心组件以及在现代云原生应用中的最佳实践,旨在为读者提供一套系统化理解和实现服务发现机制的指导思路。
|
1天前
|
消息中间件 负载均衡 持续交付
探索后端开发:微服务架构的演进与实践
【6月更文挑战第25天】本文深入探讨了微服务架构的概念、发展以及在现代后端开发中的应用。我们将通过一个虚构案例,展示如何将传统的单体应用重构为基于微服务的架构,并讨论在此过程中遇到的挑战和解决方案。文章旨在为读者提供从理论到实践的全面指导,帮助理解微服务架构的优势及其在企业级系统中的应用。
|
1天前
|
Kubernetes 测试技术 持续交付
深入理解微服务架构及其在现代后端系统中的应用
本文将深入探讨微服务架构的核心概念、设计原则以及如何在现代后端系统中实现和优化它。我们将从微服务的定义开始,逐步展开讨论其优势、面临的挑战,以及如何克服这些挑战。同时,文章还会涉及微服务与容器化技术、持续集成/持续部署(CI/CD)的协同作用,以及微服务架构的未来发展趋势。读者将获得对微服务架构全面而深刻的理解,并能够识别在实施过程中可能遇到的陷阱和解决方案。
16 1
|
2天前
|
存储 算法 C语言
【链表专题】深入探索链表:文章索引与知识架构(链表的概念、实现、应用、经典例题大合集)
【链表专题】深入探索链表:文章索引与知识架构(链表的概念、实现、应用、经典例题大合集)
|
19小时前
|
运维 分布式计算 Cloud Native
云原生架构在现代企业中的应用与挑战
本文旨在深入探讨云原生技术在当代企业中的实际应用情况及其所面临的挑战。通过分析来自权威机构的数据、引用先进的科学理论,并结合具体案例研究,文章将详细阐述云原生技术的发展趋势、优势以及实施过程中可能遇到的问题。此外,文章还将提供针对性的解决策略,以帮助企业更好地利用云原生技术提升业务效率和创新能力。
|
19小时前
|
缓存 C语言 计算机视觉
程序与技术分享:CPU0处理器的架构及应用
程序与技术分享:CPU0处理器的架构及应用
|
2天前
|
消息中间件 监控 Java
使用Java构建微服务架构的最佳实践
使用Java构建微服务架构的最佳实践
|
2天前
|
监控 Java 持续交付
构建Java微服务架构的CI/CD流程
构建Java微服务架构的CI/CD流程
|
2天前
|
设计模式 缓存 安全
打造高效的Java应用架构
打造高效的Java应用架构
|
2天前
|
Cloud Native Java 持续交付
使用Java实现云原生应用架构
使用Java实现云原生应用架构

热门文章

最新文章