企业级容器部署实战:基于ACK与ALB灵活构建云原生应用架构

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 这篇内容概述了云原生架构的优势,特别是通过阿里云容器服务Kubernetes版(ACK)和应用负载均衡器(ALB)实现的解决方案。它强调了ACK相对于自建Kubernetes的便利性,包括优化的云服务集成、自动化管理和更强的生态系统支持。文章提供了部署云原生应用的步骤,包括一键部署和手动部署的流程,并指出手动部署更适合有技术背景的用户。作者建议在预算允许的情况下使用ACK,因为它能提供高效、便捷的管理体验。同时,文章也提出了对文档改进的建议,如添加更多技术细节和解释,以帮助用户更好地理解和实施解决方案。最后,展望了ACK未来在智能化、安全性与边缘计算等方面的潜在发展。水文一篇,太忙了,见谅!

前言

在信息化浪潮的不断推进下,企业IT架构面临的挑战日益严峻。传统架构的局限性,诸如僵化的资源分配、复杂的运维流程、缓慢的迭代速度,以及高昂的扩展成本,已逐渐成为制约业务敏捷性与创新力的瓶颈。随着云计算技术的蓬勃发展,云原生架构以其革命性的设计理念,为这些问题提供了一剂良方,迅速在全球范围内掀起了一场技术变革的风暴。

云原生架构之所以能够蔚然成风,核心在于其对软件开发、部署及运维模式的根本性重塑。它倡导微服务化,使得应用能够被拆分为多个小型、独立的服务单元,每个单元都能够独立部署、扩展和维护,大大提升了开发效率与系统的灵活性。容器技术和Kubernetes的兴起,更是为云原生应用的部署与管理提供了强大的技术支持,实现了资源的高效利用与应用的秒级伸缩。

本文将从理论到实践,逐步揭开ACK与ALB协同工作的神秘面纱,通过实战步骤指导读者快速部署云原生应用,同时深入探讨如何克服部署过程中可能遇到的挑战,最终实现应用的快速上线与动态扩展,为企业的数字化转型之旅铺就一条坚实的云原生之路。

欢迎大家参与评测活动,一起优化完善解决方案,评测活动地址:https://developer.aliyun.com/topic/ack-services

image.png

周周过往撰写的关于阿里云容器产品文章可见如下:

ACK集群应用部署进阶

基于ACR的镜像仓库管理

通过ACR快速部署网站应用实践

容器应用的高弹性架构实践

因为我们使用的是自建的K8S,确实也很少用到ACK,所以周周近期关于ACK的学习并不是很多,上述几篇大都是去年写的。

阿里云容器服务Kubernetes版

在这个解决方案下,我没有选择直接单刀直入开始学习架构,而是想先好好唠一唠ACK和自建K8S的区别。

所谓自建,就是自己在物理机或者ECS上部署开源Kubernetes平台。

而非自建,就是直接购买使用云上的PAAS服务,全套的从物理层到容器层的环境都由云厂商提供,底层也是基于开源的Kubernetes打造的,云上一般都自带管理工具,比如这里阿里云的ACK。

那么阿里云的 ACK 和原生的 K8S 的关系是什么呢?

其实,阿里云的 K8S 也是基于 K8S 二次开发和定制,因为 K8S 是开源的,所以ACK主要是针对云上的这种应用场景和运行的环境进行了优化和改进。

那么究竟是ACK好用还是原生K8S好用呢?

从我自己做运维的角度来看,如果预算充足,在不考虑成本的情况下,我建议还是使用ACK比较好。它具备更便捷的基础类管理,在管理方面更便捷,然后服务能力也更加强大,而且还深度的整合了阿里云的生态,像阿里云很多的产品,比如容器服务、ASM 服务网格,它都是可以直接去连接使用的,有了这些能力后,它就可以帮助用户快速的去构建发布。发布可以通过统一的发布平台,看日志排错可以通过统一的日志平台。只有极少数的紧急突发情况需要登录到K8S的容器环境里去进行生产的直接调试排错。所以阿里云的 ACK 可以理解为是更强大的K8S,更适应于云环境的K8S。

image.png

方案介绍

技术架构及相关基础设施和云服务

image.png

【专有名词解释如下】:

  • 普通用户(Client):代表的是最终用户使用的设备或应用程序,例如浏览器或者移动应用。这些客户端会发起HTTP或HTTPS请求来访问对应业务网站。

  • 负载均衡器ALB(Application Load Balancer):ALB是一种网络负载均衡解决方案,用于将流量分发到多个实例或服务上,以提高可用性和性能。在该架构中,ALB接收来自普通用户的请求,并根据配置策略将其路由到相应的容器服务Kubernetes版中的应用A或应用B。

  • 容器服务Kubernetes版:这是一个基于Kubernetes的容器编排平台,用于部署、管理和扩展容器化应用程序。在这个方案中,容器服务Kubernetes版提供了一个灵活且可扩展的基础架构环境,支持Service A和Service B的部署和管理。

  • 节点池:这是容器服务Kubernetes版的一部分,由一组运行Kubernetes工作负载的计算资源组成。每个节点池可以包含一个或多个Pod,这些Pod承载着实际的服务实例。

  • Pod1和Pod2:它们是容器化的应用程序实例,分别属于应用A和应用B。这些Pod通过Kubernetes进行管理和调度,在节点池内运行,直接处理来自ALB转发过来的流量。

  • VPC(Virtual Private Cloud):这是一种虚拟化的云计算环境,允许用户在安全、隔离的环境中构建和运行自己的IT基础设施。在这个架构中,VPC为整个系统提供了基础的网络环境,连接了各个组件和服务。

