跳至內容

使用 Knative Operator 安裝

Knative 提供一個 Kubernetes Operator 來安裝、設定和管理 Knative。您可以在您的叢集上安裝 Serving 元件、Eventing 元件,或兩者都安裝。

下表說明 Knative Operator 支援的 Serving 和 Eventing 版本

Operator 服務 事件
v1.16 v1.16.0
v1.15.0、v1.15.1 和 v1.15.2
v1.14.0、v1.14.1 和 v1.14.2
v1.13.0、v1.13.1 和 v1.13.2
v1.16.0
v1.15.0、v1.15.1、v1.15.2 和 v1.15.3
v1.14.0、v1.14.1、v1.14.2、v1.14.3、v1.14.4、v1.14.5、v1.14.6 和 v1.14.7
v1.13.0、v1.13.1、v1.13.2、v1.13.3、v1.13.4、v1.13.5、v1.13.6、v1.13.7 和 v1.13.8

先決條件

在安裝 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 模式簽署。若要深入了解無金鑰簽署,請參閱 無金鑰簽章。我們版本的簽署身分 (Subject) 為 signer@knative-releases.iam.gserviceaccount.com,而簽發者為 https://#

安裝 Knative Operator

在您安裝 Knative Serving 和 Eventing 元件之前,請先安裝 Knative Operator。

警告

Knative Operator 1.5 是最後一個支援同時包含 v1alpha1v1beta1 的 CRD 版本。如果您要將現有 Operator 安裝從 v1.2 或更早版本升級至 v1.3 或更新版本,請在安裝目前版本之前,執行下列命令將現有自訂資源升級至 v1beta1

kubectl create -f https://github.com/knative/operator/releases/download/knative-v1.5.1/operator-post-install.yaml

若要安裝最新的穩定 Operator 版本,請執行命令

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

您可以在 版本頁面 上找到有關 Knative Operator 已發行版本的資訊。

驗證您的 Knative Operator 安裝

  1. 由於 Operator 安裝在 default 命名空間中,請執行命令以確保將目前的命名空間設定為 default

    kubectl config set-context --current --namespace=default
    
  2. 執行命令以檢查 Operator 部署狀態

    kubectl get deployment knative-operator
    

    如果 Operator 安裝正確,則部署會顯示 Ready 狀態

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    knative-operator   1/1     1            1           19h
    

追蹤記錄

若要追蹤 Operator 的記錄,請執行命令

kubectl logs -f deploy/knative-operator

安裝 Knative Serving

若要安裝 Knative Serving,您必須建立自訂資源 (CR)、將網路層新增至 CR,並設定 DNS。

建立 Knative Serving 自訂資源

若要為 Operator 中最新的可用 Knative Serving 建立自訂資源

  1. 將下列 YAML 複製到檔案中

    apiVersion: v1
    kind: Namespace
    metadata:
      name: knative-serving
    ---
    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    

    注意

    當您未使用 spec.version 欄位指定版本時,Operator 會預設為最新的可用版本。

  2. 執行命令以套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一個步驟中建立的檔案名稱。

安裝網路層

Knative Operator 可以使用不同的網路層選項來設定 Knative Serving 元件。如果 Knative Serving CR 中未指定輸入,則 Istio 是預設網路層。如果您選擇使用預設的 Istio 網路層,則必須在您的叢集上安裝 Istio。因此,您可能會發現將 Kourier 設定為您的網路層更容易。

按一下下列每個索引標籤,以查看如何使用不同的輸入設定 Knative Serving

下列步驟會安裝 Kourier 並啟用其 Knative 整合

  1. 若要設定 Knative Serving 以使用 Kourier,請將 spec.ingress.kourierspec.config.network 新增至您的 Serving CR YAML 檔案,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      # ...
      ingress:
        kourier:
          enabled: true
      config:
        network:
          ingress-class: "kourier.ingress.networking.knative.dev"
    
  2. 執行命令以套用您的 Serving CR 的 YAML 檔案

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您的 Serving CR 檔案名稱。

  3. 執行命令以擷取外部 IP 或 CNAME

    kubectl --namespace knative-serving get service kourier
    

    請儲存此內容,以供稍後設定 DNS 時使用。

