Knative是什么?
要了解这个问题,你必须先了解什么是Kubernetes?以及Kubernetes最大的问题是什么?
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
那么问题来了!Kubernetes有一个最大的槽点就是入门门槛略高,而Knative正是为了解决这个问题来的。
2018 年 7 月,Google 在 Google Cloud Next 2018 上发布了Knative,将其定位为基于 Kubernetes 的 Serverless 解决方案,旨在标准化 Serverless,简化其学习成本。自开源以来,Knative 项目备受关注,在 github 上已经获得 1000+ 的 start,Pivotal、IBM、Red Hat 等公司也纷纷成为其重要的合作伙伴。
Knative 的⽬标是在基于 Kubernetes 之上为整个开发⽣命周期提供帮助。它的具体实现⽅式是:⾸先使你作为开发⼈员能够以你想要的语⾔和以你想要的⽅式来编写代码,其次帮助你构建和打包应⽤程序,最后帮助你运⾏和伸缩应⽤程序。
为此,Knative 将重点放在三个关键组件上:Build(构建)你的应⽤程序,为其提供流量Serving(服务),以及确保应⽤程序能够轻松地⽣产和消费Event(事件)。
Build(构建)
通过灵活的插件化的构建系统将⽤户源代码构建成容器。⽬前已经⽀持多个构建系统,⽐如 Google 的 Kaniko,它⽆需运⾏ Docker daemon 就可以在 Kubernetes 集群上构建容器镜像。
Serving(服务)
基于负载⾃动伸缩,包括在没有负载时缩减到零。允许你为多个修订版本(revision)应⽤创建流量策略,从⽽能够通过 URL 轻松路由到⽬标应⽤程序。
Event(事件)
使得⽣产和消费事件变得容易。抽象出事件源,并允许操作⼈员使⽤⾃⼰选择的消息传递层。
Knative 是以 Kubernetes 的⼀组⾃定义资源类型(CRD)的⽅式来安装的,因此只需使⽤⼏个 YAML ⽂件就可以轻松地开始使⽤ Knative。
可以看出,knative 是为了解决容器为核心的 serverless 应用的构建、部署和运行的问题。
Knative 提供了一组标准中间件,专注于在云原生平台上构建和运行应用的通用任务,比如源码到容器的构建、将服务绑定到事件生态系统(通过事件触发工作负载的执行)、管理部署期间的路由和流量以及工作负载的自动扩展。该框架为用户提供了“部署任何负载都需要的熟悉的、惯用的语言支持以及标准化的模式,这些负载包括传统的应用,也包括函数或容器应用”。
相对于传统的 Serverless 解决方案,Knative 的优良性得到开发者和企业认可,这也是其短时间内得到业内各大厂商追捧的主要原因。
Knative 的优势
便利性:Knative 以 Kubernetes 和 istio 作为其底层框架,因此无论是线上还是线下,任何 Kubernetes 集群,无论是云上 Kubernetes 服务还是自建 Kubernetes 集群,都能通过安装 istio 和 knative 插件快速的搭建 serverless 平台。
标准化:Knative 联合 CNCF,把所有事件标准化,统一为 CloudEvent,提供事件的跨平台,同时让函数和具体的调用方能够解耦。
服务间解耦:使用 Knative 使得应用不在与底层依赖服务强绑定,可以跨云实现业务互通
成熟的生态:Knative 基于 Kubernetes 体系构建,与 kubernetes 生态结合更紧密;
自动伸缩:监控应用的请求,并自动扩缩容, 得益于 Istio 能力加持,天生支持蓝绿发布、回滚功能,方便应用发布流程。
应用监控:支持日志的收集、查找和分析,并支持 VAmetrics 数据展示、调用关系 tracing。
不难看出,Knative虽然很年轻,但其成长速度非常快。其作为当今云原生态领域发展最快的开源项目之一,不仅通过提供简化工作流程的工具来解决这些问题,而且还为Kubernetes集群带来了非服务器工作负载的强大功能。目前已有不少项目加入到了年轻的Knative生态系统,且趋势是不断增加的。
目前Knative 还在不断的更新优化中,每一次更新优化都离客户的最终诉求更近了一步,Knative 的未来必定是一片坦途,相信将来通福云以及整个行业将会看到很多选项和机会将Knative 运用起来。