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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
3天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
2天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
11 1
服务架构的演进:从单体到微服务的探索之旅
|
1天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
17 5
|
3天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理策略
随着云原生技术的不断成熟,微服务架构已成为现代应用开发的主流选择。本文探讨了在云原生环境下实施微服务治理的策略和方法,重点分析了服务发现、负载均衡、故障恢复和配置管理等关键技术点,以及如何利用Kubernetes等容器编排工具来优化微服务的部署和管理。文章旨在为开发者提供一套实用的微服务治理框架,帮助其在复杂的云环境中构建高效、可靠的分布式系统。
14 5
|
3天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
2天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
2天前
|
Cloud Native API 持续交付
云原生之旅:从容器到微服务的演进之路
【10月更文挑战第39天】在这篇文章中,我们将一起探索云原生技术的奥秘。通过浅显易懂的语言和生动的比喻,我们将了解云原生技术如何改变软件开发的世界。文章将带领读者从容器的基本概念出发,逐步深入到微服务架构的实践,揭示这些技术如何助力现代应用的快速迭代与可靠部署。准备好,让我们启程进入云原生的精彩世界吧!
|
4天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
4天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?