使用 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 簽署。
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 元件
-
執行命令來安裝必要的自訂資源
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.16.0/serving-crds.yaml
-
執行命令來安裝 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 整合。
-
執行命令來安裝 Knative Kourier 控制器
kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.16.0/kourier.yaml
-
執行命令來設定 Knative Serving 預設使用 Kourier
kubectl patch configmap/config-network \ --namespace knative-serving \ --type merge \ --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'
-
執行命令來擷取外部 IP 位址或 CNAME
kubectl --namespace kourier-system get service kourier
提示
儲存此項目以便在以下 設定 DNS 區段中使用。
以下命令會安裝 Istio 並啟用其 Knative 整合。
-
請依照 進階 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
-
執行命令來安裝 Knative Istio 控制器
kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.16.0/net-istio.yaml
-
執行命令來擷取外部 IP 位址或 CNAME
kubectl --namespace istio-system get service istio-ingressgateway
提示
儲存此項目以便在以下 設定 DNS 區段中使用。
以下命令會安裝 Contour 並啟用其 Knative 整合。
-
執行命令來安裝正確設定的 Contour
kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.0/contour.yaml
-
執行命令來安裝 Knative Contour 控制器
kubectl apply -f https://github.com/knative/net-contour/releases/download/knative-v1.16.0/net-contour.yaml
-
執行命令來設定 Knative Serving 預設使用 Contour
kubectl patch configmap/config-network \ --namespace knative-serving \ --type merge \ --patch '{"data":{"ingress-class":"contour.ingress.networking.knative.dev"}}'
-
執行命令來擷取外部 IP 位址或 CNAME
kubectl --namespace contour-external get service envoy
提示
儲存此項目以便在以下 設定 DNS 區段中使用。
驗證安裝¶
成功
監控 Knative 元件,直到所有元件都顯示 STATUS
為 Running
或 Completed
為止。您可以執行下列命令並檢查輸出來執行此操作
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
存取您的應用程式
-
設定 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!
安裝可選的 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 加密中的文件。