首页 > 其他分享 >Kurator V0.6.0:实现应用全流程生命周期管理

Kurator V0.6.0:实现应用全流程生命周期管理

时间:2024-02-01 10:56:55浏览次数:24  
标签:生命周期 版本 Kurator 发布 测试 流水线 V0.6 kurator

本文分享自华为云社区《Kurator V0.6.0:实现应用全流程生命周期管理》,作者:云容器大未来。

Kurator 是华为云开源的面向分布式云原生环境的一站式解决方案。它利用 Karmada 作为多集群编排基础,内置集成了Istio、Prometheus、Thanos、Volcano、KubeEdge、Argo 等主流云原生技术。基于此,Kurator 构建了包括集群舰队管理、集群生命周期管理、统一应用分发、流量治理、监控和策略管理在内的分布式云平台管理能力。

在最新 0.6.0 版本中,Kurator 为云原生应用增加了 CI/CD 流水线设置与管理功能,简化流水线创建。此外,强化了 0.4.0 版本发布的统一应用分发功能,可以在部署新应用时设置金丝雀(灰度)发布、A/B 测试、蓝绿发布三种渐进式发布策略。新增的流水线特性和渐进式发布功能与统一分发能力结合,实现基于代码仓库的 GitOps 工作流。这有助于快速构建分布式云原生平台,简化应用开发与发布流程。Kurator CI/CD 的结构图如下所示:

用户更新代码仓库后,触发 Kurator 流水线,完成代码拉取、检查、编译并构建镜像。其后,用户更新应用部署模板,例如更改应用配置中的镜像信息。Kurator Application Controller 侦测到配置更新,将自动触发已应用的渐进式发布策略,实现应用的自动发布。如此一来,整个软件研发生命周期以代码为中心,实现开发至发布完整流程的自动化,简化运维、部署工作。

流水线

CI/CD 流水线实现源码到发布的自动化过程,包括源码管理、检查、测试等阶段。但由于每个阶段技术需求不同,导致流水线配置和管理难度大。Kurator 参考开源项目 Tekton,通过预定义常用任务模版的方式简化流水线创建操作。用户只需指定任务名称和代码仓库访问凭证即可创建流水线,使用门槛低。对熟悉流水线的高级用户,Kurator 也支持自定义任务。用户可以根据自己需求定制任务内容,满足个性化场景。通过预置任务模板和自定义任务的能力,Kurator 大幅简化了流水线配置和管理的难度。

从图中可以看出,在使用流水线时,Kurator 完成了大部分工作。用户只需配置运行环境,选择任务模板即可完成流水线创建,大大减少学习成本。特别是与传统Tekton 相比,Kurator 提供了预定义任务模板,用户只关注任务内容而不再处理具体实现,实现了流水线使用的极致简化。

除了简化流水线的创建操作外,Kurator 还考虑到了软件供应链安全,可以在流水线构建镜像时自动为其添加数字签名和源头证明,以防范假冒镜像,保证镜像源头可靠,保证在镜像制作方面的安全性。软件供应链安全指的是保护软件从开发到部署的整个生命周期过程中的安全性。软件供应链安全可以提高软件安全性能和用户信任度,预防恶意代码渗透。签名和证明添加后,镜像将自动上传至仓库。在镜像仓库中可以直接查看镜像签名和证明的详细情况,如图所示。

用户可以用签名过程生成的公钥验证镜像签名和源头。这样在生产中,生产者仅需公布签名公钥,就能让用户验证数字签名和来源证明。接下来将展示一个在 Kurator 中创建一个流水线的示例:

在流水线定义 spec.tasks 中指定任务名称,即可选择 Kurator 内置的常用任务模板。目前内置的常用任务模板包括:

 

名称

 

任务目标
git-clone 拉取源码
go-test 运行go代码单元测试

 

go-lint go源码静态检查
build-and-push-image 编译,构建镜像并上传

此外,通过 customTask 定义可以发布自定义任务。通过指定 image、command 和 args,实现定制任务需求,如上述示例中自定义任务完成的工作就是打印README.md。

更多的示例和细节,请参考: https://kurator.dev/docs/pipeline/

渐进式发布

金丝雀发布、A/B 测试和蓝绿发布都是主流的应用发布策略,可有效减少上线风险。Kurator 0.6.0 在原统一应用分发基础上,增加渐进式发布功能。现在应用可以指定三种渐进式发布策略中的一种策略。同时,可以将具备发布能力的统一分发,与 CI/CD 流水线结合起来,实现基于代码仓库的 GitOps 工作流。

