「云原生」「云原生应用的构建与部署」

云原生

为什么需要云原生?

  • 从技术发展趋势看,更多的企业将会广泛应用云原生技术。在国家政策和企业需求的双重驱动下,更多企业上云,以及中国云计算的强势增长都是必然趋势,这也注定了更多企业将会关注、应用、采纳能够充分利用云计算能力的云原生技术和产品。
  • 从软件开发角度看,云原生技术为企业带来了更快进行业务创新的价值。越来越多的企业逐渐意识到了云服务的专业性和高 SLA,这些企业在数字化转型的过程中将 IaaS 和 PaaS 的通用技术复杂性委托给了云平台,从而能够更好地专注于自身业务逻辑的创新;利用云原生技术重塑企业的软件生产流水线,可以加大业务组件的复用程度,将软件交付周期从周、天降低到小时甚至分钟级别,从而提升业务的市场嗅觉灵敏度,增强市场反应能力。
  • 从应用技术栈角度看,越来越多的企业发现传统的应用已经无法满足数字化业务的需要,所以会对应用进行彻底升级,会更多地采用云原生技术和云原生架构作为构建现代化应用的核心框架,从而帮助企业自身打造具备弹性、韧性、可观测性、API 驱动、多语言支持、高度自动化、可持续部署等特性的现代化应用软件。

什么是云原生?如何理解云原生

云原生(Cloud-Native)。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。

**官方定义:**云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更。

个人理解 :云原生是一种构建和运行应用程序的方法 ,是一套技术体系和方法论,旨在充分利用云计算、容器化和微服务架构等现代技术来构建和运行应用程序。符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

相关链接

关键技术

容器技术 docker

容器作为标准化软件单元,可用于将应用及其所有依赖项整体打包,使应用不再受到环境的限制,从而可以在不同计算环境之间快速、可靠地运行。

常用的是Docker容器,基于操作系统虚拟化技术,具有共享操作系统内核、轻量、无资源损耗、秒级启动等优势,极大地提升了系统的应用部署密度和弹性。更重要的是,Docker 提出了创新的应用打包规范,即Docker镜像,它解耦了应用与运行环境,使应用可以在不同计算环境间一致、可靠地运行。

k8s

Kubernetes(简称 K8s),是支持云原生部署的主流平台。是一种分布式容器管理平台,是为了更方便的在服务器中管理我们的容器化应用,也是当今主流自动部署、扩缩和管理容器化应用程序的开源系统。

k8s的职责

  1. 自动化容器的部署和复制
  2. 随时扩展或收缩容器规模
  3. 容器分组Group,并且提供容器间的负载均衡
  4. 实时监控:及时故障发现,自动替换

docker和k8s的关系

Kubernetes 和 Docker 都是用于运行容器化应用的技术,彼此不同但相互补充。

Docker 可以将运行应用所需的一切资源放入一个箱子中,这个箱子可以存储起来并在需要的时间和位置打开。将应用装箱后,就需要一种方法来管理它们,这就是 Kubernetes 的作用。

Kubernetes 是希腊语,意思是"船长"。就像船长负责船舶在海上的安全航行一样,Kubernetes 负责安全运送这些箱子并将其交付到可以使用的地点。

  • Kubernetes 可以和 Docker 搭配使用,也可以独立使用
  • Docker 并不是 Kubernetes 的替代品,因此其实也不存在"Kubernetes 与 Docker 的区别"这个问题。将 Kubernetes 与 Docker 结合使用可以容器化您的应用,并大规模运行它们
  • Docker 和 Kubernetes 之间的差异与它们在容器化和运行应用中所扮演的角色有关
  • Docker 是在容器中打包和分发应用的开放式业界标准
  • Kubernetes 使用 Docker 来部署、管理和扩缩容器化应用

相关链接

微服务

微小、独立的软件组件,即"微服务",不同的微服务,都侧重于解决某一个精细化的具体问题。鉴于微服务彼此之间处于一种松散耦合的关系,可实现互联通信,众多微服务,共同组建、运行一体化的完整的云原生软件。在开发者对应用程序进行微调时,可聚焦单个微服务进行处理,更为高效;而在微服务发生故障时,应用程序仍具有连续性。

服务网格

