由于Knative在Kubernetes之上运行,我们首先需要一个集群。让我们使用minikube创建一个集群,按照我们在整本书中使用的相同方法。打开一个终端窗口并运行以下命令:

接下来,我们可以安装Knative。为了简单起见,我已经在与本书配套的源代码存储库中收集了必要的命令。从Chapter16/16-end/polar-deployment/kubernetes/development文件夹中,将install-knative.sh文件复制到您的Polar Deployment存储库(polar-deployment)的相同路径中。

然后打开一个终端窗口,导航到刚刚复制脚本的文件夹,并运行以下命令在本地Kubernetes集群上安装Knative:

在运行之前,随时打开该文件并查看说明。您可以在项目网站(https://knative.dev/docs/install)上找到有关安装Knative的更多信息。

在macOS和Linux上,您可能需要通过chmod +x install-knative.sh命令使脚本可执行。

Knative项目提供了一个方便的CLI工具,您可以使用该工具与Kubernetes集群中的Knative资源进行交互。您可以在附录A的A.4节中找到安装它的说明。在下一节中,我将向您展示如何使用Knative CLI部署Quote Function。

Knative提供了几种不同的部署应用程序的选项。在生产环境中,我们将希望坚持使用声明性配置,就像我们为标准Kubernetes部署所做的那样,并依赖于GitOps流程来协调所需状态(在Git存储库中)和实际状态(在Kubernetes集群中)。

在实验或本地工作时,我们还可以利用Knative CLI以命令方式部署应用程序。从终端窗口中运行以下命令部署Quote Function。容器镜像是我们之前定义的提交阶段工作流程发布的镜像。请记住用您的小写GitHub用户名替换<your_ github_username>:

您可以参考图16.3以了解该命令的说明。

该命令将在默认命名空间上初始化一个新的quote-function服务。它将返回通过应用程序公开的公共URL,消息如下:

让我们来测试一下!首先,我们需要打开一个隧道,使用minikube连接到集群。当您第一次运行此命令时,可能需要输入您的机器密码以授权到集群的隧道:

然后打开一个新的终端窗口,并调用根节点端点的应用程序以获取完整的报价列表。要调用的URL与上一个命令返回的URL相同(http:/ /quote-function.default.127.0.0.1.sslip.io),其格式为..

由于我们是在本地工作,我配置了Knative使用sslip.io,这是一个DNS服务,"当查询带有嵌入IP地址的主机名时,返回该IP地址"。例如,127.0.0.1.sslip.io主机名将解析为127.0.0.1 IP地址。由于我们打开了一个到集群的隧道,对127.0.0.1的请求将由集群处理,Knative将将其路由到正确的服务。

Knative负责根据需要缩放应用程序,无需进一步配置。对于每个请求,它确定是否需要更多实例。当一个实例在特定时间段内保持闲置(默认为30秒)时,Knative将关闭它。如果超过30秒未收到请求,Knative将将应用程序缩放为零,这意味着没有Quote Function实例在运行。

当最终接收到新请求时,Knative将启动一个新实例并使用它来处理请求。由于使用了Spring Native,Quote Function的启动时间几乎是瞬间的,因此用户和客户端不必处理长时间的等待时间,这是标准JVM应用程序的情况。这个强大的功能使您能够优化成本,并仅支付您使用和需要的内容。

使用Knative这样的开源平台的优势是,您可以在不进行任何代码更改的情况下将应用程序迁移到另一个云提供商。但这还不是全部!您甚至可以使用相同的部署流水线,或进行微小修改。下一节将向您展示如何以声明方式通过YAML清单定义Knative服务,这是生产场景的推荐方法。

在继续之前,请确保删除之前创建的Quote Function实例:

Kubernetes是一个可扩展的系统。除了使用内置的Deployments和Pods等对象之外,我们还可以通过自定义资源定义(CRD)定义自己的对象。这是许多构建在Kubernetes之上的工具(包括Knative)使用的策略。

使用Knative的好处之一是更好的开发人员体验和以更简洁和直观的方式声明应用程序的期望状态。与处理Deployments、Services和Ingresses不同,我们可以使用单个资源类型:Knative Service。

注意 在整本书中,我将应用程序称为服务。Knative提供了一种在单个资源声明中对应用程序进行建模的方法:Knative Service。起初,命名可能不太清楚,因为Kubernetes已经有了一个内置的Service类型。实际上,Knative的选择非常直观,因为它将架构概念与部署概念一对一地映射。

让我们看看Knative服务是什么样子的。打开您的Quote Function项目(quote-function),创建一个新的“knative”文件夹。然后,在其中定义一个新的kservice.yml文件,以声明Quote Function的Knative服务的期望状态。记得用您的小写GitHub用户名替换<your_github_username>。

像任何其他Kubernetes资源一样,您可以使用kubectl apply -f 将Knative Service清单应用到集群中,或者通过像我们在上一章中使用的Argo CD的自动化流程。对于这个例子,我们将使用Kubernetes CLI。

打开一个终端窗口,导航到您的Quote Function项目(quote-function),并运行以下命令从Knative Service清单部署Quote Function:

使用Kubernetes CLI,您可以通过运行以下命令获取有关所有创建的Knative服务及其URL的信息(所显示的结果是部分结果,以适应页面):

让我们通过向根节点端点发送HTTP请求来验证应用程序是否正确部署。如果您之前打开的隧道不再活动,请在调用应用程序之前运行minikube tunnel --profile knative:

Knative在Kubernetes之上提供了一个抽象。然而,它仍然在底层运行Deployments、ReplicaSets、Pods、Services和Ingresses。这意味着您可以使用在前几章中学到的所有技术。例如,您可以通过ConfigMaps和Secrets配置Quote Function:

如果您等待30秒然后检查本地Kubernetes集群中的运行Pods,您将看到没有Pods,因为Knative由于不活动而将应用程序缩放为零:

现在尝试向应用程序发送新请求,URL为http://quote-function.default.127.0.0.1.sslip.io。Knative将立即为Quote Function启动一个新的Pod来响应请求

请翻译:Since Knative runs on top of Kubernetes we first need a cluster Let’s create one with minikube following the same approach we’ve used throughout the book Open a Terminal window and run the followi

原文地址: https://www.cveoy.top/t/topic/iu8j 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录