knative入门指南

简介: knative入门指南

尽管Knative自2018年以来一直由社区维护,但最近一直有关于该项目的传言,因为谷歌最近将Knative提交给了云原生计算基金会(CNCF),作为一个孵化项目考虑。


太酷了!但Knative到底是什么呢?


简单地说,Knative是一种简化和增强应用在Kubernetes上运行方式的技术。Knative本身运行在Kubernetes上,有两个主要组件:Knative serving和Knative eventing。这篇文章是关于Knative serving。


60.png


Kubernetes 很复杂

Knative 如何简化在 Kubernetes 上运行应用程序的过程?要理解这一点,您必须首先了解这一点:在 Kubernetes 上部署应用程序很复杂。您首先进行部署,最终管理许多 ReplicaSet(每个版本的应用程序一个),每个 ReplicaSet 运行一个或多个 pod,这是您的应用程序容器运行的地方,通常每个 pod 一个容器。


61.png


但是,您还需要创建一个服务,在集群内部公开您的应用程序(以便应用程序的其他部分可以访问它),并创建一个入口,使您的应用程序在集群之外可用(以便最终用户可以访问它)。如果你想要自动伸缩,你需要制作一个HorizontalPodAutoscaler (HPA)。您还需要将配置和机密信息与应用程序分开管理。


62.png


这需要考虑很多。对于开发人员来说,这可能是一个很高的学习门槛——他们本来应该花时间专著应用程序代码。


进入Knative介绍


63.png


使用 Knative,您只需要创建一个资源——Knative 服务——然后 Knative 会为您协调一组资源,以完成我们在上面的 Kubernetes 示例中介绍的所有内容! 此外,默认设置的方式是您可以运行您的应用程序并使用一个开箱即用的命令(或一个应用的 YAML)从外部访问它。


Knative 简化应用部署

它是如何工作的?


kn service create sunshine --image=rainbows


运行 kn service create 命令,提供您的应用程序名称、应用程序映像和任何配置(环境变量、首选端口等),Knative 将为您创建一个 Knative 服务。


64.png


Knative Service 会自动为您的 Service 创建配置和路由。 配置管理修订流,每个修订都与 Kubernetes 部署和 Knative Pod Autoscaler (KPA) 相关联。


65.png


我将暂时解释这些组件中的每一个。 但现在我想让你知道两件事:


  1. 当您运行 kn service create 命令时,会为您创建所有这些对象,并且该命令会向您返回一个 URL,您可以在其中访问正在运行的应用程序。 就这么容易。
  2. 除了支持 Knative 资源的 Kubernetes 资源外,您还可以查看、访问和操作 Kubernetes 集群中的所有这些 Knative 资源。 Knative 构建在 Kubernetes 之上,但它并没有掩盖它。

Knative 缩放为零

流量如何通过这些 Knative 抽象到达 Kubernetes 部署中正在运行的应用程序?


在这一点上,我们的系统只有一个修订版,所以它像这样移动:

66.png


流量通过 Knative Route 进入集群。 默认情况下,路由将 100% 的流量发送到最新版本,但这是可配置的,我们将在本文后面讨论。


Knative Pod Autoscaler (KPA) 正在监视 Revision 收到的请求数量,并将根据需要自动扩展 Kubernetes 部署中的 pod 数量。 (再次,我将深入研究一下这里有哪些修订)。


67.png


然后检查一下:当没有流量流向您的应用程序时,Knative 会将 pod 的数量缩放为零。 这是正确的! 与 Kubernetes 不同,您需要始终运行至少一个 pod 实例才能为应用程序提供服务,而 Knative 可以扩展到零。 然后,当客户端请求访问您的应用程序时, Knative 才开始实际运行应用程序 的Pod。 这可以节省大量用于保持整年运行应用程序的费用。


68.png


带有 Knative 修订的更整洁的发布管理

正如我之前提到的,Knative Configuration 对象管理着一个修订流。 什么是 Knative 修订版? 修订是您当前代码和配置的时间快照,包含运行该特定版本的应用程序所需的所有信息。 这与 Kubernetes 管理配置的方式不同(在我看来,更优越),与源代码分开。


您想升级您的应用程序以使用最新的容器映像吗? 砰! Knative 进行了新的修订。 现在您想更新应用程序的配置吗? 砰! 新修订。 这些修订是有序的、不可变的,并且可以无限期地持续存在。