云原生架构中,服务网格是软件层的通信技术,可支持管理不同微服务间的通信路径。赋能开发者提升效率方面,无需编写新代码,开发者即可在服务网格中,加入新功能。

不可变基础设施

"不可变基础设施"是能够保障云原生应用程序托管服务器,在部署前后保持不变的基础设施。如果应用程序面临计算资源不足的处境,便会舍弃原有服务器,寻求高性能服务器的支持。不可变基础设施,可凭借自动化模式,在云原生部署过程中,实现可预测模式。

DevOps技术

DevOps(Development + Operations)作为一组过程、方法与系统的统称,是云原生概念的重要组成部分,旨在促进开发(应用程序或软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。DevOps非常重视"软件开发人员"(Dev)和"IT运维技术人员"(Ops)之间沟通合作的文化、习惯和方式。自动化"软件交付"和"架构变更"的流程,可以使软件的构建、测试和发布变得更加快捷、频繁和可靠。DevOps还会引导更多技术人员意识到,为了按时交付软件产品和服务,开发人员与运维人员必须紧密合作。

Serverless

云计算的出现,也催生出很多改变传统IT架构和运维方式的新技术,比如,虚拟机、容器、微服务。无论这些技术应用在哪些场景,降低成本、提升效率都是亘古不变的主题。随着云计算的不断发展,越来越多的企业把应用和环境中很多通用的部分变成服务。Serverless的出现,更是带来了跨越式的变革。Serverless把主机管理、操作系统管理、资源分配、扩容,甚至是应用逻辑的全部组件都外包了出去,把它们看作某种形式的服务。

构建Serverless应用程序意味着开发人员可以将精力专注于核心业务代码上,而无须管理和操作云端或本地的服务器或运行时。Serverless真正做到了在部署应用时无须涉及基础设施的建设,自动构建、部署和启动服务。Serverless计算包含如下特征。

  • 全托管的计算服务:客户只需要编写代码构建应用,而无须关注同质化的、负担繁重的服务器等基础设施开发和运维等工作。
  • 通用性:结合丰富的BaaS云服务能力,支持云上所有重要类型的应用。
  • 自动的弹性伸缩:大幅降低用户资源容量规划的难度。
  • 按量计费:企业的使用成本得到有效降低,无须为闲置资源付费。

FaaS(Function as a Service,功能即服务)是Serverless中最具代表性的服务形态。它通过把应用逻辑拆分为多个函数,并通过事件驱动的方式触发执行每个函数,例如,当对象存储服务(Object Storage Service,OSS)中产生的上传/ 删除对象等事件,能够自动、可靠地触发FaaS处理,且每个环节都具有弹性和高可用性时,业务就能够快速实现大规模数据的实时并行处理。同样,通过消息中间件和函数计算的集成,业务可以快速实现大规模消息的实时处理。

云原生应用的构建与部署

构建过程可以分为以下几个步骤:

  1. 可以选择合适的编程语言和框架。云原生应用并不限制使用特定的语言或框架。
  2. 设计微服务架构。将应用拆分成多个小的服务,每个服务负责一部分业务逻辑。这样不仅提高了开发效率,还使得各个服务可以独立扩展和更新。同时,从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,从而体现出Native(原生)的概念。
  3. 容器化服务。使用docker等工具将服务打包成容器,确保环境一致性,便于在不同的云环境中迁移和部署。
  4. 使用k8s等容器编排工具在服务器群组上部署、管理容器。
  5. 管理微服务间的通信。由于各种微服务的组合构成一个大的需求,所以需要微服务之间相互通信。使用服务网格(如Istio)或API网关来处理服务间的请求路由、负载均衡和认证授权等问题。
  6. 持续集成和持续部署(CI/CD)。通过自动化的流程来加快代码的测试、构建和部署过程,确保快速迭代和高质量交付。
  7. 监控和日志。利用云平台提供的监控工具或第三方服务,对应用的性能、错误和用户行为进行实时监控和分析。
  8. 安全和合规。确保应用符合数据保护法规的要求,实施加密、访问控制和安全漏洞扫描等措施。

参考链接

在阿里云上部署

1.使用阿里云容器服务(ACK)

阿里云的容器服务(ACK)是基于Kubernetes的全托管容器编排服务,支持容器化应用的管理、部署、扩展和服务发现等功能。

步骤:

  • 创建Kubernetes集群
    1. 登录到阿里云控制台。
    2. 进入容器服务(ACK)页面。
    3. 选择创建Kubernetes集群,并根据需求选择集群类型(标准版、专业版等)和配置(如实例规格、网络等)。
    4. 完成集群创建后,可以使用kubectl命令行工具或阿里云控制台管理集群。
  • 部署应用到Kubernetes集群
    1. 使用kubectl或阿里云控制台管理应用的生命周期。
    2. 准备好容器镜像,并将其上传到阿里云的容器镜像服务(ACR)
    3. 编写Kubernetes的资源清单文件(如DeploymentServiceIngress等),用于定义你的应用如何运行和暴露服务。
    4. 使用kubectl apply -f <file>.yaml来部署应用。

2. 容器镜像管理(ACR)

阿里云容器镜像服务(ACR)是一个高可用、高性能的容器镜像管理平台,可以存储、管理和分发你的容器镜像。

步骤:

  • 创建并配置ACR仓库
    1. 登录阿里云控制台,进入容器镜像服务(ACR)页面。
    2. 创建一个仓库,并设置权限,确保你的Kubernetes集群可以访问该仓库。
    3. 使用Docker CLI上传你的镜像到ACR仓库,例如:docker push <your-acr-repo>/<image>:<tag>
  • 在Kubernetes中拉取镜像
    1. 在Kubernetes资源清单中,使用ACR仓库中的镜像作为容器镜像。
    2. 确保Kubernetes集群具备权限访问ACR仓库(可以使用阿里云的aliyun认证插件,或者通过ServiceAccount的权限配置)。

3. 自动化部署(CI/CD)

阿里云提供了云效(Aliyun DevOps)服务,能够帮助你在云端实现CI/CD流程,自动化代码的构建、测试和部署。

步骤:

  • 创建CI/CD管道

    1. 登录阿里云控制台,进入云效(DevOps)页面。
    2. 创建一个新的项目,配置代码仓库(GitHub、GitLab等)。
    3. 配置CI/CD流水线,设置构建、测试和部署的任务。
    4. 在流水线中集成Kubernetes的部署命令,当代码更新时,自动将镜像推送到ACR,并部署到Kubernetes集群中。

4. 服务网格(Service Mesh)

如果你的云原生应用采用微服务架构,可以使用阿里云的服务网格(Service Mesh)来管理微服务之间的通信。服务网格能够为微服务提供流量管理、负载均衡、服务发现和故障恢复等能力。

步骤:

  • 启用阿里云服务网格
    1. 在容器服务(ACK)中启用阿里云服务网格(ASM)。
    2. 在Kubernetes集群中安装Istio等服务网格组件,管理微服务之间的通信。
    3. 使用服务网格控制流量路由、处理熔断、限流等微服务治理功能。

5. 监控和日志管理

在云原生架构中,监控和日志管理是至关重要的。阿里云提供了多种工具来实现应用的监控、日志收集和性能分析。

步骤:

  • 启用阿里云日志服务(SLS):将应用日志发送到阿里云日志服务。
  • 使用阿里云云监控:监控Kubernetes集群的性能指标、容器资源使用情况、应用的健康状态等。
相关推荐
舌尖上的五香2 小时前
k8s拉取harbor镜像部署
云原生·容器·kubernetes
栀栀栀栀栀栀5 小时前
微服务2025/2/15
微服务·云原生·架构
挣扎与觉醒中的技术人6 小时前
Kubernetes (K8S) 高效使用技巧与实践指南
网络·云原生·容器·kubernetes
迃幵chen7 小时前
kubernetes 初学命令
云原生·容器·kubernetes
loop lee7 小时前
【K8S】Kubernetes 中的基本组成部分介绍,一文了解 K8S 中的所有概念
云原生·容器·kubernetes
骑鱼过海的猫12318 小时前
【后端】k8s
云原生·容器·kubernetes
zkyqss21 小时前
Kubernetes 1.29升级至1.31版本笔记
笔记·云原生·kubernetes
阿里云云原生1 天前
三句话生成 P5.js 粒子特效代码,人人都可以做交互式数字艺术
云原生
CloudWeGo1 天前
2025年,微服务架构和大模型能“玩出”什么新花样?
微服务·云原生·llm