下列步驟會安裝 Istio 以啟用其 Knative 整合

  1. 安裝 Istio.

  2. 如果您在預設的 istio-system 以外的命名空間下安裝 Istio

    1. spec.config.istio 新增至您的 Serving CR YAML 檔案,如下所示

      apiVersion: operator.knative.dev/v1beta1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
      spec:
        # ...
        config:
          istio:
            local-gateways: |
              - name: knative-local-gateway
                namespace: <local-gateway-namespace>
                service: knative-local-gateway.<istio-namespace>.svc.cluster.local
      

      其中

      • <local-gateway-namespace> 是本機閘道命名空間,與 Knative Serving 命名空間 knative-serving 相同。
      • <istio-namespace> 是 Istio 安裝所在的命名空間。
    2. 執行命令以套用您的 Serving CR 的 YAML 檔案

      kubectl apply -f <filename>.yaml
      

      其中 <filename> 是您的 Serving CR 檔案名稱。

  3. 執行命令以擷取外部 IP 或 CNAME

    kubectl get svc istio-ingressgateway -n <istio-namespace>
    

    請儲存此內容,以供稍後設定 DNS 時使用。

以下步驟會安裝 Contour 並啟用其 Knative 整合功能

  1. 安裝正確設定的 Contour

    kubectl apply --filename https://github.com/knative/net-contour/releases/download/knative-v1.16.0/contour.yaml
    
  2. 若要設定 Knative Serving 使用 Contour,請將 spec.ingress.contourspec.config.network 新增至您的 Serving CR YAML 檔案,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      # ...
      ingress:
        contour:
          enabled: true
      config:
        network:
          ingress-class: "contour.ingress.networking.knative.dev"
    
  3. 執行命令以套用您的 Serving CR 的 YAML 檔案

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您的 Serving CR 檔案名稱。

  4. 執行命令以擷取外部 IP 或 CNAME

    kubectl --namespace contour-external get service envoy
    

    請儲存此內容,以供稍後設定 DNS 時使用。

驗證 Knative Serving 部署

  1. 監控 Knative 部署

    kubectl get deployment -n knative-serving
    

    如果 Knative Serving 已成功部署,Knative Serving 的所有部署都會顯示 READY 狀態。以下是範例輸出

    NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
    activator              1/1     1            1           18s
    autoscaler             1/1     1            1           18s
    autoscaler-hpa         1/1     1            1           14s
    controller             1/1     1            1           18s
    domain-mapping         1/1     1            1           12s
    domainmapping-webhook  1/1     1            1           12s
    webhook                1/1     1            1           17s
    
  2. 檢查 Knative Serving 自訂資源的狀態

    kubectl get KnativeServing knative-serving -n knative-serving
    

    如果 Knative Serving 已成功安裝,您應該會看到

    NAME              VERSION             READY   REASON
    knative-serving   <version number>    True
    

設定 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 Service 公開 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 提供者後,請將 spec.config.domain 新增至您現有的 Serving CR,然後套用

    # Replace knative.example.com with your domain suffix
    apiVersion: operator.knative.dev/v1alpha1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      ...
      config:
        domain:
          "knative.example.com": ""
      ...
    

