跳至內容

使用 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://#

注意

Knative 映像以 KEYLESS 模式簽署。若要深入了解無金鑰簽署,請參閱 無金鑰簽章。我們的版本簽署身分 (主體) 為 signer@knative-releases.iam.gserviceaccount.com,而發行者為 https://#

安裝 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 元件,直到所有元件都顯示 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
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,此 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 位址或主機名稱時,此功能才會運作,因此除非 minikube tunnel 正在執行,否則此功能不會與 IPv6 叢集或 minikube 之類的本機設定搭配運作。

在這些情況下,請參閱「真實 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 分享。瞭解更多。