构建Serverless体验的云原生应用平台 孙健波(天元) 阿里云–高级技术专家 孙健波(天元) 阿里云–云原生应用平台团队–高级技术专家 欢迎联系:wonderflow@icloud.com OAM/KubeVela项目负责人 云原生应用模型(OAM)及KubeVela项目主要作者 专注于推动标准化云原生应用交付和管理体系在开源和云上全面落地,负责阿里云Serverless应用平台建设。 技术布道师/开源爱好者 多届KubeCon、ArchSummit大会讲师 参与开源社区近10年,先后贡献过CloudFoundry、Docker、Kubernetes等数十个云原生、PaaS领域的开源项目。 云原生带来了技术的全面升级 容器:标准化的交付介质 Kubernetes:标准化的基础设施管理与抽象 K8sCRDOperator:自动化的运维模型InfrastructureasCode:基础设施即代码 蓬勃发展的云原生生态 云原生的崛起,带来了交付介质、基础设施管理、运维模型和持续交付理论的全面升级和突破,形成了繁荣的技术生态,加速了云计算时代到来。 z"1$%&'()*+,-./012345 测试左移 安全左移 交付左移 监控左移 … 应用开发的整个生命周期各项职责不断向研发侧左移 ShiftLeftisaboutdoingthingsearlierinthedevelopmentcycle. shiftleft! 更高的效率 研发效率交付效率运维效率 资源成本软件成本人力成本交付成本 CloudInfrastructure 更低的成本 https://devopedia.org/shift-left z"1$%&'()*+,-./012&3 基础工作负载 制品仓库 提交发布 Charts YAML文件 日志&监控策略 Prometheus ServiceMonitor 应用交付流水线 安全扫描策略 实例灰度/扩 缩容策略 RolloutController 以容器工作负载为核心构建基础设施 流量策略 基于代码或脚本对接已有的CI/CD体系或内部平台 以K8s原生API为标准集成界面,无厂商绑定 sidecar PV/PVC MutatingWebhook ServiceIstio HorizontalPodAutoscalerVirtualService ValidatingWebhook CRD Job Label&Annotations Pod namespace 充分利用K8s生态的各类CRDOperator做能力扩展 Deployment StatefulSet 6789:);<=>+?@ABCDEFGHIJ5 挑战①:云和K8s基础设施的复杂性暴露给了开发者 应用开发者 ? ? ? ? ? 水平扩缩容要怎么设置?minReplicas,maxReplicas设置多 网关的负载均衡设置成 15s健康检查够吗? Pod驱逐策略(PDB)是什么?maxUnavailable设置为多少? CPU和内存的limits该怎么设置? 应用的命名空间quota值该设置多少? 少? 基础设施的功能过度暴露给了应用开发者基础设施的API版本变更暴露给了开发者 挑战②:现代应用天然面向多云混合环境 现代微服务应用 端云联调集群环境初始化 远端exec断点调试 实时日志云资源创建/销毁 热加载 依赖编排 巡检策略 资源绑定 可观测性策略故障注入 (日志&metrics) 攻防演练 开发测试环境 ARMS 预发联调环境 ECS SLB RDS 云厂商 业务Pod Prometheus 自建机房 开发者面对不同场景心智负担重。 数据库 业务Pod 系统缺乏统一交付和管理能力。 需要补充大量人工操作,缺乏自动化。 生产环境 可观测性策略 (日志&metrics) 流量策略 多集群 安全扫描策略通知、告警 实例灰度/扩缩容策略 云资源绑定 同一个应用,在不同场景下的运维能力要求差异巨大 同一个应用,在不同环境下部署的组件依赖差异巨大数据库、负载均衡、K8s,在不同云上也存在诸多差异 挑战③:传统平台模式封装的方法不再适用 云计算生态“无限”的应用基础设施能力 传统PaaS 有限的、不可扩展的专有API与能力 平台开发无法满足 日益增长的应用管理诉求 易于使用,但管控能力的扩充主要依靠平台本身升级实现 封闭、锁定、黑盒化的API 一旦平台层人力投入不足便跟不上研发诉求 <=>+?)KLMNO125 业务开发者的核心诉求:Serverless体验 CIPipeline 多环境统一的构建流程自动化的交付流程 Serverless化的运行体验 KubernetesMulti-Clusters Jenkins 构建 交付 运行 Clouds ... •易于获取且一致的开发/测试环境 •易于理解和使用的统一API •可灰度、可回滚的发布环境 •安全、可靠、自动化 •基础设施无关、免运维 •高可用且异常行为可观测 •具备弹性伸缩能力 IoT/Edge 按需付费 业务开发者的核心诉求:由浅入深、灵活可扩展 认知负荷 开发团队操作 向开发团队屏蔽 •业务发展 •场景变化 开发团队可接受的认知负荷 •能力习得 回滚配置多集群网络 复杂性 https://humanitec.com/blog/what-developer-self-service-shouldnt-look-like OAM和KubeVela:标准化应用模型和平台构建引擎 KubeVela OpenApplicationModel API CLI UI GitOps Observability KubernetesMulti-Clusters Clouds ... AddonCatalog 持续交付和管理 自动化可扩展编排 统一应用模型构建 Jenkins CIPipeline OAM是标准化应用模型,KubeVela是基于OAM的实现引擎: 面向开发者的Serverless体验,基础设施无关 面向终态的声明式交付工作流,自动化编排 面向混合环境,天然支持多集群和云资源 IaC/可编程,高度可扩展 CNCF项目: https://github.com/kubevela/kubevela IoT/Edge CICD Day-2Opeíating Kubernetes资源示例 标准应用模型(OAM) 统一的顶层应用模型(OAM)描述 VS 组件 (Component) 描述核心工作负载,如web服务,数据库云服务、一次性任务等。 运维特征(Trait) 针对运维方式的定义,如高可用方式、扩缩容、网关、灰度发布方式等。 OAM被信通院采纳发布《云计算开放应用模型》行业标准。 按需灵活可扩展 image 组件定义 运维特征定义 pathportclassdomain replicas webservice gateway scaler 基于IaC的模块定义 组件定义 运维特征定义 运维特征定义 输出单个资源 对资源参数增补 实现无关 输出多个资源 运维特征定义 DeploymentService Ingress 面向IaC可扩展体系设计 OAM模型的工作模式 ComponentTypesTraits WebService Autoscale CronJob Rollout PlatformTeam 能力模板:X-Definitions注册 OAM X-Definition OAM X-Definition OAM Application ProductionCluster StagingCluster Route Database Deployment 准备环境部署插件Addons OpenKruise KEDA Flagger Istio 将“最佳实践”构建成模板 ProductionCluster EndUsers 享受“以应用为中心”的软件交付体验 选择部署环境Environment TerraformController 选择能力模板X-Definition, 填写参数,组装成一个 KubeVelaApplication e.g.image=appreplicas=2host=myapp.io 部署 Application WebServiceDatabase Route ECS 云服务 SLB RDS OAM模型的插件生态 EndUser OAMApplication Redis Task PlatformBuilder OAMDefinitions CapabilityProviders FluxCD ClickhouseOperator helm webservice referencethedefinition ClickhouseRDS RegisterasDefinitionModules 插件是可发现、可复用、易于安装的能力集合。 插件中心是PaaS能力市场,提供了PaaS生态标准化的途径。 目前社区的插件中心已经有50+开箱即用的插件。 AddonCatalog https://github.com/kubevela/catalog 面向现代应用:天然支持跨多集群/混合环境交付 KubeVelaControlPlane Push Push Pull Pull OpenClusterManagement ACK ACK On-premises IoT/Edge 管控集群资源不会对子集群有任何侵入 ClusterGateway 天然支持多集群部署,可定义不同的集群部署拓扑和差异化配置。 同时支持推送(Push)和子集群订阅(Pull)两种集群管理模式。 运行时无侵入,仅在控制面对子集群操作,可以对接用户的K8s自定义扩展。 面向现代应用:天然支持异构环境统一交付 Application DataInput/Output Dependency ControlPlane Clouds KubernetesClusters traits ComponentC traits ComponentB traits ComponentA RuntimeLevelCapabilities Communityaddons Terraformcontroller KubeVelaAddons 面向现代应用:将可观测性作为一等公民内置支持 KubeVelaApplication observabilitytraits KubeVela应用大盘K8s原生资源大盘 KubeVela系统大盘K8s系统大盘 Dashboard Grafana Metrics Prometheus Logs Loki(vector) 面向用户自定义的可观测能力 用户只需声明式描述需要观测的组件,配置相应的运维特征,无需关心可观测性基础设施的构建方式。 ObservabilityasCode. 可观测性基础设施相应的配置流程基于IaC的方式统一可扩展,从采集到大盘展示流程自动化,无需手动操作。 内置大盘自动化生成 除了可扩展的可视化大盘能力,KubeVela内置了大量自动生成的大盘,方便自运维,实时观测系统问题。 面向现代应用:灵活自定义应用交付处理流程 ComponentB Trait1Trait2 开发运维人员 Application(统一应用定义) ComponentAStep1Step3 Step2 Workflow 支持自定义步骤的工作流引擎(状态机) 轻量高效无需创建容器执行 结构化的流程控制和校验 可扩展、可编程、可复用、自动化 内置