跳到内容

使用 Knative Operator 安装

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

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

运算符 服务 事件
v1.16 v1.16.0
v1.15.0、v1.15.1 和 v1.15.2
v1.14.0、v1.14.1 和 v1.14.2
v1.13.0、v1.13.1 和 v1.13.2
v1.16.0
v1.15.0、v1.15.1、v1.15.2 和 v1.15.3
v1.14.0、v1.14.1、v1.14.2、v1.14.3、v1.14.4、v1.14.5、v1.14.6 和 v1.14.7
v1.13.0、v1.13.1、v1.13.2、v1.13.3、v1.13.4、v1.13.5、v1.13.6、v1.13.7 和 v1.13.8

先决条件

在安装 Knative 之前,您必须满足以下先决条件。

  • **出于原型设计目的**,Knative 可以在大多数 Kubernetes 本地部署上运行。例如,您可以使用具有 3 个 CPU 和 4 GB 内存的本地单节点集群。

    小费

    您可以使用 Knative 快速入门插件 为开发目的安装本地 Knative 发行版。

  • **出于生产目的**,建议您

    • 如果您集群中只有一个节点,您至少需要 6 个 CPU、6 GB 内存和 30 GB 磁盘存储空间。
    • 如果您集群中有多个节点,则每个节点至少需要 2 个 CPU、4 GB 内存和 20 GB 磁盘存储空间。
    • 您有一个使用 Kubernetes v1.28 或更高版本的集群。
    • 您已安装 kubectl CLI
    • 您的 Kubernetes 集群必须能够访问互联网,因为 Kubernetes 需要能够获取映像。要从私有注册表拉取,请参阅 从私有容器注册表部署映像

警告

提供的系统要求仅为建议。您的安装要求可能会有所不同,具体取决于您是否使用可选组件(例如网络层)。

验证映像签名

从 1.9 开始的 Knative 版本使用 cosign 进行签名。

  1. 安装 cosignjq

  2. 从清单中提取映像并验证签名。

curl -sSL https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-core.yaml \
  | grep 'gcr.io/' | awk '{print $2}' | sort | uniq \
  | xargs -n 1 \
    cosign verify -o text \
      --certificate-identity=signer@knative-releases.iam.gserviceaccount.com \
      --certificate-oidc-issuer=https://127.0.0.1

注意

Knative 映像在 KEYLESS 模式下签名。要详细了解无密钥签名,请参阅 无密钥签名 我们版本签名的身份(主体)是 signer@knative-releases.iam.gserviceaccount.com,发行者是 https://127.0.0.1

安装 Knative Operator

在安装 Knative Serving 和 Eventing 组件之前,请先安装 Knative Operator。

警告

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.16.0/operator.yaml

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

验证您的 Knative Operator 安装

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

    kubectl config set-context --current --namespace=default
    
  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 中未指定 Ingress,则 Istio 是默认的网络层。如果您选择使用默认的 Istio 网络层,则必须在集群上安装 Istio。因此,您可能会发现将 Kourier 配置为您的网络层更容易。

单击以下每个选项卡以查看如何使用不同的 Ingress 配置 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/net-contour/releases/download/knative-v1.16.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
    domain-mapping         1/1     1            1           12s
    domainmapping-webhook  1/1     1            1           12s
    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 以避免需要使用主机标头运行 curl 命令。

以下选项卡将展开以显示配置 DNS 的说明。请按照您选择的 DNS 的步骤操作。

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

kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.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 应用程序,并且无法使用“魔术 DNS (sslip.io)”或“真实 DNS”方法,则可以使用临时方法。这对于那些希望在不更改其 DNS 配置的情况下评估 Knative(如“真实 DNS”方法),或者由于使用(例如)本地 minikube 或 IPv6 集群而无法使用“魔术 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 的清单可供 Operator 访问,您就可以安装它们。

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

覆盖模式

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

例如,如果您只想安装定制的 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 的顺序至关重要。将您想要首先应用的清单放在最上面。

我们强烈建议您通过利用 spec.versionspec.manifests 来指定定制的 Knative Eventing 的版本和有效链接。不要跳过任何字段。

追加模式

您可以使用追加模式将您定制的清单添加到默认清单中。

例如,如果您只想自定义一些资源,但仍然想要安装默认的 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 的默认清单,然后根据它们安装您定制的清单。

使用事件源安装 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.16.0/operator.yaml

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

ko delete -f config/

下一步

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,用于该目的。了解更多。