跳到内容

使用 Knative Operator 安装

Knative 提供了 Kubernetes Operator 来安装、配置和管理 Knative。您可以在集群上安装 Serving 组件、Eventing 组件或两者。

本主题描述了如何使用 manifests 和其他资源安装 Knative Operator 以及 Serving 和 Eventing 组件。要使用 CLI 安装 Operator 和组件,请参阅 Knative Operator CLI

此安装需要满足以下先决条件

一个节点至少需要 6 个 CPU、6 GB 内存和 30 GB 磁盘存储。

多个节点需要 2 个 CPU、4 GB 内存和 20 GB 磁盘存储。

  • 现有 Kubernetes 正在运行受支持的版本。

有关其他 Knative 安装的信息,请参阅安装路线图

安装 Knative Operator

在安装 Knative Serving 和 Eventing 组件之前,请首先从提供的 K8S Manifests 或通过 Helm 安装 Knative Operator。

安装 K8S Manifests(选项 1)

警告

Knative Operator 1.5 是最后一个同时支持 v1alpha1v1beta1 CRD 的版本。如果您正在将现有 Operator 安装从 v1.2 或更早版本升级到 v1.3 或更高版本,请在安装当前版本之前运行以下命令将现有自定义资源升级到 v1beta1

kubectl create -f https://github.com/knative/operator/releases/download/knative-v1.5.1/operator-post-install.yaml

要安装最新的稳定 Operator 版本,请运行该命令

kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.20.0/operator.yaml

您可以在发布页面上找到有关 Knative Operator 发布版本的信息。

通过 Helm 安装(选项 2)

您可以使用我们的 helm chart 安装 Knative Operator

helm repo add knative-operator https://knative.github.io/operator
helm install knative-operator --create-namespace --namespace knative-operator knative-operator/knative-operator

要查看可用值,请运行

helm show values -n knative-operator knative-operator/knative-operator

验证 Knative Operator 安装

  1. 因为 Operator 安装到 knative-operator 命名空间,请通过运行以下命令确保将当前命名空间设置为 default

    kubectl config set-context --current --namespace=knative-operator
    
  2. 通过运行以下命令检查 Operator 部署状态

    kubectl get deployment knative-operator
    

    如果 Operator 安装正确,部署将显示 Ready 状态

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    knative-operator   1/1     1            1           19h
    

跟踪日志

要跟踪 Operator 的日志,请运行该命令

kubectl logs -f deploy/knative-operator

安装 Knative Serving

要安装 Knative Serving,您必须创建一个自定义资源 (CR),向 CR 添加网络层,并配置 DNS。

创建 Knative Serving 自定义资源

要在 Operator 中为最新可用的 Knative Serving 创建自定义资源

  1. 将以下 YAML 复制到一个文件中

    apiVersion: v1
    kind: Namespace
    metadata:
      name: knative-serving
    ---
    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    

    注意

    当您不使用 spec.version 字段指定版本时,Operator 默认为最新可用版本。

  2. 通过运行命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一步中创建的文件的名称。

安装网络层

Knative Operator 可以使用不同的网络层选项配置 Knative Serving 组件。如果 Knative Serving CR 中未指定入口,Istio 是默认网络层。如果您选择使用默认的 Istio 网络层,则必须在集群上安装 Istio。因此,您可能会发现将 Kourier 配置为网络层更容易。

点击以下每个选项卡,查看如何使用不同的入口配置 Knative Serving

以下步骤安装 Kourier 并启用其 Knative 集成

  1. 要将 Knative Serving 配置为使用 Kourier,请将 spec.ingress.kourierspec.config.network 添加到 Serving CR YAML 文件中,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      # ...
      ingress:
        kourier:
          enabled: true
      config:
        network:
          ingress-class: "kourier.ingress.networking.knative.dev"
    
  2. 通过运行以下命令应用 Serving CR 的 YAML 文件

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是 Serving CR 文件的名称。

  3. 通过运行以下命令获取外部 IP 或 CNAME

    kubectl --namespace knative-serving get service kourier
    

    保存此信息以供以后配置 DNS。

