使用 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 进行签名。
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 是最后一个支持具有 v1alpha1
和 v1beta1
的 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 安装¶
-
由于 Operator 安装到
default
命名空间,因此请确保通过运行以下命令将当前命名空间设置为default
。kubectl config set-context --current --namespace=default
-
通过运行以下命令检查 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 创建自定义资源。
-
将以下 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 默认使用最新的可用版本。 -
通过运行以下命令应用 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一步中创建的文件的名称。
安装网络层¶
Knative Operator 可以使用不同的网络层选项配置 Knative Serving 组件。如果 Knative Serving CR 中未指定 Ingress,则 Istio 是默认的网络层。如果您选择使用默认的 Istio 网络层,则必须在集群上安装 Istio。因此,您可能会发现将 Kourier 配置为您的网络层更容易。
单击以下每个选项卡以查看如何使用不同的 Ingress 配置 Knative Serving。
以下步骤将安装 Kourier 并启用其 Knative 集成。
-
要将 Knative Serving 配置为使用 Kourier,请将
spec.ingress.kourier
和spec.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"
-
通过运行以下命令应用 Serving CR 的 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您的 Serving CR 文件的名称。 -
通过运行以下命令获取外部 IP 或 CNAME。
kubectl --namespace knative-serving get service kourier
保存此信息以备日后配置 DNS。
以下步骤将安装 Istio 以启用其 Knative 集成。
-
如果您在默认的
istio-system
以外的命名空间下安装了 Istio-
将
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 的命名空间。
-
通过运行以下命令应用 Serving CR 的 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您的 Serving CR 文件的名称。
-
-
通过运行以下命令获取外部 IP 或 CNAME。
kubectl get svc istio-ingressgateway -n <istio-namespace>
保存此信息以备日后配置 DNS。
以下步骤将安装 Contour 并启用其 Knative 集成。
-
安装配置正确的 Contour
kubectl apply --filename https://github.com/knative/net-contour/releases/download/knative-v1.16.0/contour.yaml
-
要将 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"
-
通过运行以下命令应用 Serving CR 的 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您的 Serving CR 文件的名称。 -
通过运行以下命令获取外部 IP 或 CNAME。
kubectl --namespace contour-external get service envoy
保存此信息以备日后配置 DNS。
验证 Knative Serving 部署¶
-
监控 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
-
检查 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
访问您的应用程序,请执行以下操作:
-
配置 Knative 使用一个从集群外部可访问的域名。
kubectl patch configmap/config-domain \ --namespace knative-serving \ --type merge \ --patch '{"data":{"example.com":""}}'
-
启动应用程序后,获取应用程序的 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
-
指示
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
示例应用程序,使用默认配置,输出为:请参考“真实 DNS”方法以获取永久解决方案。Hello Go Sample v1!
安装 Knative Eventing¶
要安装 Knative Eventing,您必须应用自定义资源 (CR)。可选地,您可以使用不同的事件源安装 Knative Eventing 组件。
创建 Knative Eventing 自定义资源¶
要为 Operator 中最新的可用 Knative Eventing 创建自定义资源,请执行以下操作:
-
将以下 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 默认使用最新的可用版本。 -
通过运行以下命令应用 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.version
和 spec.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 作为事件源,请执行以下操作:
-
将
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
-
通过运行以下命令应用 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一步中创建的文件的名称。
要配置 Knative Eventing 以安装 GitHub 作为事件源,请执行以下操作:
-
将
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
-
通过运行以下命令应用 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一步中创建的文件的名称。
要配置 Knative Eventing 以安装 GitLab 作为事件源,请执行以下操作:
-
将
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
-
通过运行以下命令应用 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一步中创建的文件的名称。
要配置 Knative Eventing 以安装 Kafka 作为事件源,请执行以下操作:
-
将
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
-
通过运行以下命令应用 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一步中创建的文件的名称。
要配置 Knative Eventing 以安装 RabbitMQ 作为事件源,请执行以下操作:
-
将
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
-
通过运行以下命令应用 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一步中创建的文件的名称。
要配置 Knative Eventing 以安装 Redis 作为事件源,请执行以下操作:
-
将
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
-
通过运行以下命令应用 YAML 文件。
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一步中创建的文件的名称。
验证 Knative Eventing 部署¶
-
监控 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
-
检查 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/