云原生时代的DevOps之道

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: DevOps 是一种软件开发人员和 IT人员之间的合作过程,目标是高效地自动执行软件交付和基础架构更改流程。那云原生时代,企业又如何借助DevOps 实现产品快速、稳定、高效和安全地迭代,释放业务价值呢。 ## 什么是云原生 为了解决传统应用升级缓慢、架构臃肿、不能快速迭代、故障不能快速定位、问题无法快速解决等问题,云原生这一概念横空出世。 Pivotal 是云原生应用的提出者,并推

DevOps 是一种软件开发人员和 IT人员之间的合作过程,目标是高效地自动执行软件交付和基础架构更改流程。那云原生时代,企业又如何借助DevOps 实现产品快速、稳定、高效和安全地迭代,释放业务价值呢。

什么是云原生

为了解决传统应用升级缓慢、架构臃肿、不能快速迭代、故障不能快速定位、问题无法快速解决等问题,云原生这一概念横空出世。

Pivotal 是云原生应用的提出者,并推出了Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架,成为云原生应用架构中先驱者和探路者。
image.png
早在2015年Pivotal公司的Matt Stine就写了一本叫做迁移到云原生应用架构的小册子,其中探讨了云原生应用架构的几个主要特征:符合12因素应用,面向微服务架构,自服务敏捷架构,基于API的协作,抗脆弱性。

后来Pivotal对云原生的定义做过几次更新, 最新的Pivotal 官网上对云原生应用的最新介绍是关注以下四点:集成DevOps、持续交付、微服务和容器化。
image.png

  • DevOps 是软件开发人员和 IT 运营之间的合作,目标是自动执行软件交付和基础架构更改流程。它创造了一种文化和环境,可在其中快速、频繁且更可靠地构建、测试和发布软件。
  • 持续交付使得单个应用更改在准备就绪后即可发布,而不必等待与其他更改捆绑发布或等待维护窗口期等事件。持续交付让发布行为变得平淡可靠,因此企业可以以更低的风险频繁交付,并更快地获得最终用户的反馈,直到部署成为业务流程和企业竞争力必不可少的组成部分。
  • 微服务是将应用作为小型服务集合进行开发的架构方法,其中每个服务都可实施业务功能,在自己的流程中运行并通过 HTTP API 进行通信。每个微服务都可以独立于应用中的其他服务进行部署、升级、扩展和重新启动,通常作为自动化系统的一部分运行,可以在不影响最终客户的情况下频繁更新正在使用中的应用。
  • 与标准虚拟机相比,容器能同时提供效率和速度。单个操作系统实例使用操作系统 级的虚拟化,在一个或多个隔离容器之间进行动态划分,每个容器都具有唯一的可写文件系统和资源配额。创建和破坏容器的开销较低,再加上单个虚拟机中的高包装密度,使容器成为部署各个微服务的完美计算工具。

Google主导成立了云原生计算基金会(CNCF),对云原生的定义为1. l云原生(Cloud Native)技技术帮助企业和机构在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、 服务网格、微服务、不可变基础设施和声明式 API。 2.l这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术可以使开发者轻松地对系统进行频 繁并可预测的重大变更 。
image.png
目前云原生背后最大的推手就是CNCF,关键技术包括容器、微服务、服务网格、devops,声明式的API等等。

image.png
云原生应用与传统应用的对比,云原生应用可以充分利用云的优势,灵活地在各个云厂商分发应用,释放企业生产力,聚焦到业务创新上,而不是花费更多的时间在适配和扩展不同的基础设施平台上。

云原生时代的DevOps新挑战

首先我们要清楚地知道, 站在企业的角度来看,在这样一个快捷商业的时代,企业最需要什么?
image.png

  • 唯快不破。这里的快可以解读出来两层含义,一是业务应用快速上线,有利于抢占市场先机,第二层意思呢就是在你的业务有爆炸式的增长的时候,你何如在计算资源上给以充分的保证,这个时候其实追加巨额的IT投资购买软硬件也未必能跟得上业务的快速发展。这个其实就是企业研发效能的问题。
  • 稳中求变。业务或者应用的稳定性永远都是第一位的,如何既保证业务的“稳态”又要满足快捷商业的“敏态”需求,比如新业务的上线、应用的变更等。这个是企业IT架构的问题。
  • 节省资源,如何节省计算资源,根据业务是否高峰自动扩容缩容,这个是云平台建设的问题
  • 开拓创新,开发运维一体化、微服务架构

