使用 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 簽署。
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 是最後一個支援同時包含 v1alpha1
和 v1beta1
的 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 安裝¶
-
由於 Operator 安裝在
default
命名空間中,請執行命令以確保將目前的命名空間設定為default
kubectl config set-context --current --namespace=default
-
執行命令以檢查 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 建立自訂資源
-
將下列 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 會預設為最新的可用版本。 -
執行命令以套用 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一個步驟中建立的檔案名稱。
安裝網路層¶
Knative Operator 可以使用不同的網路層選項來設定 Knative Serving 元件。如果 Knative Serving CR 中未指定輸入,則 Istio 是預設網路層。如果您選擇使用預設的 Istio 網路層,則必須在您的叢集上安裝 Istio。因此,您可能會發現將 Kourier 設定為您的網路層更容易。
按一下下列每個索引標籤,以查看如何使用不同的輸入設定 Knative Serving
下列步驟會安裝 Kourier 並啟用其 Knative 整合
-
若要設定 Knative Serving 以使用 Kourier,請將
spec.ingress.kourier
和spec.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"
-
執行命令以套用您的 Serving CR 的 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您的 Serving CR 檔案名稱。 -
執行命令以擷取外部 IP 或 CNAME
kubectl --namespace knative-serving get service kourier
請儲存此內容,以供稍後設定 DNS 時使用。
下列步驟會安裝 Istio 以啟用其 Knative 整合
-
如果您在預設的
istio-system
以外的命名空間下安裝 Istio-
將
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 安裝所在的命名空間。
-
執行命令以套用您的 Serving CR 的 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您的 Serving CR 檔案名稱。
-
-
執行命令以擷取外部 IP 或 CNAME
kubectl get svc istio-ingressgateway -n <istio-namespace>
請儲存此內容,以供稍後設定 DNS 時使用。
以下步驟會安裝 Contour 並啟用其 Knative 整合功能
-
安裝正確設定的 Contour
kubectl apply --filename https://github.com/knative/net-contour/releases/download/knative-v1.16.0/contour.yaml
-
若要設定 Knative Serving 使用 Contour,請將
spec.ingress.contour
和spec.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"
-
執行命令以套用您的 Serving CR 的 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您的 Serving CR 檔案名稱。 -
執行命令以擷取外部 IP 或 CNAME
kubectl --namespace contour-external get service envoy
請儲存此內容,以供稍後設定 DNS 時使用。
驗證 Knative Serving 部署¶
-
監控 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
-
檢查 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
存取您的應用程式
-
設定 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
範例應用程式中,使用預設設定,輸出為如需永久解決方案,請參閱「真實 DNS」方法。Hello Go Sample v1!
安裝 Knative Eventing¶
若要安裝 Knative Eventing,您必須套用自訂資源 (CR)。您也可以選擇使用不同的事件來源安裝 Knative Eventing 元件。
建立 Knative Eventing 自訂資源¶
若要為 Operator 中可用的最新 Knative Eventing 建立自訂資源
-
將下列 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 會預設為最新的可用版本。 -
執行命令以套用 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.version
和 spec.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 作為事件來源
-
請將
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
-
執行命令以套用 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一個步驟中建立的檔案名稱。
若要設定 Knative Eventing 以安裝 GitHub 作為事件來源
-
請將
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
-
執行命令以套用 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一個步驟中建立的檔案名稱。
若要設定 Knative Eventing 以安裝 GitLab 作為事件來源
-
請將
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
-
執行命令以套用 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一個步驟中建立的檔案名稱。
若要設定 Knative Eventing 以安裝 Kafka 作為事件來源
-
請將
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
-
執行命令以套用 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一個步驟中建立的檔案名稱。
若要設定 Knative Eventing 以安裝 RabbitMQ 作為事件來源,
-
請將
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
-
執行命令以套用 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一個步驟中建立的檔案名稱。
若要設定 Knative Eventing 以安裝 Redis 作為事件來源
-
請將
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
-
執行命令以套用 YAML 檔案
kubectl apply -f <filename>.yaml
其中
<filename>
是您在上一個步驟中建立的檔案名稱。
驗證 Knative Eventing 部署¶
-
監控 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
-
檢查 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/