以下步骤安装 Istio 以启用其 Knative 集成

  1. 安装 Istio.

  2. 如果您在非默认的 istio-system 命名空间下安装了 Istio

    1. spec.config.istio 添加到您的 Serving CR YAML 文件中,如下所示

      apiVersion: operator.knative.dev/v1beta1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
      spec:
        # ...
        config:
          istio:
            local-gateways: |
              - name: knative-local-gateway
                namespace: <local-gateway-namespace>
                service: knative-local-gateway.<istio-namespace>.svc.cluster.local
      

      其中

      • <local-gateway-namespace> 是本地网关命名空间,与 Knative Serving 命名空间 knative-serving 相同。
      • <istio-namespace> 是安装 Istio 的命名空间。
    2. 通过运行以下命令应用 Serving CR 的 YAML 文件

      kubectl apply -f <filename>.yaml
      

      其中 <filename> 是 Serving CR 文件的名称。

  3. 通过运行以下命令获取外部 IP 或 CNAME

    kubectl get svc istio-ingressgateway -n <istio-namespace>
    

    保存此信息以供以后配置 DNS。

以下步骤安装 Contour 并启用其 Knative 集成

  1. 安装正确配置的 Contour

    kubectl apply --filename https://github.com/knative-extensions/net-contour/releases/download/knative-v1.20.0/contour.yaml
    
  2. 要将 Knative Serving 配置为使用 Contour,请将 spec.ingress.contour spec.config.network 添加到您的 Serving CR YAML 文件中,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      # ...
      ingress:
        contour:
          enabled: true
      config:
        network:
          ingress-class: "contour.ingress.networking.knative.dev"
    
  3. 通过运行以下命令应用 Serving CR 的 YAML 文件

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是 Serving CR 文件的名称。

  4. 通过运行以下命令获取外部 IP 或 CNAME

    kubectl --namespace contour-external get service envoy
    

    保存此信息以供以后配置 DNS。

验证 Knative Serving 部署

  1. 监控 Knative 部署

    kubectl get deployment -n knative-serving
    

    如果 Knative Serving 已成功部署,则 Knative Serving 的所有部署都将显示 READY 状态。这是一个示例输出

    NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
    activator              1/1     1            1           18s
    autoscaler             1/1     1            1           18s
    autoscaler-hpa         1/1     1            1           14s
    controller             1/1     1            1           18s
    webhook                1/1     1            1           17s
    
  2. 检查 Knative Serving 自定义资源的状态

    kubectl get KnativeServing knative-serving -n knative-serving
    

    如果 Knative Serving 已成功安装,您应该会看到

    NAME              VERSION             READY   REASON
    knative-serving   <version number>    True
    

配置 DNS

您可以配置 DNS 以避免运行带有 host 头的 curl 命令。

以下选项卡展开以显示配置 DNS 的说明。按照您选择的 DNS 过程进行操作

Knative 提供了一个名为 default-domain 的 Kubernetes Job,用于配置 Knative Serving 使用 sslip.io 作为默认 DNS 后缀。

kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.20.0/serving-default-domain.yaml

警告

这仅在集群 LoadBalancer 服务暴露 IPv4 地址或主机名时才有效,因此它不适用于 IPv6 集群或像 minikube 这样的本地设置,除非正在运行 minikube tunnel

在这些情况下,请参阅“真实 DNS”或“无 DNS”选项卡。

要为 Knative 配置 DNS,请从设置网络中获取外部 IP 或 CNAME,并使用您的 DNS 提供商进行配置,如下所示

  • 如果网络层生成了外部 IP 地址,则为域配置通配符 A 记录

    # Here knative.example.com is the domain suffix for your cluster
    *.knative.example.com == A 35.233.41.212
    
  • 如果网络层生成了 CNAME,则为域配置 CNAME 记录

    # Here knative.example.com is the domain suffix for your cluster
    *.knative.example.com == CNAME a317a278525d111e89f272a164fd35fb-1510370581.eu-central-1.elb.amazonaws.com
    
  • 一旦您的 DNS 提供商已配置,请将 spec.config.domain 添加到您现有的 Serving CR 中,然后应用它

    # Replace knative.example.com with your domain suffix
    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      ...
      config:
        domain:
          "knative.example.com": ""
      ...
    

如果您使用 curl 访问示例应用程序或您自己的 Knative 应用程序,并且无法使用“Magic DNS (sslip.io)”或“真实 DNS”方法,则有一种临时方法。这对于那些希望在不更改其 DNS 配置的情况下评估 Knative 的用户(如“真实 DNS”方法所述),或者由于使用本地 minikube 或 IPv6 集群等原因而无法使用“Magic DNS”方法的用户非常有用。

