DevOps助力云原生应用开发实战分享

简介: 阿里云近期完成部署Cloud Foundry的适配工作, 并开源了核心代码。现在阿里云合作伙伴和开发者可以轻松的搭建Cloud Foundry集群,https://github.com/aliyun/bosh-alicloud-cpi-release/blob/master/docs/cf/...

背景

cf logo

Cloud Foundry 是业界比较“资深”的PAAS云平台,它不仅支持多种框架、运行时环境,还支持在多种云环境进行部署,包括:AWS, Azure, GCP, OpenStack等。本文分享,基于阿里云进行开发、运维的实战经验。

部署Cloud Foundry首先要用到的工具是BOSH。BOSH是用来部署和管理Cloud Foundry集群的工具。 它定义了一系列管理和操作云资源的接口Cloud Provider Interface,各个云厂商需要适配自己的Provider,这就是本文的开发背景。为了让大家对BOSH和CPI有一个感性的认识,下面简要的介绍几个相关概念。

bosh architecture

BOSH的组件结构如上图所示, 这里简单说明一下,详细说明见官方文档

  1. Director会解析部署命令和模板,然后调用CPI模块去创建VM(ECS)实例,实例信息会写到Registry上。
  2. 每个VM上装有Agent负责与Bosh交互,包括:处理Director下发的任务、上报VM的健康状态等。
  3. Agent从Registry拿到当前VM的信息,包括:ID, IP等。
  4. Director/HM和VM之间的通信是通过NATS发布和订阅消息。

重点: 这里的开发任务就是实现阿里云CPI Provider。

开发

Bosh Alicloud CPI是阿里云对CPI GO版本的实现,目前已开源,欢迎试用。

Alicloud CPI实现了对云资源以及Cloud Foundry生命周期的管理,组件结构如下图:

image

CPI这一层的职责比较规整,包括:模板解析、参数校验、API调用、容错与重试、返回值加工。不过,完美集成到Bosh中并高成功率的部署集群是一件很复杂的事儿,需要大量的验证和测试。

CPI Provider开发流程分为: 代码实现、Code review, 单元测试,集成测试,部署Bosh验证CPI,部署Cloud Foundry集群,在集群上部署应用。

Why DevOps

项目特点如下:

  1. 从事开源项目开发的小团队,没有专门的运维同学,天然的开发即运维。
  2. 立项之初组内没有Cloud Foundry的专家,需要快速的交付到社区去验证,得到反馈之后快速的进行迭代。
  3. Cloud Foundry的部署极其复杂,走一次部署流程消耗大量的人力和时间成本。需要用工具来加快开发和迭代部署的速度,减少重复的手工成本。

为了保证代码质量的前提下快速的进行迭代开发、构建、测试、部署,那么就需要一套实践方法来支撑整个流程。

How to DevOps

工具介绍

Cloud Foundry社区提供了ConcourseCI Pipeline支持各个模块的CI/CD流程, 当然这里也可以选择其他方案,比如:阿里云的CodePipeline

所谓Pipeline就是一系列手工工作的集合,这里包括:单元测试、构建Release包、集成测试、验收测试、端到端测试、发布正式Release包。简单示意图如下:

image

每一项任务就是一个Job, 每个Job由输入、输出和若干Task组成。Task在运行时会拉取镜像、启动容器、拿到输入、执行Task、输出结果。

拿一次CI举例,开发人员提交代码到Git仓库,Git会触发Webhook通知CI Server;CI Server会检查Pipelie配置,根据trigger规则触发对应的Job,并下发给CI Worker;Work解析Tasks,拉取Docker镜像启动容器,执行Task;最后Work收集每个Task的结果返回给CI Server。流程入下图所示:

image

接下来介绍一下在CPI Pipeline中每个Job所负责的内容,对于类似的项目有一定借鉴意义。 CPI Pipeline包括5个主要流程,分别是Unit Test, Build Candidate, Integration Test, Acceptance Test, E2E Test。下图是这5个流程示意图:

image

Unit Test

image

  • Source Code
  • Inputs:

    • bosh-cpi-src: 项目源代码
  • Task:

    • go get -v github.com/onsi/ginkgo/ginkgo 安装依赖
    • ginkgo -r -skipPackage integration src/bosh-alicloud-cpi 运行unit-test

Build Candidate

image

  • Source Code
  • Inputs:

    • bosh-cpi-src: 项目源代码
    • go-cpi-blobs: golang linux安装包,是运行CPI的基础依赖
    • version-semver: 用来做版本控制
  • Task:

    • bosh2 add-blob ../go-cpi-blobs/go1.8.1.linux-amd64.tar.gz go1.8.1.linux-amd64.tar.gz 加载blob依赖
    • bosh2 create-release --name $cpi_release_name --version $semver --tarball $cpi_release_name-$semver.tgz 打release包,根据版本号生成release包名称
    • mv $cpi_release_name-$semver.tgz ${DESC}/: 把构建物上传到远程地址
  • Outputs:

    • bosh-cpi-dev-artifacts: 用来存储构建物

