第 1 章 Knative Serving 入门
1.1. 创建无服务器应用程序
无服务器应用程序已创建并部署为 Kubernetes 服务,由路由和配置定义,并包含在 YAML 文件中。要使用 OpenShift Serverless 部署无服务器应用程序,您必须创建一个 Knative Service
对象。
Knative Service
对象 YAML 文件示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: showcase 1 namespace: default 2 spec: template: spec: containers: - image: quay.io/openshift-knative/showcase 3 env: - name: GREET 4 value: Ciao
使用以下任一方法创建一个无服务器应用程序:
从 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 showcase \ --image quay.io/openshift-knative/showcase
输出示例
Creating service 'showcase' in namespace 'default': 0.271s The Route is still working to reflect the latest desired specification. 0.580s Configuration "showcase" is waiting for a Revision to become ready. 3.857s ... 3.861s Ingress has not yet been reconciled. 4.270s Ready to serve. Service 'showcase' created with latest revision 'showcase-00001' and URL: http://showcase-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: showcase namespace: default spec: template: spec: containers: - image: quay.io/openshift-knative/showcase env: - name: GREET value: Bonjour
导航到包含 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: showcase 1 namespace: default 2 spec: template: spec: containers: - image: quay.io/openshift-knative/showcase 3 env: - name: GREET 4 value: Ciao
创建服务并部署应用程序后,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 showcase \ --image quay.io/openshift-knative/showcase \ --target ./ \ --namespace test
输出示例
Service 'showcase' 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 └── showcase.yaml 2 directories, 1 file
-
使用
--target
指定的当前./
目录包含新的test/
目录,它在指定的命名空间后命名。 -
test/
目录包含ksvc
,它在资源类型后命名。 -
ksvc
目录包含描述符文件showcase.yaml
,它根据指定的服务名称命名。
-
使用
检查生成的服务描述符文件:
$ cat test/ksvc/showcase.yaml
输出示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: creationTimestamp: null name: showcase namespace: test spec: template: metadata: annotations: client.knative.dev/user-image: quay.io/openshift-knative/showcase creationTimestamp: null spec: containers: - image: quay.io/openshift-knative/showcase name: "" resources: {} status: {}
列出新服务的信息:
$ kn service describe showcase --target ./ --namespace test
输出示例
Name: showcase 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/showcase.yaml
输出示例
Creating service 'showcase' in namespace 'test': 0.058s The Route is still working to reflect the latest desired specification. 0.098s ... 0.168s Configuration "showcase" 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 'showcase' created to latest revision 'showcase-00001' is available at URL: http://showcase-test.apps.example.com
1.1.5. 验证无服务器应用程序的部署
要验证您的无服务器应用程序是否已成功部署,您必须获取 Knative 创建的应用程序的 URL,然后向该 URL 发送请求并检查其输出。OpenShift Serverless 支持 HTTP 和 HTTPS URL,但 oc get ksvc
的输出始终使用 http://
格式打印 URL。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装
oc
CLI。 - 您已创建了 Knative 服务。
先决条件
-
安装 OpenShift CLI (
oc
) 。
流程
查找应用程序 URL:
$ oc get ksvc <service_name>
输出示例
NAME URL LATESTCREATED LATESTREADY READY REASON showcase http://showcase-default.example.com showcase-00001 showcase-00001 True
向集群发出请求并观察其输出。
HTTP 请求示例(使用 HTTPie 工具)
$ http showcase-default.example.com
HTTPS 请求示例
$ https showcase-default.example.com
输出示例
HTTP/1.1 200 OK Content-Type: application/json Server: Quarkus/2.13.7.Final-redhat-00003 Java/17.0.7 X-Config: {"sink":"http://localhost:31111","greet":"Ciao","delay":0} X-Version: v0.7.0-4-g23d460f content-length: 49 { "artifact": "knative-showcase", "greeting": "Ciao" }
可选。如果您的系统中没有安装 HTTPie 工具,可以使用 curl 工具:
HTTPS 请求示例
$ curl http://showcase-default.example.com
输出示例
{"artifact":"knative-showcase","greeting":"Ciao"}
可选。如果您在证书链中收到与自签名证书相关的错误,您可以在 HTTPie 命令中添加--
verify=no
标志来忽略这个错误:$ https --verify=no showcase-default.example.com
输出示例
HTTP/1.1 200 OK Content-Type: application/json Server: Quarkus/2.13.7.Final-redhat-00003 Java/17.0.7 X-Config: {"sink":"http://localhost:31111","greet":"Ciao","delay":0} X-Version: v0.7.0-4-g23d460f content-length: 49 { "artifact": "knative-showcase", "greeting": "Ciao" }
重要在生产部署中不能使用自签名证书。这个方法仅用于测试目的。
可选。如果 OpenShift Container Platform 集群配置有证书颁发机构 (CA) 签名但尚未为您的系统配置全局证书,您可以使用
curl
命令指定此证书。证书的路径可使用--cacert
标志传递给 curl 命令:$ curl https://showcase-default.example.com --cacert <file>
输出示例
{"artifact":"knative-showcase","greeting":"Ciao"}