云原生 DevOps,模型化应用交付能力很重要!
简介: DevOps 文化及其支撑其落地实践的自动化工具与平台能力在云原生架构渐为普及的背后,发挥了关键的价值。
撰稿:溪洋
云原生正在成为企业业务创新和解决规模化挑战的加速器。
云原生带来的变革绝不限于基础设施和应用架构等技术层面,更是对于研发理念、交付流程和 IT 组织方式的变革,也在推进企业 IT 组织、流程和文化的变革。在云原生架构渐为普及的背后, DevOps 文化及其支撑其落地实践的自动化工具与平台能力,发挥了关键的价值。
云原生带来的研发与运维协作界面
相较于云原生,DevOps 并不是什么新鲜的事情,其实践早已深入企业现代应用程序架构。DevOps 强调团队间的沟通和快速反馈,通过构建自动化的持续交付(Continuous Delivery)及流水线的应用发布方式,达到快速响应业务需求、交付产品和提高交付质量的目的。随着容器技术在企业的规模化应用,云计算可编程基础设施和 Kubernetes 声明式的 API 等能力加速了开发和运维角色的融合。
云原生的大势所趋使上云成为企业标配,围绕云原生去定义下一代研发平台成为必然,也倒逼着 IT 组织方式进一步发生变化——新的平台工程团队开始浮现。在这样的背景下,如何在云原生的环境下更高效地实践 DevOps 成为一个新的课题和诉求。
下一代 DevOps 平台演进趋势
伴随着 Kubernetes 生态从底层到应用层能力的逐步完善,平台工程团队可以更方便地基于业务场景和终端用户实际需求来构建不同的应用平台,却也为上层应用开发者带来了挑战和困扰。
Kubernetes 生态本身的能力池固然丰富,但是社区里却并没有一个可扩展的、方便快捷的方式,为云原生架构下混合、分布式的部署环境引入一致的上层抽象来为应用交付进行建模。应用交付过程上层抽象能力的缺失,使 Kubernetes 的复杂性无法做到向应用开发人员屏蔽。
下图展示了一个云原生下的 DevOps 流水线的典型流程。首先是代码的开发,代码托管到 Github,再接入单元测试的工具 Jenkins,此时基本研发已完成。再接着到镜像的构建,涉及到配置、编排等。云原生中可以用 HELM 打包应用。打包好的应用部署到各个环境中。但整个过程中会面临很多挑战。
首先,在不同的环境需要不同的运维能力。其次,配置的过程中要创建云上数据库,需要另外打开一个控制台来创建数据库。还需要配置负载均衡。在应用启动以后还需要配置额外的功能,包括日志、策略、安全防护等等。可以发现,云资源和 DevOps 平台体验是割裂的,里面充斥着借助外部平台创建的过程。这对新手来说是非常痛苦的。
在容器出现之前的传统的 DevOps 模式需要不同的流程和工作流。容器技术是以 DevOps 的视角构建的。抽象的容器所提供的功能会影响我们如何看待 DevOps,因为随着微服务的出现,传统的架构开发将发生变化。这意味着要遵循在 Kubernetes 上运行容器的最佳实践,并将 DevOps 的理念向 GitOps、DevSecOps 扩展,使云原生下的 DevOps 更加高效、安全、稳定、可靠。
OAM(Open Application Model) 试图提供一种云原生应用的建模语言,以实现研发和运维的视角分离,使 Kubernetes 的复杂性无需透传至研发,运维通过提供模块化、可移植、可扩展的特性组件,支撑各种复杂的应用交付场景,从而实现云原生应用交付的敏捷性和平台无关性。其在 Kubernetes 上的完整实现 KubeVela,已经被业界认为是构建下一代持续交付方式及 DevOps 实践的核心工具。
最近,阿里云在 2021 云栖大会上发布了云效应用交付平台 AppStack ,旨在进一步加速企业云原生 DevOps 规模化落地。据云效应用交付平台 AppStack 研发团队介绍,其在设计之初就全面支持原生 Kubernetes 和 OAM/KubeVela ,以实现对应用部署架构无绑定、无侵入,使企业不用担心迁移以及技术改造成本。这也标志着 KubeVela 正在成为云原生时代应用交付领域的重要基石。
基于 KubeVela,构建以应用为中心的交付系统
在云原生理念迅速普及的今天,混合环境部署(混合云/多云/分布式云/边缘)已经成为了大多数企业应用、SaaS 服务、应用持续交付平台的必然选择,而云原生技术的发展趋势也正在朝着“一致的、跨云、跨环境的的应用交付”不断迈进。
KubeVela 作为一个开箱即用、面向现代微服务架构的应用交付与管理平台,已经正式发布 1.1 版本。在此版本中,KubeVela 更加聚焦面向混合环境的应用交付流程,带来了多集群交付、交付流程定义、灰度发布、公有云资源接入等多个开箱即用的能力和更加友好的用户体验,帮助开发者从“静态配置、模板、胶水代码”的初级阶段,直接升级至“自动化、声明式、统一模型、天然面向多环境”的下一代以工作流为核心的交付体验当中。
基于 KubeVela,用户可以非常轻松地处理以下场景:
多环境、多集群应用交付
面向 Kubernetes 的多环境、多集群交付已是一个标准性需求。从 1.1 版本开始,KubeVela 不仅实现了多集群的应用交付,并且既可以独立工作直接纳管多个集群,也可以集成 OCM、Karmada 等各类多集群管理工具来进行更复杂的交付动作。在多集群交付策略的基础上,用户还可以通过定义 Workflow 来控制交付到不同集群的顺序、条件等工作流步骤。
定义交付工作流(Workflow)
Workflow 的具体使用场景则很多,比如在多环境应用交付场景中,用户可以定义不同的环境交付的顺序和前置条件等 。KubeVela 的工作流是面向 CD 过程的,同时也是声明式的,所以它既可以作为 CD 系统直接同 CI 系统(比如 Jenkins 等)对接,也可以嵌入到现有 CI/CD 体系中作为增强和补充,落地方式非常灵活。
在模型上,Workflow 是由一系列 Step 组成的,而在实现上,每一个 Step 则是一个独立的能力模块,由其具体的类型和参数来决定其具体步骤的能力。在 1.1 版本中,KubeVela 内置的 Step 已经比较丰富,也非常容易扩展,帮助用户轻松对接已有的平台能力,做到无缝迁移。
以应用为中心的云资源交付
KubeVela 的设计是从“以应用为中心”的视角出发,因此可以帮助开发者以完全 Serverless 的方式更好、更方便的管理云资源,而不是疲于应付各种不同的云产品和控制台。在实现上,KubeVela 内置集成了 Terraform 来作为云资源的编排工具,并且能够以统一的应用模型支持各个云厂商上百种不同类型云服务的部署、绑定和管理。
在使用上,目前 KubeVela 将云资源分为以下三类:
- 作为组件:比如数据库、中间件、SaaS 服务等。比如 KubeVela 中的 Alibaba-RDS 服务就属于这种
- 作为运维特征:比如日志分析、监控可视化、监控报警等服务
- 作为应用运行基础设施:比如 Kubernetes 托管集群、SLB 负载均衡、NAS文件存储服务等
更容易落地的 GitOps 持续交付实践
KubeVela 作为一个声明式的应用交付控制平面,天然就可以以 GitOps 的方式进行使用(可单独使用,也可配合 ArgoCD 等工具),并且能够为 GitOps 场景提供更多端到端的能力和增强、帮助 GitOps 理念以更加亲民和解决实际问题的方式在企业中落地。这些能力包括:
- 定义应用交付工作流(CD 流水线)
- 处理部署过程中的各种依赖关系和拓扑结构
- 在现有各种 GitOps 工具的语义之上提供统一的上层抽象,简化应用交付与管理过程
- 统一进行云服务的声明、部署和服务绑定
- 提供开箱即用的交付策略(金丝雀、蓝绿发布等)
- 提供开箱即用的混合环境/多集群部署策略(放置规则、集群过滤规则、跨环境Promotion 等)
- 在多环境交付中提供 Kustomize 风格的 Patch 来描述部署差异,而用户无需学习任何 Kustomize 本身的细节
- ……
KubeVela 1.2 版本即将重磅发布
持续打造天然面向混合环境的企业应用操作系统、让开发者享受交付应用的过程,这是 Kubevela 项目的目标和愿景。在接下来的 1.2 版本,KubeVela 将带来以应用为中心的控制面板 UI,实现便捷的企业应用组装、分发、交付流程,提供给开发者更简单的应用交付体验,同时覆盖边缘应用交付等更多的使用场景。
KubeVela 1.2 版本将在 2021 年 12 月举办的 KubeCon China 上重磅发布,敬请持续关注 KubVela 社区以及阿里巴巴云原生动态!
原文链接
本文为阿里云原创内容,未经允许不得转载。
云原生 DevOps,模型化应用交付能力很重要!的更多相关文章
- 基于云原生DevOps服务自动化部署前端项目学习总结
本文主要以部署前端Vue项目为例,讲述了如何基于云原生DevOps服务自动化部署前端项目~从开发完成到线上环境,我们只需提交代码即可~ 一.引言 作为一名开发人员,日常工作中我们除了需要负责代码的开发 ...
- 藏书馆App基于Rainbond实现云原生DevOps的实践
我们需要的不是精通Kubernetes的工程师,我们需要一款小白都能用好的管理工具. -- 厦门正观易知科技有限公司运维负责人 郭传壕 大家好,我是厦门正观易知科技有限公司运维负责人郭传壕. 藏书馆是 ...
- [架构]辨析: 高可用 | 集群 | 主从 | 负载均衡 | 反向代理 | 中间件 | 微服务 | 容器 | 云原生 | DevOps | ...
词汇集 灾备 冷备份 双机热备份 异地容灾备份 云备份 灾难演练 磁盘阵列(RAID) 故障切换 心跳监测 高可用 集群 主从复制(Master-Slave) 多集群横向扩容(master-clust ...
- 云原生Devops 的实现方法
DevOps 是一个持续改善软件产品的过程,它通过极短的发布周期.全面自动化的集成和交付流水线,以及团队间的紧密协作来不断改善产品.DevOps 的目标是缩短将创意变成用户可以使用的产品的时间,并降低 ...
- 【云原生 · DevOps】DevOps 解决方案
DevOps 解决方案 1.1 容器化 CI/CD 1.2 容器化流水线 1.3 深度集成 Jenkins 1.4 灰度发布 1.5 制品库设计 1.6 DevOps 安全 1.6.1 CI/CD 安 ...
- 【云原生 • DevOps】一文掌握容器管理工具 Rancher
一.容器管理工具 Rancher 介绍Rancher 是一个开源的企业级全栈化容器部署及管理平台,其实就是一个 Docker 的图形化管理界面.它为容器提供基础架构服务,可以让 CNI 兼容的网络服务 ...
- CNCF 宣布成立应用交付领域小组,正式开启云原生应用时代
作者|赵钰莹 作为云原生领域的顶级开源社区, Cloud Native Computing Foundation (云原生基金会,以下简称 CNCF)近日宣布成立 Application Delive ...
- 产品对话 | 愿云原生不再只有Kubernete
从2013年,云原生(Cloud Native)的概念由 Pivotal 的 MattStine 首次提出,到现在,其技术细节不断得到社区的完善.云原生逐渐演变出包括 DevOps.持续交付.微服务. ...
- API 管理在云原生场景下的机遇与挑战
作者 | 张添翼 来源 | 尔达Erda公众号 云原生下的机遇和挑战 标准和生态的意义 自从 Kubernetes v1.0 于 2015 年 7 月 21 日发布,CNCF 组织随后建立以来,其 ...
- 全球首个开放应用模型 OAM 开源 | 云原生生态周报 Vol. 23
作者 | 临石.元毅.冬岛.衷源.天元 业界要闻 全球首个开放应用模型 OAM 开源 2019 年 10 月 17 日,阿里巴巴合伙人.阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon ...
随机推荐
- yum总纲
yum总纲 yum源搭建 首先本文档讲解两种搭建方式,第一有网络环境和第二种无网络环境. 第一种:有网络环境 首先 进入系统执行:以下命令,获取网络源 wget -O /etc/yum.repos.d ...
- 【Leetcode】64. 最小路径和
题目(链接) 给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例 1: 输入:grid = [[1 ...
- 蓝牙HFP协议推荐的语音丢包补偿算法浮点实现的定点化
最近在做蓝牙的宽带语音通话.相对于蓝牙窄带语音,主要变化是把采样率从8k变到16k,以及编解码器从CVSD变成mSBC(modified SBC,改进的SBC)等.蓝牙语音通话相关的HFP(Hand ...
- vue初学核心基础02
8.v-bind补充 8.1v-bind绑定类名 v-bind指令给"任意标签"的"任意属性"绑定数据 对于大部分的属性而言我们只需要直接赋值即可, 例如:va ...
- Python日志模块封装
一.先上结论 对Python logging模块进行二次封装 # -*- coding:utf-8 -*- # 作者:IT小学生蔡坨坨 # 博客:caituotuo.top # 时间:2022/3/1 ...
- 无法解析的外部符号 _main
就如提示错误一样,程序找不到入口. 解决方法:
- #高精度,卡特兰数#洛谷 2532 [AHOI2012]树屋阶梯
题目 分析 设\(dp[n]\)表示大小为\(n\)的树屋阶梯方案数,如何不算重也不算漏 考虑在左下角填充一个尽量大的矩形,一共有\(n\)种方法, 然后剩下的两头就可以用前面的结果表示 也就是\(d ...
- OpenHarmony兼容性平台更新上线
一.前言 OpenAtom OpenHarmony(以下简称"OpenHarmony")兼容性测评平台已经运行了一年,随着 OpenHarmony 开源项目的不断向前演进和兼容性测 ...
- keycloak~网站对接到Keycloak的步骤
新网站对接到KC的部署 kc的环境 向kc申请自己的客户端 kc的登录接口 通过code换token接口 刷新token接口 kc的用户信息接口 kc的jwt token说明 1. kc的环境 测试环 ...
- C语言 06 无符号数
所有的数据底层都是采用二进制来进行保存的. 第一位用于保存符号位. 如果不考虑这个符号位,那么所有的数都是按照正数来表示. 比如考虑了符号位的 char 类型: 考虑符号表示范围:-128 ~ 127 ...