Knative v0.2 发布

原文:Announcing Knative v0.2 Release
作者:Mark Chmarny
增强的插接能力、自动伸缩、稳定性和性能。
Knative 是一组用于在 Kubernetes 上构建现代应用的一组中间件组件,在此宣布,0.2 版本已经面世。从七月份该项目启动至今,0.2 版本是第一次显著更新。这次更新是整个 Knative 社区的几个月里的努力成果,体现了我们从日益增多的 Knative 部署数量中学到的新知识。
0.2 版本中最令人激动的更新就是包含了 eventing
。Eventing 组件补充了另外两大组件:Build 和 Serving 留下的空白。我们希望社区会使用这一新功能来开发新的事件和解决方案。
Serving 组件的内部实现做出了很大改进,新的内部 API 将 Knative 划分为了子系统,从而加入了对可插接网络、自动伸缩以及缓存的支持。
完整的发布说明可以在 Serving、Build 和 Eventing 仓库中找到。下面着重说一下其中的亮点:
新的事件资源模型
Eventing 在资源模型方面发生了很大变化,将源码融入 CRD 之中。Eventing 现已采用 Kubernetes 的表尊概念,这样一来就可以更好的实现校验、清晰的接口以及 RBAC 支持。新架构使用了以 Channel 和订阅为中心的简化的对象模型。
松耦合
在 v0.1 期间我们收到的正面评价之一就是在定义 Knative 组件安装时候的选择能力。v0.2 中 Knative 增强了这种能力,操作者可以独立安装 Build、Serving 以及 Eventing 组件。Knative 组件之间的松耦合使得第三方集成成为了可能,例如使用一个非 Knative 的 Build 来和 Serving 进行配合,或者用 Eventing 把事件分发给非 Serving 的部署。我们很高兴社区选择了这一方向。
可插接的子系统
我们还接到了很多希望能够定制 Knative 的反馈。目标就是支持某种程度的插接能力,所以 v0.2 中定制能力也有了显著提高。我们加入了三个新的内部 API,来把我们的核心资源模型从实现模块中分离出来:网络、自动伸缩和缓存。网络让开发人员可以用不同的 Ingress 实现来替代我们的 Istio 依赖。自动伸缩让开发人员能够把我们的自动伸缩机制替换为自己的方案。缓存让开发人员可以使用镜像缓存策略来在集群中进行镜像的提前载入(这是一个纯粹的扩展点,并没有内置绑定方案)。
冷启动改进
决定冷启动性能的两个决定因素就是 Sidecar 注入和镜像拉取造成的延时。Istio 的 1.0.2 版本中在减少 Envoy 编程时间方面有了进步。另外我们还允许安装无 Sidecar 注入的 Knative。为了帮助用户降低镜像拉取延迟,我们开放了新的扩展点,称为 "Image" 资源(knative/caching 的一部分),其中包含了一个预载入镜像控制器所需要的所有信息。社区对缓存组件的建设让我们非常激动。
自动伸缩
以前的自动伸缩器是每个版本一个,现在替换为单一的共享控制器。新的自动伸缩器和之前的版本具备同样的逻辑,但是进化到纯粹的指标驱动(包含 0->1->0),去掉了无用的 Revision servingState 字段。我们用一个整数 ContainerConcurrency
字段替换了 ConcurrencyModel
。这样在一些情况下就可以限制并行数量为 1 以外的数值(例如限制线程池)。
Build
Knative Build 做了很多增强,包括新的 ClusterBuildTemplate
资源。用户可以一次性安装一组 BuildTemplates
,而不是每个命名空间一次。Build 模板参数可以对构建步骤所用的镜像名称进行设置。Build Spec 的新功能包括用户可以指定 Build 一级的超时、节点选择器以及亲和性。另外 Build 状态得到了扩展,会报告每个步骤和 Build 的等候时间。
Subscribe to my newsletter
Read articles from 崔秀龙 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