DevOps最初的出现打破了开发人员和运维人员之间历来存在的壁垒和沟鸿,加强了开发、运营和质量保证人员之间的沟通、协作与整合。在后DevOps时代,我们可以借助容器技术更快地对应用进行迭代上线。
image.png

下面是应用发布的一般过程,开发者push代码,触发构建,构建过程是拉取源码,应用打包,容器镜像推送,部署。
image.png
这个模型其实已经有很多地方充分利用了云原生的优势,比如容器技术、kubernetes、动态分配slave pod等。但还有一些挑战。
image.png

  • 如何应用在环境栈之间的安全推进发布
  • 如何管理应用发布的权限和安全审批
  • 如何提高应用的平均部署时间和平均恢复时间
  • 如何迅速对线上应用进行故障定位、复现和回滚

云原生时代下的DevOps之道

首先我们要充分利用云原生技术的优势,云原生可以改进应用开发的效率,改变企业的组织结构,甚至会在文化层面上直接影响一个公司的决策。在容器领域内,Kubernetes已经成为了容器编排和管理的社区标准。它通过把应用服务抽象成多种资源类型,比如Deployment、Service等,提供了一个云原生应用通用的可移植模型。在这样的背景下,我们如何在云原生的环境下实践更高效的DevOps来达到更有生产力的表现就成为了一个新的课题和诉求。
image.png

下面是一个企业应用平台的建设目标:
image.png

在此PaaS平台的基础上,我们设计了GitOps安全发布模型来解决前面我们提到的一些挑战。

在设计GitOps发布模型的时候是有以下这些核心诉求的:

  • 版本管理。我们希望每一个发布的应用的版本号都能跟git commit id关联,这样的好处就是每一个变更都有历史记录查询、可以更快进行故障定位和修复
  • 基线管理。便于问题复现和快速回滚
  • 安全发布。包括发布权限管理以及安全审批的内容;
  • 快速反馈。提高研发效能
    image.png

GitOps发布模型有以下特性:

  • Git仓库是任何CICD过程的唯一输入源
  • 声明式的应用编排、构建部署模型
  • 应用在环境栈之间的无差别、自动化推进
  • PR/MR触发的拉取式流水线过程
  • 快速反馈机制

下面是使用GitOps管理应用发布到不同kubernetes集群的架构图。首先是应用源码与构建源码分离,我们可以看到橙色框起来的这两个源码项目,一个是我们的应用源码项目application-java-demo, 左侧的这个源码项目是用来存放构建源码的,比如preview pipeline的Jenkinsfile, staging pipeline的Jenkinsfile,production pipeline的Jenkinsfile, 除了Jenkinsfile之外,可能还有一些关于动态创建测试环境、连接预发环境或者生产环境的敏感信息,这些敏感信息也可以存放在数据库里,然后这里保存数据库的连接信息。 这个普通应用application-java-demo在Git仓库里是有不同的分支的,每个分支跟kubernetes集群环境都有一定的对应关系,比如我们这里的设定,master分支对应的是生产环境,latest分支对应的是预发环境,其他开发分支对应的是测试环境,测试环境的动态创建和销毁、应用再测试环境的部署发布是开发测试人员自助的服务,但应用想要部署到预发环境和生产环境中的话是需要经过管理员安全审批的。
普通开发者的权限只有创建新代码分支和创建合并请求的权限,除此之外,剩下其他的部分都是管理员才有权限做的,绿色区域是Jenkins的流水线任务,当然你也可以是使用其他cicd引擎来做这个流水线任务的构建。普通开发者没有Jenkins环境的创建Job和构建Job的权限,也没有更改配置的权限,他有的只是构建Job的日志查看权限。
image.png

