×

关于 Knative CLI 离线模式

执行kn service命令时,更改会立即传播到集群。但是,作为替代方案,您可以以离线模式执行kn service命令。当您在离线模式下创建服务时,集群上不会发生任何更改,而是在本地机器上创建服务描述符文件。

Knative CLI 的离线模式只是一个技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参见技术预览功能支持范围

创建描述符文件后,您可以手动修改它并将其跟踪在版本控制系统中。您还可以使用描述符文件上的kn service create -fkn service apply -foc apply -f命令将更改传播到集群。

离线模式有多种用途

  • 您可以手动修改描述符文件,然后再使用它来对集群进行更改。

  • 您可以在版本控制系统中本地跟踪服务的描述符文件。这使您能够在目标集群以外的其他地方重用描述符文件,例如在持续集成 (CI) 管道、开发环境或演示中。

  • 您可以检查创建的描述符文件以了解 Knative 服务。特别是,您可以了解传递给kn命令的不同参数如何影响生成的服务器。

离线模式具有其优势:它速度快,并且不需要连接到集群。但是,离线模式缺乏服务器端验证。因此,例如,您无法验证服务名称是否唯一或是否可以提取指定的镜像。

使用离线模式创建服务

您可以以离线模式执行kn service命令,以便集群上不会发生任何更改,而是在本地机器上创建服务描述符文件。创建描述符文件后,您可以在将更改传播到集群之前修改该文件。

Knative CLI 的离线模式只是一个技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参见技术预览功能支持范围

先决条件
  • OpenShift Serverless 运算符和 Knative Serving 已安装在您的集群上。

  • 您已安装 Knative (kn) CLI。

步骤
  1. 在离线模式下,创建本地 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命名空间中创建描述符文件。

  2. 检查创建的目录结构

    $ tree ./
    示例输出
    ./
    └── test
        └── ksvc
            └── showcase.yaml
    
    2 directories, 1 file
    • 使用--target指定的当前./目录包含新的test/目录,该目录以指定的命名空间命名。

    • test/目录包含ksvc目录,该目录以资源类型命名。

    • ksvc 目录包含描述符文件showcase.yaml,其名称根据指定的服务名称命名。

  3. 检查生成的服務描述符文件

    $ 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: {}
  4. 列出有关新服务的信息

    $ 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/子目录中搜索。

  5. 使用服务描述符文件在集群上创建服务

    $ 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