金丝雀发布

金丝雀部署是一种渐进式发布策略。先向少数用户发布新的软件版本进行测试,根据测试结果,决定是否向更多用户推出新版本。旨在最大限度地减少新版本上线后对用户的影响,是一种更安全、更可靠的软件发布策略。参阅以下的操作示例,了解如何使用 Kurator 配置金丝雀发布。

通过配置 rollout 中的 workload 字段,可以将金丝雀发布的目标设置为 webapp 命名空间下名为 backend 的应用。发布目标除了支持 deployment 应用之外,还支持 daemonSet应用。流量分析使用 Kurator 内置的请求成功率(request-sueccess-rate)和平均访问时延(request-duration)两个指标作为衡量新版本是否健康的标准。其中通过 thresholdRange 指定阈值。示例中要求请求成功率大99%,平均访问时延小于 500ms,新版本的服务才会被认定为健康。rolloutPolicy.canaryStrategy 配置了每次测试成功后,下次流量递增的比例和最终允许测试版本流量占比的最大值,从而实现渐进式发布新版本。示例中每次递增 10% 的流量流向新版本,最多为 50%。也可以设置 maxWeight 为 55,这样在最后一次测试的时候,只会新增 5% 的流量流向新版本。除了这些配置之外,Kurator 还可以设定完成验证之后,流量以什么样的比例逐步流向新版本。

更多细节请参考: https://kurator.dev/docs/fleet-manager/rollout/canary/

A/B测试

A/B 测试为效果测试,是验证应用两版本表现的测试方法。它通过将用户分到不同组,每个组体验不同版本,然后分析每个组用户在使用过程中的各项指标,选择效果较好的版本。A/B 测试也可以先让部分用户试用新版本,收集真实环境下的用户反馈,再决定是否上线新版本。了解如何在 Kurator 配置应用的 A/B 测试,请参考下方操作示例。

和金丝雀发布类似,由 workload 指定 A/B 测试的目标。通过 metric 指定测试的指标。A/B 测试和金丝雀发布不同的点在于需要配置 match 中的匹配规则,实现流量分组。上述 match 配置是只有 http 请求头满足使用 FireFox 浏览器或请求的 cookie 中包含 “type=insider” 的情况下,请求才会被转发到新版本。通过对不同请求头的处理达到对用户分组的效果,对不同的版本进行效果测试。除了匹配请求头之外,还能匹配 URI、端口号等。

更多细节请参考: https://kurator.dev/docs/fleet-manager/rollout/abtest/

蓝绿发布

蓝绿发布是一种渐进零停机发布方法。它将生产环境分为两个独立运行的蓝绿环境,蓝环境承载当前实际流量,绿环境预部署新版本。新版本通过测试后,只需切换流量到绿环境,就能实现零停机升级。蓝环境备用支持回滚。通过实时扩容,可近乎零停机完成迭代交付,提高发布效率和用户体验。了解如何在 Kurator 配置蓝绿发布的操作示例,请参考下方。

蓝绿发布需要配置目标应用、测试指标、迭代次数和容许测试失败的次数,其中测试的迭代次数由 analysisTimes 指定,容许测试失败的次数由 checkFailedTimes指定,除此之外无需配置别的规则。因为蓝绿发布在测试新版本的时候是将全局流量转发到绿环境中进行测试,没有金丝雀发布的渐进式流量递增和 A/B 测试的对用户分组的需求。

更多细节请参: https://kurator.dev/docs/fleet-manager/rollout/blue-green/

未来展望

综上所述,通过 CI/CD 流水线和渐进式发布功能,Kurator 实现了从源码到发布的完整流水线自动化,真正提升了开发效率和运维能力,实现开发、配置和发布的应用全流程生命周期管理。此外还大幅简化了采用 CI/CD 流水线和渐进式发布的门槛。随着 Kurator 的不断迭代升级,我们还将继续为流水线添加更多的预定义任务模板,为渐进式发布提供更多的测试指标。欢迎大家试用 Kurator 并提出宝贵的意见与需求。Kurator的门户为:https://github.com/kurator-dev/kurator

随着功能的逐渐完善,Kurator 将成为用户快速立体掌握云原生技术体系、高效运行分布式应用的强大工具。

参考链接

Kurator项目地址:https://github.com/kurator-dev/kurator

CI/CD流水线:https://kurator.dev/docs/pipeline/