要使用此方法使用 curl 访问您的应用程序

  1. 配置 Knative 使用集群外部可访问的域

    kubectl patch configmap/config-domain \
          --namespace knative-serving \
          --type merge \
          --patch '{"data":{"example.com":""}}'
    

  2. 启动应用程序后,获取应用程序的 URL

    kubectl get ksvc
    
    输出应类似于
    NAME            URL                                        LATESTCREATED         LATESTREADY           READY   REASON
    helloworld-go   http://helloworld-go.default.example.com   helloworld-go-vqjlf   helloworld-go-vqjlf   True
    

  3. 指示 curl 连接到第 3 节中提到的网络层定义的外部 IP 或 CNAME,并使用 -H "Host:" 命令行选项指定 Knative 应用程序的主机名。例如,如果网络层将您的外部 IP 和端口定义为 http://192.168.39.228:32198,并且您希望访问前面提到的 helloworld-go 应用程序,请使用

    curl -H "Host: helloworld-go.default.example.com" http://192.168.39.228:32198
    
    在提供的 helloworld-go 示例应用程序中,使用默认配置,输出为
    Hello Go Sample v1!
    
    有关永久解决方案,请参阅“真实 DNS”方法。

安装 Knative Eventing

要安装 Knative Eventing,您必须应用自定义资源 (CR)。您可以选择安装带有不同事件源的 Knative Eventing 组件。

创建 Knative Eventing 自定义资源

要在 Operator 中为最新可用的 Knative Eventing 创建自定义资源

  1. 将以下 YAML 复制到一个文件中

    apiVersion: v1
    kind: Namespace
    metadata:
      name: knative-eventing
    ---
    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    

    注意

    当您不使用 spec.version 字段指定版本时,Operator 默认为最新可用版本。

  2. 通过运行命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    

其中 <filename> 是您在上一步中创建的文件的名称。

安装特定版本的 Eventing

集群管理员可以使用 spec.version 字段安装特定版本的 Knative Eventing。例如,如果您想安装 Knative Eventing v1.7,您可以应用以下 KnativeEventing CR

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  version: "1.7"

您还可以运行以下命令进行等效更改

kn operator install --component eventing -v 1.7 -n knative-eventing

如果未指定 spec.version,Knative Operator 将安装最新可用的 Knative Eventing 版本。如果用户指定了无效或不可用的版本,Knative Operator 将不执行任何操作。Knative Operator 始终包含最新的 3 个次要版本。

如果 Knative Eventing 已由 Operator 管理,更新 KnativeEventing CR 中的 spec.version 字段可以升级或降级 Knative Eventing 版本,而无需修改 Operator。

请注意,Knative Operator 每次只允许升级或降级一个次要版本。例如,如果当前的 Knative Eventing 部署版本为 1.4,则必须先升级到 1.5,然后才能升级到 1.6。

安装自定义 Knative Eventing

Operator 提供了灵活性,您可以根据自己的要求安装自定义的 Knative Eventing。只要自定义 Knative Eventing 的 manifests 对 Operator 可访问,您就可以安装它们。

有两种模式可用于安装自定义 manifests:覆盖模式追加模式。在覆盖模式下,在 .spec.manifests 下,您必须定义 Knative Eventing 安装所需的所有 manifests,因为 Operator 将不再安装任何默认 manifests。在追加模式下,在 .spec.additionalManifests 下,您只需定义您的自定义 manifests。自定义 manifests 在应用默认 manifests 之后安装。

覆盖模式

当您想自定义所有要安装的 Knative Eventing manifests 时,请使用覆盖模式。

例如,如果您只想安装自定义的 Knative Eventing,您可以创建并应用以下 Eventing CR

apiVersion: v1
kind: Namespace
metadata:
  name: knative-eventing
---
apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  version: $spec_version
  manifests:
  - URL: https://my-eventing/eventing.yaml

此示例安装版本为 $spec_version 的自定义 Knative Eventing,可在 https://my-eventing/eventing.yaml 处获取。

注意

您可以将自定义的 Knative Eventing 提供在一个或多个链接中,因为 spec.manifests 支持一个链接列表。URL 的顺序至关重要。将您想要首先应用的 manifest 放在最前面。

我们强烈建议您通过利用 spec.versionspec.manifests 来指定自定义 Knative Eventing 的版本和有效链接。请勿跳过任何一个字段。

追加模式

您可以使用追加模式将自定义 manifests 添加到默认 manifests 中。

例如,如果您只想自定义几个资源,但仍然想安装默认的 Knative Eventing,您可以创建并应用以下 Eventing CR

apiVersion: v1
kind: Namespace
metadata:
  name: knative-eventing
---
apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  version: $spec_version
  additionalManifests:
  - URL: https://my-eventing/eventing-custom.yaml

此示例安装默认的 Knative Eventing,并安装您在 https://my-eventing/eventing-custom.yaml 处可用的自定义资源。

Knative Operator 会安装 $spec_version 版本的 Knative Eventing 的默认 manifests,然后在此基础上安装您的自定义 manifests。