Integration Test

image

  • Source Code
  • Inputs:

    • bosh-cpi-src: 项目源代码
    • stemcell: bosh light stemcell, 配置Region和ImageId的对应关系。 同一个镜像在各个Region的分发。
    • terraform-metadata: 用于测试的IaaS层基础环境,包括网络、安全组、负载均衡等。
  • Task:

    • 初始化测试数据
    • ginkgo src/bosh-alicloud-cpi/integration $(GINKGO_ARGS) -v 执行测试脚本

Bosh Acceptance Test

image

  • Source Code
  • Inputs:

    • pipelines: 准备进行BATs的配置文件仓库
    • bats: BATs测试框架的源码仓库
    • light stemcell: 维护各个region下镜像ID的配置文件
  • Task:

    • prepare-director

      • 从meta-data获取,部署Bosh所需要的IaaS资源信息
      • 动态生成用于部署Bosh的manifest文件 Source Code

    • deploy-director

      • 部署Bosh Source Code
      • 获取director信息,写入环境变量,供后面登陆Bosh使用 [Source Code]()
    • run-bats

      • 动态生成manifest
      • 部署一个batlight Job节点
      • 执行bat测试

End-to-End Test

image

  • Source Code
  • Inputs:

    • bosh-cpi-src: 项目源代码
    • blobs: 编译Job所依赖的二进制包
  • Task:

    • 登陆Bosh
    • 把依赖包打入Blob
    • 打release包, 然后上传到Bosh
    • 上传light-stemcell, cloud-config
    • 部署Job
    • 执行run-errand任务

Build And Destroy Director

image

  • Source Code
  • Inputs:

    • terraform-statement: terraform共享状态文件, 用来远程存储terraform执行结果
    • main-tf: terraform编排模板
  • Task:

    • terraform根据编排模板创建IaaS资源
    • 对创建结果进行处理,生成JSON文件
    • 把terraform状态文件同步到远程

最后

欢迎PaaS生态上的合作伙伴和开发者参与Cloud Foundry社区的建设,也欢迎大家来阿里云构建企业自己的PaaS平台。任何问题和建议可以在Github上提Issue

目录
相关文章
|
19天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
20天前
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战####
本文探讨了云原生技术在现代企业IT架构中的关键作用,分析了其带来的优势和面临的主要挑战。通过实际案例分析,揭示了如何有效应对这些挑战,以实现业务敏捷性和技术创新的平衡。 ####
|
17天前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
22天前
|
Kubernetes Cloud Native 物联网
云原生技术在现代软件开发中的应用与挑战####
本文探讨了云原生技术的兴起背景、核心理念及其在现代软件开发中的广泛应用。通过具体案例分析,揭示了云原生架构如何促进企业数字化转型,并指出了在实施过程中面临的主要挑战及应对策略。 ####
|
12天前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
26天前
|
Kubernetes Cloud Native 开发者
通义灵码对云原生应用开发的支持
通义灵码是阿里巴巴云推出的一款强大的云原生应用开发工具,支持容器化、编排技术等,提供从Dockerfile生成、容器镜像构建与推送,到Kubernetes配置文件生成及与Kubernetes集群集成的全方位支持,极大简化了云原生应用开发流程,提升了开发效率和应用质量。
通义灵码对云原生应用开发的支持
|
17天前
|
Cloud Native JavaScript Docker
云原生技术:构建现代应用的基石
在数字化转型的浪潮中,云原生技术如同一艘承载梦想的航船,引领企业驶向创新与效率的新海域。本文将深入探索云原生技术的核心价值,揭示其如何重塑软件开发、部署和运维模式,同时通过一个简易代码示例,展现云原生应用的构建过程,让读者领略到云原生技术的魅力所在。
|
27天前
|
监控 安全 Devops
DevOps实践中,如何平衡开发速度和安全审核的效率
在DevOps实践中,为平衡开发速度与安全审核效率,可采取自动化安全测试、安全编码实践、持续监控与日志分析、集成安全工具、合规性代码审查、基础设施即代码、权限和访问控制、安全培训、漏洞及补丁管理和持续反馈改进等措施,确保高效安全的开发流程。
|
23天前
|
消息中间件 Cloud Native 持续交付
云原生技术在现代企业中的应用与优势###
本文深入探讨了云原生技术在现代企业中的具体应用及其带来的显著优势。随着云计算的普及,云原生作为一种新兴的技术架构,正逐渐成为企业数字化转型的关键驱动力。文章将详细介绍云原生的核心概念、主要技术组件以及在实际业务场景中的成功案例,旨在为读者提供一个全面且实用的参考框架,以便更好地理解和应用云原生技术。 ###
|
1月前
|
监控 Cloud Native 持续交付
云原生技术在现代企业中的应用与实践
本文将深入探讨云原生技术如何改变现代企业的运作模式,提升业务灵活性和创新能力。通过实际案例分析,我们将揭示云原生架构的关键要素、实施步骤以及面临的挑战,为读者提供一套清晰的云原生转型指南。