跳至内容

使用 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 签名。

  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 Serving 组件

要安装 Knative Serving 组件

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

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-crds.yaml
    
  2. 通过运行以下命令安装 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 集成。

  1. 通过运行以下命令安装 Knative Kourier 控制器

    kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.16.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 地址或 CNAME

    kubectl --namespace kourier-system get service kourier
    

    提示

    将此保存以在以下 配置 DNS 部分中使用。

以下命令将安装 Istio 并启用其 Knative 集成。

  1. 请按照 高级 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
    
  2. 通过运行以下命令安装 Knative Istio 控制器

    kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.16.0/net-istio.yaml
    
  3. 通过运行以下命令获取外部 IP 地址或 CNAME

    kubectl --namespace istio-system get service istio-ingressgateway
    

    提示

    将此保存以在以下 配置 DNS 部分中使用。

以下命令将安装 Contour 并启用其 Knative 集成。

  1. 通过运行以下命令安装配置正确的 Contour

    kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.0/contour.yaml
    

  2. 通过运行以下命令安装 Knative Contour 控制器

    kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.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 地址或 CNAME

    kubectl --namespace contour-external get service envoy
    

    提示

    将此保存以在以下 配置 DNS 部分中使用。

验证安装

成功

监控 Knative 组件,直到所有组件的 STATUS 均显示为 RunningCompleted。您可以通过运行以下命令并检查输出内容来实现

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

  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”方法以获取永久解决方案。

安装可选的 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 加密 中的文档。

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