安装带有事件源的 Knative Eventing

Knative Operator 可以使用不同的事件源配置 Knative Eventing 组件。单击以下每个选项卡,了解如何使用不同的事件源配置 Knative Eventing

要将 Knative Eventing 配置为安装 Ceph 作为事件源

  1. spec.source.ceph 添加到您的 Eventing CR YAML 文件中,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        ceph:
          enabled: true
    
  2. 通过运行命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一步中创建的文件的名称。

要将 Knative Eventing 配置为安装 GitHub 作为事件源

  1. spec.source.github 添加到您的 Eventing CR YAML 文件中,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        github:
          enabled: true
    
  2. 通过运行命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一步中创建的文件的名称。

要将 Knative Eventing 配置为安装 GitLab 作为事件源

  1. spec.source.gitlab 添加到您的 Eventing CR YAML 文件中,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        gitlab:
          enabled: true
    
  2. 通过运行命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一步中创建的文件的名称。

要将 Knative Eventing 配置为安装 Kafka 作为事件源

  1. spec.source.kafka 添加到您的 Eventing CR YAML 文件中,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        kafka:
          enabled: true
    
  2. 通过运行命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一步中创建的文件的名称。

要将 Knative Eventing 配置为安装 RabbitMQ 作为事件源,

  1. spec.source.rabbitmq 添加到您的 Eventing CR YAML 文件中,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        rabbitmq:
          enabled: true
    
  2. 通过运行命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一步中创建的文件的名称。

要将 Knative Eventing 配置为安装 Redis 作为事件源

  1. spec.source.redis 添加到您的 Eventing CR YAML 文件中,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        redis:
          enabled: true
    
  2. 通过运行命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一步中创建的文件的名称。

验证 Knative Eventing 部署

  1. 监控 Knative 部署

    kubectl get deployment -n knative-eventing
    

    如果 Knative Eventing 已成功部署,则 Knative Eventing 的所有部署都将显示 READY 状态。这是一个示例输出

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    eventing-controller     1/1     1            1           43s
    eventing-webhook        1/1     1            1           42s
    imc-controller          1/1     1            1           39s
    imc-dispatcher          1/1     1            1           38s
    mt-broker-controller    1/1     1            1           36s
    mt-broker-filter        1/1     1            1           37s
    mt-broker-ingress       1/1     1            1           37s
    pingsource-mt-adapter   0/0     0            0           43s
    sugar-controller        1/1     1            1           36s
    
  2. 检查 Knative Eventing 自定义资源的状态

    kubectl get KnativeEventing knative-eventing -n knative-eventing
    

    如果 Knative Eventing 已成功安装,您应该会看到

    NAME               VERSION             READY   REASON
    knative-eventing   <version number>    True
    

卸载 Knative

Knative Operator 会阻止不安全地删除 Knative 资源。即使 Knative Serving 和 Knative Eventing CR 已成功删除,Knative 中的所有 CRD 仍保留在集群中。所有依赖 Knative CRD 的资源仍然可以正常工作。

移除 Knative Serving 组件

要删除 Knative Serving CR,请运行该命令

kubectl delete KnativeServing knative-serving -n knative-serving

移除 Knative Eventing 组件

要删除 Knative Eventing CR,请运行该命令

kubectl delete KnativeEventing knative-eventing -n knative-eventing

移除 Knative Operator:

如果您使用发布页面安装了 Knative,请通过运行以下命令删除 Operator

kubectl delete -f https://github.com/knative/operator/releases/download/knative-v1.20.0/operator.yaml

如果您从源代码安装了 Knative,请在源代码的根目录中,使用以下命令卸载它

ko delete -f config/

支持的版本

下表描述了 Knative Operator 支持的 Serving 和 Eventing 版本

操作符 服务 事件
v1.20 v1.20.0
v1.19.0、v1.19.1、v1.19.2、v1.19.3、v1.19.4、v1.19.5、v1.19.6 和 v1.19.7
v1.18.0、v1.18.1 和 v1.18.2
v1.17.0、v1.17.1 和 v1.17.2
v1.20.0
v1.19.0、v1.19.1、v1.19.2、v1.19.3、v1.19.4、v1.19.5、v1.19.6、v1.19.7 和 v1.19.8
v1.18.0、v1.18.1、v1.18.2、v1.18.3 和 v1.18.4
v1.17.0、v1.17.1、v1.17.2、v1.17.3、v1.17.4、v1.17.5 和 v1.17.6

下一步

我们使用分析和 cookie 来了解网站流量。有关您使用我们网站的信息会与 Google 共享以达到此目的。了解更多。