使用 YAML 文件安装 Knative Serving¶
本主题介绍如何通过应用 YAML 文件来安装 Knative Serving。此安装需要以下先决条件
- CLI 工具已安装。
- 足够的硬件
一个节点至少需要 6 个 CPU、6 GB 内存和 30 GB 磁盘存储。
多个节点需要 2 个 CPU、4 GB 内存和 20 GB 磁盘存储。
- 现有 Kubernetes 正在运行受支持的版本。
有关其他 Knative 安装的信息,请参阅安装路线图。
安装 Knative Serving 组件¶
安装 Knative Serving 组件
-
通过运行命令安装所需的自定义资源
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.21.0/serving-crds.yaml -
通过运行命令安装 Knative Serving 的核心组件
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.21.0/serving-core.yaml信息
有关 Knative Serving 中 YAML 文件的信息,请参阅 Knative Serving 安装文件。
安装网络层¶
展开以下选项卡以获取有关安装网络层的说明。有关网络层选项、架构和配置的概述,请参阅 配置 Knative 网络页面上的 入口提供程序。
使用以下步骤安装 Kourier 并将其设置为入口控制器。
-
安装 Knative Kourier 控制器
kubectl apply -f https://github.com/knative-extensions/net-kourier/releases/download/knative-v1.21.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 地址 (FQDN) 以便后续配置 DNS
kubectl --namespace kourier-system get service kourier
使用以下步骤安装 Contour 并启用它,将其设置为入口控制器。
-
安装 Knative Contour 配置
kubectl apply -f https://github.com/knative-extensions/net-contour/releases/download/knative-v1.21.0/contour.yaml -
安装 Knative Contour 集成控制器
kubectl apply -f https://github.com/knative-extensions/net-contour/releases/download/knative-v1.21.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 地址 (FQDN) 以便后续配置 DNS
kubectl --namespace contour-external get service envoy
使用以下步骤安装 Istio 并将其设置为入口控制器。
-
安装配置正确的 Istio
kubectl apply -l knative.dev/crd-install=true -f https://github.com/knative-extensions/net-istio/releases/download/knative-v1.21.0/istio.yaml kubectl apply -f https://github.com/knative-extensions/net-istio/releases/download/knative-v1.21.0/istio.yaml -
安装 Knative Istio 控制器
kubectl apply -f https://github.com/knative-extensions/net-istio/releases/download/knative-v1.21.0/net-istio.yaml -
配置
config-networkConfigMap 以使用 Istiokubectl patch configmap/config-network \ --namespace knative-serving \ --type merge \ --patch '{"data":{"ingress-class":"istio.ingress.networking.knative.dev"}}' -
获取外部 IP 地址 (FQDN) 以便后续配置 DNS
kubectl --namespace istio-system get service istio-ingressgateway
此组件处于 Beta 版。有关最新信息,包括支持的实现,请参阅 Knative net-gateway-api。
使用以下步骤安装和配置 Knative Gateway API 控制器。请注意,您需要在集群中安装 Gateway API 实现。Knative 团队目前正在测试 Istio、Contour 和 Envoy-Gateway 的 Gateway API 实现。
-
安装 Knative Gateway API
kubectl apply -f https://github.com/knative-extensions/net-gateway-api/releases/download/knative-v1.21.0/net-gateway-api.yaml -
为外部(“南北”)和本地(“东西”)Knative 流量配置 Gateway 资源。如果您不需要为本地流量(或 私有 Knative 服务)设置单独的路由,则可以将外部 Gateway 用于两者。
Knative 根据 Kubernetes 命名空间、Gateway 的名称以及底层 DNS 名称(例如与 Gateway 对应的 Kubernetes 服务 DNS 名称)来验证流量设置。
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: config-gateway namespace: knative-serving data: external-gateways: | - name: knative-ingress-gateway # Name of the external Gateway resource namespace: knative-serving # Namespace where the Gateway is deployed service: knative-ingress-service.knative-serving.svc.cluster.local # backing Service FQDN local-gateways: | - name: knative-local-gateway # Name of the local Gateway resource namespace: knative-serving # Namespace where the Gateway is deployed service: knative-local-service.knative-serving.svc.cluster.local # backing Service FQDN EOF -
配置 Knative Serving 以使用 Knative Gateway API 入口类
kubectl patch configmap/config-network \ --namespace knative-serving \ --type merge \ --patch '{"data":{"ingress-class":"gateway-api.ingress.networking.knative.dev"}}' -
验证
config-gatewayConfigMapkubectl describe configmaps config-gateway -n knative-serving检查
externals-gateways和local-gateways键的值。 -
获取外部 IP 地址 (FQDN) 以配置 DNS 记录
kubectl get gateway --all-namespaces查找外部 Gateway (
knative-ingress-gateway) 以获取 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
webhook-859796bc7-8n5g2 1/1 Running 0 96s
配置 DNS¶
您可以配置 DNS 以避免在 curl 命令中指定主机标头,或使用 Web 浏览器访问内容。
以下选项卡显示了配置 DNS 的说明。请按照您选择的 DNS 方法进行操作。
Knative 提供了一个名为 default-domain 的 Kubernetes Job,用于配置 Knative Serving 使用 sslip.io 作为默认 DNS 后缀。
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.21.0/serving-default-domain.yaml
此配置仅在集群 LoadBalancer 服务公开 IPv4 地址或主机名时有效。它不适用于 IPv6 集群或 minikube 等本地设置,除非 minikube tunnel 正在运行。
要为 Knative 配置 DNS,请从设置网络中获取外部 IP 或 CNAME,并使用您的 DNS 提供商进行配置,如下所示
-
如果网络层生成了外部 IP 地址,则为该域配置通配符
A记录。在以下示例中,knative.example.com是集群的域后缀。*.knative.example.com == A 35.233.41.212 -
如果网络层生成了 CNAME,则为该域配置 CNAME 记录。在以下示例中,
knative.example.com是集群的域后缀。*.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)”或“Real DNS”方法,则可以在不更改 DNS 配置的情况下评估 Knative。如果您需要在本地使用 minikube 或 IPv6 集群,则可能需要此功能。
要使用此方法使用 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示例应用程序中,使用默认配置,输出为Hello Go Sample v1!有关永久解决方案,请参阅“真实 DNS”方法。
安装可选的 Serving 扩展¶
以下选项卡展开以显示有关安装每个 Serving 扩展的说明。
Knative 还支持使用 Kubernetes Horizontal Pod Autoscaler (HPA) 来驱动自动伸缩决策。
-
通过运行命令安装支持 HPA 类自动伸缩所需的组件
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.21.0/serving-hpa.yaml
Knative 通过 cert-manager 支持加密功能。有关更多信息,请参阅 Serving 加密中的文档。