尝试使用Knative建立一个应用
本文使用Knative构建一个应用的尝试:
Knative有一些非常有趣的功能:应用可伸缩到零,可从源代码直接构建到容器、事件和路由策略,看起来非常有前景。
了解Knative
Knative是利用Kubernetes提供的一种称为自定义资源定义(CRD)的扩展技术,我们可以定义自己对象并通过Kubernetes API访问它们。
与Knative所有交互是通过kubectl,Kubernetes官方的CLI。kubectl用于在Kubernetes API中创建,更新或删除资源,Knative对这些资源中的更改(例如启动容器)做出反应并确保系统随时间的一致性。
Knative定义了不同的CRD,但最接近应用的概念是“服务”。
一个“服务”是由Knative的“路径”和“配置”组成。默认情况下,会创建一个让你的应用可访问的路由,因此我们可以直接关注“配置”。
一个“配置”资源包含了“构建”和“修订”。一个“构建”定义了一系列关于如何构建应用的步骤,但不用担心,有叫第二资源BuildTemplate的东东,它提供了根据不同的用例如何定义这些步骤的模板。最后,“修订”指定了运行应用的配置,其中包含用于容器的Docker镜像等字段。
为应用定义服务
为了定义一个从源代码构建和部署应用所需的最小配置,我们必须遵循以下步骤:
1. 选择适合你的用例的构建模板BuildTemplate,并将其应用于Kube群集。在我的例子中,我选择了Buildpack模板,因为它能够自动检测并安装我的应用程序的任何依赖项。
$ kubectl apply -f https://raw.githubusercontent.com/knative/build-templates/master/buildpack/buildpack.yaml
2. Knative需要将应用程序上传到Docker Registry,因此我们需要有一个注册器,为了简单起见,我决定使用Docker Hub。
3.要让Knative推送镜像,我们需要定义ServiceAccount用户名和密码才能使用Docker Hub,并在集群中配置它们:
|
$ kubectl apply -f serviceaccount.yml
4.我们现在可以定义服务:
|
5.使用服务配置部署应用:
$ kubectl apply -f service.yml
6.构建和部署应用程序需要几分钟,只需等待pod运行:
$ kubectl -n default get pods
7.所有应用程序的流量都通过knative-ingressgateway。要在群集中获取其IP,请使用以下命令。如果你的群集是新的,则服务可能需要一些时间才能获得外部IP地址:
|
8.要查找服务的URL,请键入:
|
最后,我们可以用curl访问应用程序:
|
综上所述
简而言之,我们必须了解Knative使用自定义资源定义(CRD)来扩展Kubernetes API以及如何定义这些资源,这样我们的应用程序才得以构建和部署。我们使用kubectl 实现与Knative交互并配置资源。此外,我们必须以我们可以将映像拉推到Docker Hub的方式来配置Kubernetes。
让我们退后一步,考虑一下这对开发人员来说意味着什么,Knative能够构建并运行我们的应用程序,但我们必须熟悉许多新概念(例如CRD,构建,构建模板,配置,修订,服务,安全,服务帐户,Docker注册表,Istio Ingress,路由,kubectl,等等)。在我看来,开发人员必须尽可能地专注于代码。代码的运行位置和方式无关紧要,必须学习所有这些新概念会使事情变得更加复杂,并可能会使你远离代码,感觉Knative缺少一种更直接的方式来在云中部署应用程序。
Running my first application on Knative – Roberto
[该贴被banq于2018-08-21 09:27修改过]