如果您使用 curl 來存取範例應用程式或您自己的 Knative 應用程式,且無法使用「Magic DNS (sslip.io)」或「真實 DNS」方法,則可以採用暫時性的方法。這對於那些想要評估 Knative 但不想變更其 DNS 設定 (如「真實 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」方法。

安裝 Knative Eventing

若要安裝 Knative Eventing,您必須套用自訂資源 (CR)。您也可以選擇使用不同的事件來源安裝 Knative Eventing 元件。

建立 Knative Eventing 自訂資源

若要為 Operator 中可用的最新 Knative Eventing 建立自訂資源

  1. 將下列 YAML 複製到檔案中

    apiVersion: v1
    kind: Namespace
    metadata:
      name: knative-eventing
    ---
    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    

    注意

    當您不使用 spec.version 欄位指定版本時,Operator 會預設為最新的可用版本。

  2. 執行命令以套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    

其中 <filename> 是您在上一個步驟中建立的檔案名稱。

安裝特定版本的 Eventing

叢集管理員可以使用 spec.version 欄位安裝特定版本的 Knative Eventing。例如,如果您想要安裝 Knative Eventing v1.7,您可以套用下列 KnativeEventing CR

apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  version: "1.7"

您也可以執行下列命令來進行等效的變更

kn operator install --component eventing -v 1.7 -n knative-eventing

如果未指定 spec.version,Knative Operator 會安裝最新可用版本的 Knative Eventing。如果使用者指定無效或不可用的版本,Knative Operator 不會執行任何動作。Knative Operator 一律包含最新的 3 個次要版本。

如果 Knative Eventing 已由 Operator 管理,則更新 KnativeEventing CR 中的 spec.version 欄位可以升級或降級 Knative Eventing 版本,而無需修改 Operator。

請注意,Knative Operator 每次只允許升級或降級一個次要版本。例如,如果目前的 Knative Eventing 部署版本為 1.4,您必須先升級到 1.5,才能升級到 1.6。

安裝自訂的 Knative Eventing

Operator 可讓您彈性地安裝根據您自身需求自訂的 Knative Eventing。只要 Operator 可以存取自訂 Knative Eventing 的資訊清單,您就可以安裝它們。

您可以使用兩種模式來安裝自訂資訊清單:覆寫模式附加模式。使用覆寫模式時,在 .spec.manifests 下,您必須定義 Knative Eventing 安裝所需的所有資訊清單,因為 Operator 將不再安裝任何預設資訊清單。使用附加模式時,在 .spec.additionalManifests 下,您只需要定義自訂資訊清單即可。自訂資訊清單會在套用預設資訊清單後安裝。

覆寫模式

當您想要自訂要安裝的所有 Knative Eventing 資訊清單時,請使用覆寫模式。

例如,如果您只想安裝自訂的 Knative Eventing,您可以建立並套用下列 Eventing CR

apiVersion: v1
kind: Namespace
metadata:
  name: knative-eventing
---
apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  version: $spec_version
  manifests:
  - URL: https://my-eventing/eventing.yaml

此範例會安裝 $spec_version 版本的自訂 Knative Eventing,此版本可在 https://my-eventing/eventing.yaml 取得。

注意

您可以讓自訂的 Knative Eventing 在一個或多個連結中可用,因為 spec.manifests 支援連結清單。URL 的順序至關重要。將您要先套用的資訊清單放在最上面。

我們強烈建議您透過同時使用 spec.versionspec.manifests 來指定版本和自訂 Knative Eventing 的有效連結。請勿跳過任何欄位。

附加模式

您可以使用附加模式將自訂資訊清單新增至預設資訊清單。

例如,如果您只想自訂一些資源,但仍想安裝預設的 Knative Eventing,您可以建立並套用下列 Eventing CR

apiVersion: v1
kind: Namespace
metadata:
  name: knative-eventing
---
apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
spec:
  version: $spec_version
  additionalManifests:
  - URL: https://my-eventing/eventing-custom.yaml

此範例會安裝預設的 Knative Eventing,並安裝可在 https://my-eventing/eventing-custom.yaml 取得的自訂資源。

Knative Operator 會安裝 $spec_version 版本的 Knative Eventing 預設資訊清單,然後根據這些資訊清單安裝您的自訂資訊清單。

使用事件來源安裝 Knative Eventing

Knative Operator 可以使用不同的事件來源設定 Knative Eventing 元件。按一下以下每個索引標籤,以了解如何使用不同的事件來源設定 Knative Eventing

若要設定 Knative Eventing 以安裝 Ceph 作為事件來源

  1. 請將 spec.source.ceph 新增至您的 Eventing CR YAML 檔案,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        ceph:
          enabled: true
    
  2. 執行命令以套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一個步驟中建立的檔案名稱。

若要設定 Knative Eventing 以安裝 GitHub 作為事件來源

  1. 請將 spec.source.github 新增至您的 Eventing CR YAML 檔案,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        github:
          enabled: true
    
  2. 執行命令以套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一個步驟中建立的檔案名稱。

若要設定 Knative Eventing 以安裝 GitLab 作為事件來源

  1. 請將 spec.source.gitlab 新增至您的 Eventing CR YAML 檔案,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        gitlab:
          enabled: true
    
  2. 執行命令以套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一個步驟中建立的檔案名稱。

若要設定 Knative Eventing 以安裝 Kafka 作為事件來源

  1. 請將 spec.source.kafka 新增至您的 Eventing CR YAML 檔案,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        kafka:
          enabled: true
    
  2. 執行命令以套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一個步驟中建立的檔案名稱。

若要設定 Knative Eventing 以安裝 RabbitMQ 作為事件來源,

  1. 請將 spec.source.rabbitmq 新增至您的 Eventing CR YAML 檔案,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        rabbitmq:
          enabled: true
    
  2. 執行命令以套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一個步驟中建立的檔案名稱。

若要設定 Knative Eventing 以安裝 Redis 作為事件來源

  1. 請將 spec.source.redis 新增至您的 Eventing CR YAML 檔案,如下所示

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      # ...
      source:
        redis:
          enabled: true
    
  2. 執行命令以套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    

    其中 <filename> 是您在上一個步驟中建立的檔案名稱。

驗證 Knative Eventing 部署

  1. 監控 Knative 部署

    kubectl get deployment -n knative-eventing
    

    如果 Knative Eventing 已成功部署,Knative Eventing 的所有部署都會顯示 READY 狀態。以下是範例輸出

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    eventing-controller     1/1     1            1           43s
    eventing-webhook        1/1     1            1           42s
    imc-controller          1/1     1            1           39s
    imc-dispatcher          1/1     1            1           38s
    mt-broker-controller    1/1     1            1           36s
    mt-broker-filter        1/1     1            1           37s
    mt-broker-ingress       1/1     1            1           37s
    pingsource-mt-adapter   0/0     0            0           43s
    sugar-controller        1/1     1            1           36s
    
  2. 檢查 Knative Eventing 自訂資源的狀態

    kubectl get KnativeEventing knative-eventing -n knative-eventing
    

    如果 Knative Eventing 已成功安裝,您應該會看到

    NAME               VERSION             READY   REASON
    knative-eventing   <version number>    True
    

解除安裝 Knative

Knative Operator 可防止不安全地移除 Knative 資源。即使 Knative Serving 和 Knative Eventing CR 已成功移除,Knative 中的所有 CRD 仍會保留在叢集中。所有依賴 Knative CRD 的資源仍然可以運作。

移除 Knative Serving 元件

若要移除 Knative Serving CR,請執行命令

kubectl delete KnativeServing knative-serving -n knative-serving

移除 Knative Eventing 元件

若要移除 Knative Eventing CR,請執行命令

kubectl delete KnativeEventing knative-eventing -n knative-eventing

移除 Knative Operator:

如果您是使用發行頁面安裝 Knative,請執行命令來移除 Operator

kubectl delete -f https://github.com/knative/operator/releases/download/knative-v1.16.0/operator.yaml

如果您是從原始碼安裝 Knative,請在原始碼的根目錄中時使用下列命令來解除安裝

ko delete -f config/

下一步

我們使用分析和 Cookie 來了解網站流量。您使用我們網站的相關資訊會與 Google 分享以達到此目的。瞭解更多。