【云驻共创】从Day1到Day2,全周期加速多云现代化应用交付和运维
在现代的软件研发过程中,经常会使用 Day1 和 Day2 这两个术语表达软件生命周期的两个阶段:
- Day1:不仅要创建应用程序本身,还要创建应用程序的基础设施、网络、外部服务,并实现所有部分的初始配置。
- Day2:指的是产品交付给客户的后,大部分工作都集中在维护、监控和优化系统上。分析系统的行为并做出正确的反应至关重要,因为所产生的反馈循环将一直持续到应用程序生命周期结束为止
一、多云现代应用的特点与趋势
1.1 应用的部署架构正在由单云迁移至混合云和多云
企业拥抱分布式云战略,87% 的企业采用分布式云(包含混合云),其中 72% 的企业选择混合云。
分布式云架构场景下,企业采用多云架构的 TOP 3 场景:
- 应用独立部署(基于多云)
- 容灾/故障转移
- 多云应用无缝迁移(避免锁定)
1.2 现代化应用的概念
在《企业应用现代化白皮书》中,华为云认为应用现在化是以软件的敏捷交付为向导。实现贯穿基础设施到应用的认知重塑、架构升级和技术跃进。
从企业的角度,极致弹性、高可用、内生安全、高效敏捷、融合治理等为特征的应用现代化是企业应对不确定性时代的必备能力。
根据知名咨询机构 Gartner 的预测,到 2025 年,现有应用中的 90% 将继续被使用,但其中多数应用的现代化升级投资仍然不足。
2023 年 Gartner CIO 和技术高管调研显示,30% 的中国受访者表示将增加应用现代化支出,而 2022 年这一比例仅为 19%。
1.3 多云现代化应用的典型特征
多云应该具有分布式基础设施和存储,代码可以快速部署到不同的云上(公有云、私有云和边缘云),下面总结了现代化应用的四个特点:
- 可扩展性:可以快速扩展应用的各类能力;访问云服务、动态配置、日志等。
- 可移植性:应用的快速复制迁移能力;跨地域、跨厂商、跨平台可移植;避免厂商锁定。
- 极致弹性:面向用户弹性,流量高峰弹性扩缩;面向故障弹性,应对故障迁移容灾。
- 敏捷高效:代码敏捷,高频、高效发布新应用;基础设施敏捷:Infrastructure as code。
二、云原生时代下的可持续交付模型:GitOps
2.1 GitOps 概念和由来
- 基本概念
GitOps 的概念最早由 Weaveworks 公司于 2017 年提出,指具备版本控制、拉取和合入请求能力、具备 CI/CD 流水线发布能力的基础设施即代码(Infrastructure as Code, IaC),是一种云原生的持续交付模型。
- 同步机制
Git 仓库中的声明式配置描述了目标环境当前所需基础设施的期望状态,借助GitOps 能力,当集群中的实际运行的配置和应用状态与 Git 仓库中定义的期望状态不匹配时, Kubernetes Reconcilers 会根据期望状态来调整当前的状态,最终使实际状态与期望状态保持一致。
- 唯一事实来源
使用 Git 仓库来管理基础设施和应用的配置,并且以 Git 仓库作为更改基础设施和应用的单一实施来源,用户从其他地方(例如,集群控制台或者命令行)修改的配置均会被修正。
2.2 Infrastructure as Code (IaC) 概念的由来
IaC 是指通过机器可读的定义文件而不是物理硬件配置或交互式配置工具/Web 端来管理和设置云基础设施和数据中心的过程。
2.3 GitOps 模式部署相较传统部署模式的优势
- 传统模式部署
- 多云环境切换成本高
- 基础设施配置依赖人工定周期维护(举例:证书更新)
- 部署软件包不具备版本化和回滚能力,部署变更行为无法审计
- 差异化部署场景应对乏力
- GitOps 模式部署
- 屏蔽底层环境差异和多个管理接口,将多环境的治理集中一处
- 基于 Git 将部署行为版本化、可审计、可回滚、可进行权限控制
- 配置仓库中的定义是集群中运行资源的唯一修改来源
- 具备丰富的多集群差异化配置策略
2.4 面向多集群场景的两种自动同步模式
- Push 模式同步配置
- Pull 模式同步配置
2.5 Flux:高效、轻量、可定制化的 GitOps 插件
- 声明式配置
声明式地在 Git 中存储带交付的资源清单,并自动化将资源同步至对应的 Kubernetes 集群中。
- 轻量化、可应对大规模集群场景
采用 Pull 模式自动同步集群资源,每个成员集群均需安装对应插件,支持大规模场景。
- 结合 Flagger 实现渐进式交付
通过定制绑定对应的工作负载的发布策略,可以实现应用在镜像更新时自动进行灰度发布。
2.6 华为云 UCS:为企业分布式业务提供无处不在的云原生服务
随着云原生应用深入企业各个业务场景,跨云跨地域统一协同治理,保障一致应用体验等新的需求日渐突出,华为云UCS构建无处不在的云原生服务,加速各行各业云原生升级。
- 一站式多云统一体验
支持华为公有云(中心Region、IEC、IES)、客户自建IDC以及第三方云场景的Kubernetes集群统一接入管理。同时基于多云统一管理提供多云多集群的统一配置策略管理,支持企业级项目的租户权限管理,可精细化管理子账号对接入Kubernetes资源的访问权限。以及统一管理各个集群的安全策略和资源访问限制,便于多云多集群的合规性审计。华为云UCS还提供按“应用->Region->集群->资源粒度”进行监控运维,以及灵活的Dashboard、智能巡检、容器洞察等多云运维监控能力。
- 百万级节点算力协同
华为云UCS基于华为云贡献至CNCF的多集群管理项目 Karmada,通过多云管理平台能力,可支持上千个 Kubernetes分布式集群的统一接入,同时最高可支持百万级节点资源协同调度,实现应用在分布式云场景下的跨云跨集群的弹性伸缩,应用故障时的跨云迁移,可根据全局资源分布和工作情况,结合地理位置、网络QoS、亲和性、资源均衡度等条件下的应用最优化部署。让用户可以随时、随地提供应用所需算力资源。
- 智能流量分发调度
通过统一的容器网络编排和服务发现能力,实现跨云跨集群扁平化互通能力,达到业务体验一致和通讯安全可靠的目标。同时可支持用户接入流量就近分发至最合适的后端集群,缩短访问延时,同时支持流量基于访问者网段、地域、运营商等不同策略下的分发,通过UCS上的服务网格能力可以支持跨云跨集群的统一服务治理,实现基于网络QoS优先级调度、地理亲和等能力,同时借助网格能力可支持自动化灰度发布,服务拓扑可视化,服务调用链等能力,使得用户可以实现实时跨域、按需调配应用访问流量。
- 数据随应用一键迁移
UCS分别针对存储设施层、容器集群层、中间件数据层提供应对不同业务场景的数据复制能力。提供跨云迁移数据自动化同步能力,同时基于数据随应用的同步复制能力,可以实现在分布式基础设施上的弹性扩容。在扩容场景中,完成零人工干预的数据扫描和重建,完成以应用为中心,全业务一体化迁移、弹性、容灾。
2.7 UCS GitOps:托管式的云原生自动化交付 SaaS 服务
UCS GitOps 功能是指通过在集群中部署插件的方式,帮助用户自动完成从代码仓库定义交付资源到集群中部署业务的过程,产品具体具备以下功能:
- 插件开箱即用,免运维
开发运维人员基于 Git 工作流,可将现有流程,从应用开发扩展到部署,应用生命周期股管理和基础架构配置,开箱即用,用户无须运维 GitOps 工具。
- 多集群差异化配置能力
GitOps 插件通过内置 Kustomize 结合 Base/overlay 制品组织方式和 HelmRelease 结合 valueFrom/ValuesFiles 等方式的能力,满足客户差异化的配置管理诉求。
- 基于 Git 的可审计、可持续的部署能力
将 Git 仓库中最新合入的制品配置信息同步配置至舰队纳管的多个集群中,同事对应用发布行为进行版本化管理和权限控制,提供发布回滚和版本迭代控制,并进行审计跟踪。
- 自动化基础设施更新和持续监控
期望的基础设施状态会自动应用与集群,而无需任何手动干预。持续监控并确保集群的网络策略、集群配额、权限控制等实际配置信息与仓库定义保持一致。
UCS GitOps 使用与如下场景:
- 云原生应用及配置信息的自动同步
- 端到端构建多云 DevOps 流水线
三、多云应用的交付过程观测
3.1 多云应用交付过程观测的不同角度
- 交付资源的观测:资源清单、拓扑结构
- 交付状态的观测:应用新、旧版本实例,是否触发监听更新,交付事件的通知
- 交付流量的观测:从 APIG 到微服务单元的观测以及链路追踪
- 交付环境的观测:集群、节点性能、指标、日志采集
3.2 多云应用交付过程的观测方案
业务部署的时候,终端用户通过 API Gateway 访问集群的 Nginx Ingress Controller,流量会被到导向到要访问的应用上。当客户需要发布新的业务时,需要将最新的业务代码和资源清单提交到配置仓库,这个时候插件就能监控到变化并实时的同步资源到集群中,当然也支持灰度发布和金丝雀发布。
3.3 构建多云 DevOps 流水线实现多集群应用自动化交付
开发提交代码到代码仓库,触发 CI 流水线进行代码构建和测试工作,然后将镜像推到镜像仓库同时更新业务配置到配置仓库,这时运维团队可以使用镜像和配置清单通过 UCS 中心部署到不同的集群中。
业务痛点分析
- 多集群场景应用交付复杂:根据应用程序的不同,应用程序部署到的集群类型可能非常多样化。具有不同配置的同一个应用程序可以托管在公有云、本地环境、甚至边缘环境。
- 多集群场景应用运维复杂:多集群分布分散,缺少统一集中的运维和集中式的可观测中心,提前感知集群和工作负载的风险,断网风险大。
方案价值
- 生态开放:配合华为云 CodeArts 实现开箱即用的方案,也支持对接自建或者第三方的代码仓库和流水线(如 Gtihun、Tekton)。
- 加速内网循环到外部循环的无缝转换、加快业务上线:从一周上线提升到一天上线。
- 基于 Git 的可审计、可持续的部署能力:基于 GitOps 引擎,提供发布回滚和版本迭代控制,并进行审计跟踪,安全性更强。
- 业务全景可观测,风险提前感知:风险全景可视,集群健康巡检,故障诊断等能力,提升运维效率。
四、总结
在前云时代,Day1、Day2 之间的分隔清晰可见,但是今天,随着云的日常运行,事物在不断变化。使用云和现代软件开发实践,可以更轻松地处理软件生命周期中不断变化的要求。持续集成/持续开发方法使我们能够动态响应客户反馈并实时改进应用程序,而无需等待主要版本进行改进。
现代化的 DevOps 工具链在不断的完善,特别是 UCS 的出现使得执行 Day1 的任务和适应 Day2 的更改成为可能。 可以根据我们的需求进行配置。
本文参与华为云社区【内容共创】活动第24期。
- 点赞
- 收藏
- 关注作者
评论(0)