使用 YAML 文件安装 Knative Serving¶
本主题介绍如何使用 kubectl
CLI 通过应用 YAML 文件来安装 Knative Serving。
先决条件¶
在安装 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 Serving 组件¶
要安装 Knative Serving 组件
-
通过运行以下命令安装所需的自定义资源
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-crds.yaml
-
通过运行以下命令安装 Knative Serving 的核心组件
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-core.yaml
信息
有关 Knative Serving 中 YAML 文件的信息,请参见 Knative Serving 安装文件。
安装网络层¶
以下选项卡扩展以显示有关安装网络层的说明。请按照您选择的网络层的步骤操作
注意
IBM Z 和 IBM Power 平台仅支持 Kourier 网络插件。请按照以下步骤安装 Kourier。安装完成后,根据 RedHat Maistra 对 envoy 镜像进行修补,如 此链接 中所述。
以下命令将安装 Kourier 并启用其 Knative 集成。
-
通过运行以下命令安装 Knative Kourier 控制器
kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.16.0/kourier.yaml
-
通过运行以下命令配置 Knative Serving 默认使用 Kourier
kubectl patch configmap/config-network \ --namespace knative-serving \ --type merge \ --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'
-
通过运行以下命令获取外部 IP 地址或 CNAME
kubectl --namespace kourier-system get service kourier
提示
将此保存以在以下 配置 DNS 部分中使用。
以下命令将安装 Istio 并启用其 Knative 集成。
-
请按照 高级 Istio 安装 说明或通过运行以下命令安装配置正确的 Istio
kubectl apply -l knative.dev/crd-install=true -f https://github.com/knative/net-istio/releases/download/knative-v1.16.0/istio.yaml kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.16.0/istio.yaml
-
通过运行以下命令安装 Knative Istio 控制器
kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.16.0/net-istio.yaml
-
通过运行以下命令获取外部 IP 地址或 CNAME
kubectl --namespace istio-system get service istio-ingressgateway
提示
将此保存以在以下 配置 DNS 部分中使用。
以下命令将安装 Contour 并启用其 Knative 集成。
-
通过运行以下命令安装配置正确的 Contour
kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.0/contour.yaml
-
通过运行以下命令安装 Knative Contour 控制器
kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.0/net-contour.yaml
-
通过运行以下命令配置 Knative Serving 默认使用 Contour
kubectl patch configmap/config-network \ --namespace knative-serving \ --type merge \ --patch '{"data":{"ingress-class":"contour.ingress.networking.knative.dev"}}'
-
通过运行以下命令获取外部 IP 地址或 CNAME
kubectl --namespace contour-external get service envoy
提示
将此保存以在以下 配置 DNS 部分中使用。
验证安装¶
成功
监控 Knative 组件,直到所有组件的 STATUS
均显示为 Running
或 Completed
。您可以通过运行以下命令并检查输出内容来实现
kubectl get pods -n knative-serving
示例输出
NAME READY STATUS RESTARTS AGE
3scale-kourier-control-54cc54cc58-mmdgq 1/1 Running 0 81s
activator-67656dcbbb-8mftq 1/1 Running 0 97s
autoscaler-df6856b64-5h4lc 1/1 Running 0 97s
controller-788796f49d-4x6pm 1/1 Running 0 97s
domain-mapping-65f58c79dc-9cw6d 1/1 Running 0 97s
domainmapping-webhook-cc646465c-jnwbz 1/1 Running 0 97s
webhook-859796bc7-8n5g2 1/1 Running 0 96s
配置 DNS¶
您可以配置 DNS 以避免需要使用主机头运行 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.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 提供商后,指示 Knative 使用该域
# Replace knative.example.com with your domain suffix kubectl patch configmap/config-domain \ --namespace knative-serving \ --type merge \ --patch '{"data":{"knative.example.com":""}}'
如果您使用 curl
访问 示例应用程序 或您自己的 Knative 应用程序,并且无法使用“Magic DNS (sslip.io)”或“真实 DNS”方法,则存在一种临时方法。这对于希望在不更改 DNS 配置的情况下评估 Knative 的用户很有用,如“真实 DNS”方法,或者由于使用 minikube 在本地运行或使用 IPv6 集群等原因而无法使用“Magic 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!
安装可选的 Serving 扩展¶
以下选项卡扩展以显示有关安装每个 Serving 扩展的说明。
Knative 还支持使用 Kubernetes 水平 Pod 自动缩放器 (HPA) 来驱动自动缩放决策。
-
通过运行以下命令安装支持 HPA 类自动缩放所需的组件
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-hpa.yaml
Knative 通过 cert-manager 支持加密功能。有关更多信息,请参阅 Serving 加密 中的文档。