用户请求通过公网进入指定区域的VPC,经由应用负载均衡器(ALB)分配至Kubernetes集群,随后流入对应服务(Service A或B)下的节点池,最终由各服务的Pod实例处理请求,实现了外部访问到微服务应用的高效、有序传输。

方案部署

image.png

主要步骤如下:

1.部署准备
开始部署前,需要完成一些准备工作,包括申请阿里云账号、为账号充值、开通阿里云容器服务Kubernetes版等。

2.创建资源
创建专有的网络VPC,并将其与阿里云容器服务Kubernetes版关联起来。这一步通常涉及配置网络设置,比如子网、安全组规则以及其它必要的云资源。

3.部署微服务应用
将微服务应用A和B部署到ACK集群中,并配置Service和Ingress。Service是一种用于定义如何访问应用的方法,而Ingress则用于控制进入集群的流量,提供反向代理、负载均衡等功能。

4.验证及清理
最后,验证方案是否成功部署,然后释放不再需要的资源以节省成本。

页面下方还提供了两种部署方式的选择:“一键部署”“手动部署”,用户可以根据自身需求选择合适的部署方法。

一键部署基于ACK与ALB的云原生应用架构

点击一键部署,进入方案界面,点击部署准备。

image.png

需保证阿里云账号已注册,且账户余额大于100元。

image.png

进入一键部署界面,点击前往ROS控制台。

image.png

选择【可用区】和【实例规格】,下方设置实例密码:

image.png
image.png

填写完所有必选信息并确认后单击创建开始一键配置。如出现下图告警是因为角色权限缺失导致的,点击
开通链接开通即可。

image.png

确认开通。

image.png

最后创建成功后如图所示:

image.png

再登录到容器服务ACK管理控制台中,点击集群。

image.png

在左侧导航栏,选择网络,在展开的菜单中选择路由,找到创建的ALB Ingress的端点一列,获取端点域名,在浏览器中访问端点域名/a,查看返回值,例如:

image.png

手动部署基于ACK与ALB的云原生应用架构

在手动部署中,则是需要自己创建基础设施及应用。

其中,基础设施如下表,在此不过多赘述:

image.png
image.png

应用部署则是需要从创建创建无状态工作负载(Deployment)开始,创建完成后进入【工作负载】,在展开的菜单中选择【无状态】,点击右上角【使用YAML创建资源】,在新页面中的模板输入框中填入如下内容

分别在a和b中执行yaml脚本:

image.png

接下来添加服务。在左侧导航栏,选择【网络】,在展开的菜单中选择【服务】,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:

apiVersion: v1
kind: Service
metadata:
  name: ecs-ack-test-service-a
spec:
  selector:
    app: ecs-ack-test-service-a
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

最后,在左侧导航栏,选择【网络】,在展开的菜单中选择【路由】,检查ALB组件是否安装。点击右上角创建Ingress,在右侧弹出的创建Ingress面板中,网关类型点击ALB Ingress,如提示ALB组件未安装,则点击开始安装,否则点击面板右上角关闭按钮即可。

在左侧导航栏,选择【网络】,在展开的菜单中选择【路由】,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name:  ecs-ack-test-alb-config
spec:
  config:
    name: ecs-ack-test-alb
    addressType: Internet
    zoneMappings:
    - vSwitchId: vsw-bp1******ups
    - vSwitchId: vsw-bp1******8xm
  listeners:
    - port: 80
      protocol: HTTP

总的来说,手动部署确实会复杂很多,不仅需要逐一创建和配置VPC、ECS实例、ALB等云产品资源,确保这些基础架构能够良好协同工作;还要深入ACK集群内部,进行细致的资源规划、网络策略设定以及服务部署等操作,它要求操作者具备更深入的技术理解和实践能力,所以如果不是技术追求者,建议还是采用一键部署的方式来实现。

体验和建议

最近确实空闲时间也不多,在我看完手动部署后已经失去尝试的欲望了,所以我想,这个测评,最能体现出的是ROS资源编排所带来的效率提升与管理便捷性。它以声明式的方式,将云产品如 ECS、SLB、VPC 等一系列资源的创建、配置和依赖关系,统一在一个模板中定义并自动部署的能力。这种“代码化”的管理方式,大幅减少了人为错误,提高了部署的一致性和可复用性,还使得整个基础设施如同应用代码一样,变得可版本控制、可审计、易于维护。这是我目前最大的感受(QAQ)!!

第二点想说的是,其实这方案并没有提到太多的技术细节,又是经典的step by step指南,所谓的技术细节介绍几乎没有。假设这个方案要被企业真正投入使用,一键部署大多情况是指望不上,因为里面会预置这里测试的应用,而手动部署时特别是关于添加路由这一块只有步骤和脚本,完全没有任何说明。

image.png

而且排错方式写的是如果创建失败就删了重建,怎么说呢,我承认虽然有效且方便,但是是不是有些太过于粗犷了。

image.png

所以说这里建议增加一些关于路由脚本的解释,方便使用者理解,甚至用千问直接生成一个都可以:

image.png

当然,其他脚本也同理,有条件的情况下增加一些注释也是好的。

对于容器托管的优势,我其实前文也提到了,这里也不冠冕堂皇的说那些套话了,总结下来就是省时,省心,省力(但不省钱),所以说,如果预算充裕,完全可以直接考虑ACK服务的。

image.png

展望

目前,其实ACK(阿里云容器服务)已经紧跟时代脉搏,不断将前沿技术融入其服务体系中。展望未来,期望ACK能致力于构建一个以智能化为核心、深度整合安全与合规性、边缘计算能力的全方位云原生服务平台,继续推动技术边界的拓展,更好的帮助企业在全球数字化浪潮中敏捷前行,共创智能、安全、高效的数字未来。

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