流量拆分

使用修订管理您的版本有两个主要好处。 首先,您可以轻松地在修订之间拆分流量。 这在推出新版本时特别有用。 假设您目前有 100% 的流量流向修订版 2,并且您准备升级到更新版本,修订版 3。首先,您可以将少量流量发送到修订版 3,例如 10%。 然后您运行一些用户测试,感觉更有信心,现在将 20% 的流量发送到新应用程序。 您可以以这种方式继续,直到 100% 的流量流向修订版 3,而 0% 的流量流向修订版 2。


69.png


回滚

修订的第二个主要好处是回滚。 由于 Knative 版本代表时间快照,因此您可以跳回您喜欢的任何版本的应用程序。 如果您发现您的某个应用程序依赖项存在漏洞,您可以将流量引导回不使用该依赖项的最新版本——即使该漏洞是去年引入的并且自那时以来已经发布了 20 个版本 . 当然,使用 Kubernetes,您也可以回滚,但使用 Kubernetes,回滚可能会很复杂。 跟踪与每个版本相关的配置是一个难题,回滚超过一两个周期可能特别困难。


70.png


Knative 提供对路由和访问的细粒度控制

更重要的是,使用 Knative 的 Route 抽象,您可以设置路由以提供对完全实验性且不打算向公众公开的修订的内部访问。 你可以设置一个站点和一个内部路径来对不同的 UI 模式进行测试,或者评估一个激进的新想法的可行性。 Knative Route 组件使您可以对路由和访问进行细粒度控制。


71.png

总之,以下是 Knative Serving 的诸多好处:


  • 易于部署
  • 缩放为零
  • 流量拆分
  • 回滚
  • 路线和访问


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
Kubernetes Linux iOS开发
Istio1.12:安装和快速入门
Istio1.12:安装和快速入门
86 0
|
监控 网络协议 Serverless
serverless-knative serving安装实战
serverless-knative serving安装实战
123 0
|
Kubernetes 监控 应用服务中间件
Kubernetes 上手教程
类似的应该网上很多,这里记录个人的操作过程和需要注意的几点。
356 1
Kubernetes 上手教程
|
Kubernetes NoSQL 网络协议
Kubernetes 入门教程
本文是一篇 kubernetes(下文用 k8s 代替)的入门文章,将会涉及 k8s 的架构、集群搭建、一个 Redis 的例子,以及如何使用 operator-sdk 开发 operator 的教程。在文章过程中,会穿插引出 Pod、Deployment、StatefulSet 等 k8s 的概念,这些概念通过例子引出来,更容易理解和实践。
Kubernetes 入门教程
|
存储 弹性计算 运维
5分钟带你快速入门和了解 OAM Kubernetes
OAM很有可能成为企业应用Kubernetes的下一个爆发点。需要了解一下吗?
463 0
|
Kubernetes API 容器
解读 Knative Eventing v0.12.0 新特性
本文针对 Knative Eventing v0.12.0 版本新功能特性进行解读,让你快速对 v0.12.0 版本有所了解。
1099 0
|
Kubernetes 网络协议 Java
|
JSON Kubernetes Cloud Native
Knative 初体验:Eventing Hello World
基于事件驱动是 Serverless 的核心功能之一,通过事件驱动服务,满足了用户按需付费(Pay-as-you-go)的需求。在之前的文章中我们介绍过 Knative Eventing 由事件源、事件处理模型和事件消费 3 个主要部分构成,那么事件如何通过这 3 个组件产生、处理以及消费呢? 本文通过 Hello World 示例带你初探 Eventing。
Knative 初体验:Eventing Hello World
|
Kubernetes Cloud Native Serverless
Knative 初体验:Tekton Hello World
Tekton 作为 Knative Build 模块的升级版,提供了更丰富的功能,可以适用更多的场景。如果你知道 Knative Build 是什么相信你理解起 Tekton 就是很容易的一件事了。
Knative 初体验:Tekton Hello World
|
编解码 缓存 Kubernetes
Knative 初体验:Serving Hello World
Serverless 一个核心思想就是按需分配,那么 Knative 是如何实现按需分配的呢?另外在前面的文章中你已经了解到 Knative Serving 在没有流量的时候是可以把 Pod 缩容到零的。接下来就通过一些例子体验一下 Knative 缩容到零和按需自动扩缩容的能力。
Knative 初体验:Serving Hello World