最后是一个时序图,演示一个应用从开发测试到业务上线迭代的一个完整流程:
image.png
(1)开发者提交新的功能分支feature;
(2)开发者创建请求合并代码到latest分支的Merge Request;
(3)开发者创建Merge Request的动作自动触发名为preview-pipeline的Jenkins流水线任务的构建
(4)preview-pipeline流水线任务从Git服务器拉取preview-pipeline源码项目,并按照项目中Jenkinsfile文件中的声明式脚本运行源码编译、测试、容器镜像构建和推送、应用部署到Preview的容器集群、钉钉通知的流程。
(5)管理员在Git服务器的Merge Request页面查看应用的预览连接并验证应用是否可以合并到latest分支,如果通过验证则接受Merge Request的合并,触发步骤6, 如果不通过则通知开发者进行代码更新和提交,退回步骤1
(6)管理员接受Merge Request合并的动作会自动触发Jenkins流水线任务staging-pipeline的构建
(7)staging-pipeline流水线任务从Git服务器拉取staging-pipeline源码项目,并按照项目中Jenkinsfile文件中的声明式脚本运行源码编译、测试、容器镜像构建和推送、应用部署到Staging的容器集群、钉钉通知的流程。
(8)Staging环境中的应用服务在通过测试和验证后,管理员可以合并latest分支到master分支
(9)管理员合并latest分支到master分支后,会自动触发Jenkins流水线任务production-pipeline的构建
(10)production-pipeline流水线任务从Git服务器拉取production-pipeline源码项目,并按照项目中Jenkinsfile文件中的声明式脚本运行源码编译、测试、容器镜像构建和推送、应用部署到Production的容器集群、钉钉通知的流程。

GitOps是一套方法论,所以其实是有多种实践的方式的,会有多种多样的好用的工具,比如使用draft可以帮助完成应用编排模板的自动化生成,skaffold用来简化应用构建部署流程,kaniko可以实现不依赖docker daemon的镜像构建和推送,helm用作应用的包管理工具,还有其他cicd引擎像jenkins,tekton,argo以及为云原生而生的jenkinsx等等
image.png

后面,我们会单独实战演示GitOps安全发布模型的工作过程。

参考文献:
https://pivotal.io/cn/cloud-native

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6月前
|
运维 Cloud Native Devops
云原生 DevOps CI/CD 概述
【1月更文挑战第7天】云原生 DevOps CI/CD 概述
|
6月前
|
运维 Cloud Native Devops
云原生 DevOps 自动化运维 概述
【1月更文挑战第7天】云原生 DevOps 自动化运维 概述
|
3月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19351 30
|
2月前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
196 3
|
2月前
|
运维 Cloud Native Devops
云原生时代的DevOps实践:自动化、持续集成与持续部署
【9月更文挑战第3天】未来,随着人工智能、大数据等技术的不断融入,DevOps实践将更加智能化和自动化。我们将看到更多创新的技术和工具涌现出来,为软件开发和运维带来更多便利和效益。同时,跨团队协作和集成也将得到进一步加强,推动软件开发向更加高效、可靠和灵活的方向发展。
|
6月前
|
Kubernetes Cloud Native Devops
【阿里云云原生专栏】DevOps与云原生的融合:阿里云CI/CD流水线最佳实践
【5月更文挑战第23天】阿里云融合DevOps与云原生技术,提供高效CI/CD解决方案,助力企业提升研发效能。通过云效平台,集成代码管理、构建服务、容器服务、持续部署及监控日志组件,实现自动化研发流程。案例中,应用从GitHub构建到Kubernetes部署,全程无缝衔接。借助阿里云,企业能快速构建适应云原生的DevOps体系,以应对复杂需求和提升市场竞争力。
180 1
|
6月前
|
Kubernetes Cloud Native Devops
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
154 1
|
4天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
6天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
7天前
|
消息中间件 存储 Cloud Native
云原生架构下的数据一致性挑战与应对策略####
本文探讨了在云原生环境中,面对微服务架构的广泛应用,数据一致性问题成为系统设计的核心挑战之一。通过分析云原生环境的特点,阐述了数据不一致性的常见场景及其对业务的影响,并深入讨论了解决这些问题的策略,包括采用分布式事务、事件驱动架构、补偿机制以及利用云平台提供的托管服务等。文章旨在为开发者提供一套系统性的解决方案框架,以应对在动态、分布式的云原生应用中保持数据一致性的复杂性。 ####

热门文章

最新文章