跳到内容

使用 YAML 文件安装 Knative Serving

本主题介绍如何通过应用 YAML 文件来安装 Knative Serving。此安装需要以下先决条件

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

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

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

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

安装 Knative Serving 组件

安装 Knative Serving 组件

  1. 通过运行命令安装所需的自定义资源

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.21.0/serving-crds.yaml
    
  2. 通过运行命令安装 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 并将其设置为入口控制器。

  1. 安装 Knative Kourier 控制器

        kubectl apply -f https://github.com/knative-extensions/net-kourier/releases/download/knative-v1.21.0/kourier.yaml
    
  2. 配置 Knative Serving 以默认使用 Kourier

    kubectl patch configmap/config-network \
    --namespace knative-serving \
    --type merge \
    --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'
    
  3. 获取外部 IP 地址 (FQDN) 以便后续配置 DNS

    kubectl --namespace kourier-system get service kourier
    

使用以下步骤安装 Contour 并启用它,将其设置为入口控制器。

  1. 安装 Knative Contour 配置

    kubectl apply -f https://github.com/knative-extensions/net-contour/releases/download/knative-v1.21.0/contour.yaml
    
  2. 安装 Knative Contour 集成控制器

    kubectl apply -f https://github.com/knative-extensions/net-contour/releases/download/knative-v1.21.0/net-contour.yaml
    
  3. 配置 Knative Serving 以使用 Contour

        kubectl patch configmap/config-network \
        --namespace knative-serving \
        --type merge \
        --patch '{"data":{"ingress-class":"contour.ingress.networking.knative.dev"}}'
    
  4. 获取外部 IP 地址 (FQDN) 以便后续配置 DNS

    kubectl --namespace contour-external get service envoy
    

使用以下步骤安装 Istio 并将其设置为入口控制器。

  1. 安装配置正确的 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
    
  2. 安装 Knative Istio 控制器

    kubectl apply -f https://github.com/knative-extensions/net-istio/releases/download/knative-v1.21.0/net-istio.yaml
    
  3. 配置 config-network ConfigMap 以使用 Istio

        kubectl patch configmap/config-network \
        --namespace knative-serving \
        --type merge \
        --patch '{"data":{"ingress-class":"istio.ingress.networking.knative.dev"}}'
    
  4. 获取外部 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 实现。

  1. 安装 Knative Gateway API

    kubectl apply -f https://github.com/knative-extensions/net-gateway-api/releases/download/knative-v1.21.0/net-gateway-api.yaml
    
  2. 为外部(“南北”)和本地(“东西”)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
    
  3. 配置 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"}}'
    
  4. 验证 config-gateway ConfigMap

    kubectl describe configmaps config-gateway -n knative-serving
    

    检查 externals-gatewayslocal-gateways 键的值。

  5. 获取外部 IP 地址 (FQDN) 以配置 DNS 记录

    kubectl get gateway --all-namespaces
    

    查找外部 Gateway (knative-ingress-gateway) 以获取 DNS 配置的状态和地址。

验证安装

成功

监视 Knative 组件,直到所有组件都显示 STATUSRunningCompleted。您可以通过运行以下命令并检查输出来完成此操作

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 访问您的应用程序

  1. 配置 Knative 使用集群外部可访问的域
kubectl patch configmap/config-domain \
      --namespace knative-serving \
      --type merge \
      --patch '{"data":{"example.com":""}}'
  1. 启动应用程序后,获取应用程序的 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
  1. 指示 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 加密中的文档。

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