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

embedded/2025/2/27 12:42:05/

云原生

为什么需要云原生

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

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

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

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

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

相关链接

  • 云原生计算基金会官网 https://www.cncf.io/about/who-we-are/
  • 阿里云文章《什么是云原生》 https://www.aliyun.com/getting-started/what-is/what-is-cloud-native
  • 稀土掘金文章《什么是云原生》https://juejin.cn/post/6844904197859590151
  • 亚马逊云文章《云原生是什么》https://www.amazonaws.cn/knowledge/what-is-cloud-native/
  • IT书架《应用部署:敲开云原生世界大门,云原生部署方案设计》https://www.itshujia.com/read/go-zero-cloud/328.html
  • 知乎《认识云原生,读这一篇就够了》https://zhuanlan.zhihu.com/p/499334409

关键技术

容器技术 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 来部署、管理和扩缩容器化应用

相关链接

  • 博客园 https://www.cnblogs.com/mingyueyy/p/15475150.html
  • 谷歌云《k8s是什么》 https://cloud.google.com/learn/what-is-kubernetes?hl=zh-CN

微服务

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

服务网格

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

不可变基础设施

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

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. 安全和合规。确保应用符合数据保护法规的要求,实施加密、访问控制和安全漏洞扫描等措施。

参考链接

  • 阿里云 《云端漫步:探索云原生应用的构建与部署》https://developer.aliyun.com/article/1636004?spm=5176.26934562.main.4.53b412cc41P7tM
  • 阿里云《云原生应用开发平台》https://help.aliyun.com/zh/cap/?spm=a2c4g.11186623.0.0.30246588wigrah
  • IT书架《应用部署:云原生部署实战入门》https://www.itshujia.com/read/go-zero-cloud/329.html
  • 私人博客《快速部署一个云原生本地实验环境》https://jimmysong.io/kubernetes-handbook/cloud-native/cloud-native-local-quick-start.html
  • 阿里云《搭建Docker》https://help.aliyun.com/zh/simple-application-server/use-cases/build-docker/?spm=a2c4g.11186623.help-menu-58607.d_3_0_2_4.3a563d0clk1WBN
  • 知乎《如何使用docker部署自己的项目到阿里云服务器》https://zhuanlan.zhihu.com/p/632100166
  • csdn《docker-maven-plugin详细使用方法》 https://blog.csdn.net/weixin_44424668/article/details/104062822

在阿里云上部署

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集群的性能指标、容器资源使用情况、应用的健康状态等。

http://www.ppmy.cn/embedded/167530.html

相关文章

【Java 优选算法】模拟

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 模拟算法的思路比较简单,根据题目描述列出流程,找出规律,将流程转化为代码 替换所有的问号 题目链接 解法 直接根据题目给出条件模拟 示例,找出规律 1.先找出字符?,再…

Docker数据卷操作实战

什么是数据卷 数据卷 是一个可供一个或多个容器使用的特殊目录&#xff0c;它绕过 UFS&#xff0c;可以提供很多有用的特性: 数据卷 可以在容器之间共享和享用对 数据卷 的修改立马生效对 数据卷 的更新&#xff0c;不会影响镜像数据卷 默认会一直存在&#xff0c;即时容器被…

大白话JavaScript闭包在实际项目中有哪些应用场景?

大白话JavaScript闭包在实际项目中有哪些应用场景&#xff1f; 闭包是指有权访问另一个函数作用域中的变量的函数。在实际项目中&#xff0c;闭包有很多应用场景&#xff0c;以下是一些常见的例子&#xff1a; 数据封装和隐私保护 场景&#xff1a;在开发中&#xff0c;有时…

CSS 真的会阻塞文档解析吗?

在网页开发领域&#xff0c;一个常见的疑问是 CSS 是否会阻塞文档解析。理解这一问题对于优化网页性能、提升用户体验至关重要。要深入解答这个问题&#xff0c;需要从浏览器渲染网页的原理说起。 浏览器渲染网页的基本流程 浏览器在接收到 HTML 文档后&#xff0c;会依次进行…

单线服务器和双线服务器分别是指什么?

服务器双线和单线通常是指服务器的网络连接方式&#xff0c;单线服务器是指只有一条物理线路连接到服务器的服务器&#xff0c;成本上较为低廉&#xff0c;更加便于用户和企业进行管理与维护&#xff0c;适合对网络延迟度要求不高的小型网站和低流量的应用&#xff0c;但是当服…

苹果折叠屏iPhone突破折痕难题 或将在2026年发布

&#xff08;2025年2月26日&#xff09;据供应链最新消息&#xff0c;苹果联合三星与美国安费诺公司&#xff0c;在折叠屏核心技术上取得重大突破&#xff0c;首款折叠屏iPhone样品已接近理想水平&#xff0c;最快将于2026年底上市。 屏幕采用三星供应的内折OLED柔性屏&#x…

Gtest 框架缺点

gtest&#xff08;Google Test&#xff09;是 Google 开发的 C 单元测试框架&#xff0c;广泛应用于 C 项目的测试中。尽管它功能强大且灵活&#xff0c;但也存在一些缺点和局限性。以下是 gtest 的主要缺点&#xff1a; 1. 配置和集成复杂 问题&#xff1a;gtest 的配置和集成…

单片机病房呼叫系统设计

摘要&#xff1a;一般来说&#xff0c;病房呼叫系统是方便于病人患者与医护人员灵活沟通的一种呼叫系统&#xff0c;是解决医护人员与病人患者之间信息反馈的一种手段。病床呼叫系统的好坏直接关系到病人患者的生命安危&#xff0c;像今年的新冠型肺炎&#xff0c;没有一个灵活…