第 1 章 Knative Serving 入门
1.1. 无服务器应用程序
无服务器应用程序已创建并部署为 Kubernetes 服务,由路由和配置定义,并包含在 YAML 文件中。要使用 OpenShift Serverless 部署无服务器应用程序,您必须创建一个 Knative Service
对象。
Knative Service
对象 YAML 文件示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello 1 namespace: default 2 spec: template: spec: containers: - image: docker.io/openshift/hello-openshift 3 env: - name: RESPONSE 4 value: "Hello Serverless!"
使用以下任一方法创建一个无服务器应用程序:
从 OpenShift Container Platform web 控制台创建 Knative 服务。
对于 OpenShift Container Platform,请参阅使用 Developer 视角创建应用程序。
-
使用 Knative (
kn
) CLI 创建 Knative 服务。 -
使用
oc
CLI 创建并应用 KnativeService
对象作为 YAML 文件。
1.1.1. 使用 Knative CLI 创建无服务器应用程序
通过使用 Knative (kn
) CLI 创建无服务器应用程序,通过直接修改 YAML 文件来提供更精简且直观的用户界面。您可以使用 kn service create
命令创建基本无服务器应用程序。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建 Knative 服务:
$ kn service create <service-name> --image <image> --tag <tag-value>
其中:
-
--image
是应用的镜像的 URI。 --tag
是一个可选标志,可用于向利用服务创建的初始修订版本添加标签。示例命令
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
输出示例
Creating service 'event-display' in namespace 'default': 0.271s The Route is still working to reflect the latest desired specification. 0.580s Configuration "event-display" is waiting for a Revision to become ready. 3.857s ... 3.861s Ingress has not yet been reconciled. 4.270s Ready to serve. Service 'event-display' created with latest revision 'event-display-bxshg-1' and URL: http://event-display-default.apps-crc.testing
-
1.1.2. 使用 YAML 创建无服务器应用程序
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述应用程序,并以可重复的方式描述应用程序。要使用 YAML 创建无服务器应用程序,您必须创建一个 YAML 文件来定义 Knative Service
对象,然后使用 oc apply
来应用它。
创建服务并部署应用程序后,Knative 会为应用程序的这个版本创建一个不可变的修订版本。Knative 还将执行网络操作,为您的应用程序创建路由、入口、服务和负载平衡器,并根据流量自动扩展或缩减 pod。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
安装 OpenShift CLI (
oc
) 。
流程
创建包含以下示例代码的 YAML 文件:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-delivery namespace: default spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest env: - name: RESPONSE value: "Hello Serverless!"
导航到包含 YAML 文件的目录,并通过应用 YAML 文件来部署应用程序:
$ oc apply -f <filename>
如果您不想在 OpenShift Container Platform web 控制台中切换到 Developer 视角,或使用 Knative (kn
) CLI 或 YAML 文件,您可以使用 OpenShift Container Platform Web 控制台的 Administator 视角创建 Knative 组件。
1.1.3. 使用管理员视角创建无服务器应用程序
无服务器应用程序已创建并部署为 Kubernetes 服务,由路由和配置定义,并包含在 YAML 文件中。要使用 OpenShift Serverless 部署无服务器应用程序,您必须创建一个 Knative Service
对象。
Knative Service
对象 YAML 文件示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello 1 namespace: default 2 spec: template: spec: containers: - image: docker.io/openshift/hello-openshift 3 env: - name: RESPONSE 4 value: "Hello Serverless!"
创建服务并部署应用程序后,Knative 会为应用程序的这个版本创建一个不可变的修订版本。Knative 还将执行网络操作,为您的应用程序创建路由、入口、服务和负载平衡器,并根据流量自动扩展或缩减 pod。
先决条件
要使用 管理员 视角创建无服务器应用程序,请确定您已完成了以下步骤。
- 安装了 OpenShift Serverless Operator 和 Knative Serving。
- 您已登录到 Web 控制台,且处于 Administrator 视角。
流程
-
进入 Serverless
Serving 页面。 - 在 Create 列表中,选择 Service。
- 手动输入 YAML 或 JSON 定义,或者将文件拖放到编辑器中。
- 点 Create。
1.1.4. 使用离线模式创建服务
您可以在离线模式下执行 kn service
命令,以便集群中不会发生任何更改,而是在本地机器上创建服务描述符文件。创建描述符文件后,您可以在向集群传播更改前修改该文件。
Knative CLI 的离线模式只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。
流程
在离线模式下,创建一个本地 Knative 服务描述符文件:
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace test
输出示例
Service 'event-display' created in namespace 'test'.
--target ./
标志启用脱机模式,并将./
指定为用于存储新目录树的目录。如果您没有指定现有目录,但使用文件名,如
--target my-service.yaml
,则不会创建目录树。相反,当前目录中只创建服务描述符my-service.yaml
文件。文件名可以具有
.yaml
、.yml
或.json
扩展名。选择.json
以 JSON 格式创建服务描述符文件。namespace test
选项将新服务放在test
命名空间中。如果不使用
--namespace
,且您登录到 OpenShift Container Platform 集群,则会在当前命名空间中创建描述符文件。否则,描述符文件会在default
命名空间中创建。
检查创建的目录结构:
$ tree ./
输出示例
./ └── test └── ksvc └── event-display.yaml 2 directories, 1 file
-
使用
--target
指定的当前./
目录包含新的test/
目录,它在指定的命名空间后命名。 -
test/
目录包含ksvc
,它在资源类型后命名。 -
ksvc
目录包含描述符文件event-display.yaml
,它根据指定的服务名称命名。
-
使用
检查生成的服务描述符文件:
$ cat test/ksvc/event-display.yaml
输出示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: creationTimestamp: null name: event-display namespace: test spec: template: metadata: annotations: client.knative.dev/user-image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest creationTimestamp: null spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest name: "" resources: {} status: {}
列出新服务的信息:
$ kn service describe event-display --target ./ --namespace test
输出示例
Name: event-display Namespace: test Age: URL: Revisions: Conditions: OK TYPE AGE REASON
--target ./
选项指定包含命名空间子目录的目录结构的根目录。另外,您可以使用
--target
选项直接指定 YAML 或 JSON 文件名。可接受的文件扩展包括.yaml
、.yml
和.json
。--namespace
选项指定命名空间,与kn
通信包含所需服务描述符文件的子目录。如果不使用
--namespace
,并且您登录到 OpenShift Container Platform 集群,kn
会在以当前命名空间命名的子目录中搜索该服务。否则,kn
在default/
子目录中搜索。
使用服务描述符文件在集群中创建服务:
$ kn service create -f test/ksvc/event-display.yaml
输出示例
Creating service 'event-display' in namespace 'test': 0.058s The Route is still working to reflect the latest desired specification. 0.098s ... 0.168s Configuration "event-display" is waiting for a Revision to become ready. 23.377s ... 23.419s Ingress has not yet been reconciled. 23.534s Waiting for load balancer to be ready 23.723s Ready to serve. Service 'event-display' created to latest revision 'event-display-00001' is available at URL: http://event-display-test.apps.example.com