软件供应链安全:https://kurator.dev/docs/pipeline/chain-security/

渐进式发布:https://kurator.dev/docs/fleet-manager/rollout/

金丝雀发布:https://kurator.dev/docs/fleet-manager/rollout/canary/

A/B测试:https://kurator.dev/docs/fleet-manager/rollout/abtest/

蓝绿发布:https://kurator.dev/docs/fleet-manager/rollout/blue-green/

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:生命周期,版本,Kurator,发布,测试,流水线,V0.6,kurator
From: https://www.cnblogs.com/huaweiyun/p/18000736

相关文章

  • 在@KafkaListener启动之前需要做数据的预加载,该在Spring生命周期的哪个阶段做这个事情
    背景说明1、在Spring中消费Kafka数据时,最便捷的方法就是给方法加@KafkaListener注解。在数据消费逻辑中,需要先把一些配置信息预加载到内存中。有同事就提了一个问题:如果保证在消费者执行前,预加载数据的代码一定能执行完?也就是说,要等待数据预加载完成之后,再执行消费逻辑。大部分......
  • 在K8S中,PV生命周期状态有哪些?
    在Kubernetes中,PersistentVolume(PV)对象具有以下几种生命周期状态:Available(可用):PV在被创建并设置为可供绑定的状态时处于Available状态。在此状态下,PV尚未与任何PersistentVolumeClaim(PVC)关联或绑定。Bound(已绑定):当管理员或Kubernetes自动将PV与一个匹配的Persis......
  • 每日(软件测试生命周期)
     什么是生命周期?“生命周期”这个简单的词是指从一个形式(状态)到另外一个形式(状态)的一系列的变化。这些变化可以发生有形或无形的事情上。每个实体都有生命周期,从开始到死亡/结束。类似的,软件也是个实体。就像开发软件包括一系列的步骤,测试也有很多步骤,这些步骤按照一定顺序去......
  • 1.Application和Window窗体的生命周期
    1.Application的生命周期 在WPF中,我们知道App.xaml作为整个整个应用程序的入口,APP类是继承Application类,而Application类继承于DispatcherObject类。Application是的生命周期是怎样的呢?///<summary>///Application的生命周期:OnStartup->OnActivated->OnDeactivated......
  • HTML5 新手文档流、文档结构、页面生命周期 讲解
    HTML5新手文档流、文档结构、页面生命周期讲解1.HTML代码执行顺序  2.CSS代码执行优先执行 3.JS代码执行和HTML结构的先后顺序 4.HTML5页面生命周期生命周期事件document.onreadywindow.onloadwindow.onclosewindow.onresizewindow.onscrool 媒体标签......
  • 可观测性网站之Session的生命周期
    本文会列出session的属性值、统计指标,重点讲解session几个字段值,虽然从代码中看出的考虑策略,session和view、app均有关联,但本文仅从代码层面对session的创建、更新、过期的逻辑进行讲解,其中会把关键的变量值也会列出来。定义:用户会话信息记录,当前会话中,将会基于会话维度用户页面、......
  • 在K8S中,Pod生命周期包含哪些?
    在Kubernetes(简称K8s)中,Pod的生命周期经历了一系列状态变化。以下是Pod可能处于的一些主要状态:Pending:当创建一个Pod时,它首先会进入Pending状态。这个状态下,Kubernetes正在为Pod分配节点、拉取容器镜像或等待其他资源就绪。在这个阶段,Pod尚未被调度到具体的Node上或者其依赖的......
  • 004*:组件的生命周期(初始化、进行中、销毁)
    目录 正文1:生命周期-初始化/*目标1:始化生命周期的执行过程2:理解生命周期的各个钩子函数的作用*/importReact,{Component}from'react'exportdefaultclassLifeCycleComponentextendsComponent{//构造函数constructor(props){super(p......
  • 类的生命周期
    类的生命周期从类被加载到虚拟机内存中开始,到释放内存总共有7个阶段:加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using),卸载(Unloading)。其中验证,准备,解析三个部分统称为连接(Linking)。类加载过程类是在运行期间第一次使用时动态加载......
  • Rust 泛型、Trait 和生命周期
    本文在原文基础上有删减,原文参考泛型、Trait和生命周期。目录泛型数据类型在函数定义中使用泛型结构体定义中的泛型枚举定义中的泛型方法定义中的泛型泛型代码的性能Trait:定义共同行为定义trait为类型实现trait默认实现trait作为参数TraitBound语法通过+指定多个traitb......