設定 Knative Serving Operator 自訂資源¶
您可以修改 KnativeServing CR 來設定 Knative Serving 的不同選項。
設定 Knative Serving 版本¶
叢集管理員可以使用 spec.version
欄位來安裝特定版本的 Knative Serving。
例如,如果您想要安裝 Knative Serving v1.5,您可以套用以下 KnativeServing
自訂資源
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
version: "1.5"
您也可以執行以下命令來進行等效的變更
kn operator install --component serving -v 1.5 -n knative-serving
如果未指定 spec.version
,Knative Operator 會安裝最新可用的 Knative Serving 版本。
如果使用者指定無效或不可用的版本,Knative Operator 不會執行任何動作。
Knative Operator 始終包含最新的 3 個發行版本。例如,如果 Knative Operator 的目前版本是 v1.5,則透過 Operator 可用的最早 Knative Serving 版本是 v1.2。
如果 Knative Serving 已經由 Operator 管理,則更新 KnativeServing
資源中的 spec.version
欄位可以升級或降級 Knative Serving 版本,而無需變更 Operator。
重要事項
Knative Operator 一次只允許升級或降級一個次要發行版本。例如,如果目前的 Knative Serving 部署版本是 v1.3,您必須先升級到 v1.4,才能升級到 v1.5。
安裝自訂的 Knative Serving¶
有兩種模式可用於安裝自訂的 Knative Serving 清單:覆寫模式和附加模式。
如果您使用覆寫模式,則在 .spec.manifests
下,您必須定義所有必要的清單才能安裝 Knative Serving,因為 Operator 不會安裝任何預設清單。
如果您使用附加模式,則在 .spec.additionalManifests
下,您只需要定義自訂的清單。自訂的清單會在套用預設清單後安裝。
覆寫模式¶
當您想要自訂所有 Knative Serving 清單時,可以使用覆寫模式。
重要事項
您必須為自訂的 Knative Serving 清單指定版本和有效的 URL。
例如,如果您想要安裝 Knative Serving 和 Istio 輸入的自訂版本,您可以建立類似於以下範例的 KnativeServing
CR
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
version: $spec_version
manifests:
- URL: https://my-serving/serving.yaml
- URL: https://my-net-istio/net-istio.yaml
您可以將自訂的 Knative Serving 放在一個或多個連結中,因為 spec.manifests
支援連結清單。
重要事項
清單 URL 的順序至關重要。將您想要先套用的清單放在清單的頂端。
此範例安裝了版本為 $spec_version
的自訂 Knative Serving,該版本位於 https://my-serving/serving.yaml
,以及位於 https://my-net-istio/net-istio.yaml
的自訂輸入外掛程式 net-istio
。
附加模式¶
您可以使用附加模式,除了預設清單之外,還可以新增自訂的 Knative Serving 清單。
例如,如果您只想自訂少數資源,但仍想要安裝預設的 Knative Serving,您可以建立類似於以下範例的 KnativeServing
CR
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
version: $spec_version
additionalManifests:
- URL: https://my-serving/serving-custom.yaml
此範例會安裝預設的 Knative Serving 清單,然後安裝位於 https://my-serving/serving-custom.yaml
的版本 $spec_version
的自訂資源。
私有儲存庫和私有密碼¶
您可以使用 Operator CR 的 spec.registry
區段來變更映像檔參考,以指向私有儲存庫或 指定 imagePullSecrets
-
default
:此欄位定義所有 Knative 映像檔的映像檔參考範本。格式為example-registry.io/custom/path/${NAME}:{CUSTOM-TAG}
。如果您對所有映像檔使用相同的標籤,則唯一的區別是映像檔名稱。${NAME}
是 operator 中對應於容器名稱的預定義變數。如果您的私有儲存庫中的映像檔名稱與容器名稱 (activator
、autoscaler
、controller
、webhook
、autoscaler-hpa
、net-istio-controller
和queue-proxy
) 對齊,則default
引數應已足夠。 -
override
:從容器名稱到完整儲存庫位置的對應。只有當儲存庫映像檔與常見的命名格式不符時,才需要此區段。對於名稱與索引鍵相符的容器,值會優先於default
計算的映像檔名稱。如果容器的名稱與override
中的索引鍵不符,則會使用default
中的範本。 -
imagePullSecrets
:提取 Knative 容器映像檔時使用的密碼名稱清單。必須在與 Knative Serving 部署相同的命名空間中建立密碼。如需組態詳細資訊,請參閱從私有容器儲存庫部署映像檔。
以預定義格式下載映像檔,無需密碼¶
此範例示範如何定義可使用簡化格式 docker.io/knative-images/${NAME}:{CUSTOM-TAG}
在 CR 中定義的自訂映像檔連結。
在以下範例中
- 自訂標籤
latest
用於所有映像檔。 - 所有映像檔連結都可存取,無需使用密碼。
- 映像檔會以
docker.io/knative-images/${NAME}:{CUSTOM-TAG}
的形式推送。
若要定義您的映像檔連結
-
將映像檔推送至以下映像檔標籤
容器 Docker 映像檔 activator
docker.io/knative-images/activator:latest
autoscaler
docker.io/knative-images/autoscaler:latest
controller
docker.io/knative-images/controller:latest
webhook
docker.io/knative-images/webhook:latest
autoscaler-hpa
docker.io/knative-images/autoscaler-hpa:latest
net-istio-controller
docker.io/knative-images/net-istio-controller:latest
queue-proxy
docker.io/knative-images/queue-proxy:latest
-
使用以下內容定義您的 operator CR
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: registry: default: docker.io/knative-images/${NAME}:latest
您也可以執行以下命令來進行等效的變更
```bash
kn operator configure images --component serving --imageKey default --imageURL docker.io/knative-images/${NAME}:latest -n knative-serving
```
個別下載映像檔,無需密鑰¶
如果您的自訂映像檔連結預設不是以統一格式定義,您需要將每個連結個別包含在 CR 中。
例如,假設有以下映像檔:
容器 | Docker 映像檔 |
---|---|
activator |
docker.io/knative-images-repo1/activator:latest |
autoscaler |
docker.io/knative-images-repo2/autoscaler:latest |
controller |
docker.io/knative-images-repo3/controller:latest |
webhook |
docker.io/knative-images-repo4/webhook:latest |
autoscaler-hpa |
docker.io/knative-images-repo5/autoscaler-hpa:latest |
net-istio-controller |
docker.io/knative-images-repo6/prefix-net-istio-controller:latest |
net-istio-webhook |
docker.io/knative-images-repo6/net-istio-webhooko:latest |
queue-proxy |
docker.io/knative-images-repo7/queue-proxy-suffix:latest |
您必須修改 Operator CR 以包含完整清單。例如:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
registry:
override:
activator: docker.io/knative-images-repo1/activator:latest
autoscaler: docker.io/knative-images-repo2/autoscaler:latest
controller: docker.io/knative-images-repo3/controller:latest
webhook: docker.io/knative-images-repo4/webhook:latest
autoscaler-hpa: docker.io/knative-images-repo5/autoscaler-hpa:latest
net-istio-controller/controller: docker.io/knative-images-repo6/prefix-net-istio-controller:latest
net-istio-webhook/webhook: docker.io/knative-images-repo6/net-istio-webhook:latest
queue-proxy: docker.io/knative-images-repo7/queue-proxy-suffix:latest
您也可以執行以下命令來進行等效的變更:
kn operator configure images --component serving --imageKey activator --imageURL docker.io/knative-images-repo1/activator:latest -n knative-serving
kn operator configure images --component serving --imageKey autoscaler --imageURL docker.io/knative-images-repo2/autoscaler:latest -n knative-serving
kn operator configure images --component serving --imageKey controller --imageURL docker.io/knative-images-repo3/controller:latest -n knative-serving
kn operator configure images --component serving --imageKey webhook --imageURL docker.io/knative-images-repo4/webhook:latest -n knative-serving
kn operator configure images --component serving --imageKey autoscaler-hpa --imageURL docker.io/knative-images-repo5/autoscaler-hpa:latest -n knative-serving
kn operator configure images --component serving --deployName net-istio-controller --imageKey controller --imageURL docker.io/knative-images-repo6/prefix-net-istio-controller:latest -n knative-serving
kn operator configure images --component serving --deployName net-istio-webhook --imageKey webhook --imageURL docker.io/knative-images-repo6/net-istio-webhook:latest -n knative-serving
kn operator configure images --component serving --imageKey queue-proxy --imageURL docker.io/knative-images-repo7/queue-proxy-suffix:latest -n knative-serving
注意:
如果容器名稱在所有 Deployment、DaemonSet 和 Job 中不是唯一的,您可以使用父容器名稱和斜線作為容器名稱的前綴。例如,istio-webhook/webhook
。
使用密鑰下載映像檔¶
如果您的映像檔儲存庫需要私有密鑰才能存取,請包含 imagePullSecrets
屬性。
此範例使用名為 regcred
的密鑰。如果需要,您必須建立自己的私有密鑰。
在建立此密鑰後,請編輯 Operator CR,附加以下內容:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
registry:
...
imagePullSecrets:
- name: regcred
imagePullSecrets
欄位預期會是一個密鑰列表。您可以新增多個密鑰來存取映像檔,如下所示:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
registry:
...
imagePullSecrets:
- name: regcred
- name: regcred-2
...
控制器的 SSL 憑證¶
為了啟用標籤到摘要解析,Knative Serving 控制器需要存取容器註冊表。為了允許控制器信任自簽署的註冊表憑證,您可以使用 Operator 使用 ConfigMap 或 Secret 來指定憑證。
在 spec.controller-custom-certs
中指定以下欄位,以選擇自訂的註冊表憑證:
name
:ConfigMap 或 Secret 的名稱。type
:字串 "ConfigMap" 或 "Secret"。
如果您建立名為 testCert
且包含憑證的 ConfigMap,請變更您的 CR:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
controller-custom-certs:
name: testCert
type: ConfigMap
取代預設的 Istio 輸入閘道服務¶
-
透過更新
ingress.istio.knative-ingress-gateway
規格,以選擇新輸入閘道的標籤,來更新 Knative 閘道:apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: ingress: istio: enabled: true knative-ingress-gateway: selector: istio: ingressgateway
-
更新 Istio 輸入閘道 ConfigMap:
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: ingress: istio: enabled: true knative-ingress-gateway: selector: istio: ingressgateway config: istio: external-gateways: | - name: knative-ingress-gateway namespace: knative-serving service: custom-ingressgateway.custom-ns.svc.cluster.local
spec.config.istio
中的鍵的格式為:external-gateways: | - name: <gateway_name> namespace: <gateway_namespace> service: istio-ingressgateway.istio-system.svc.cluster.local
取代輸入閘道¶
-
更新 Istio 輸入閘道 ConfigMap:
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: config: istio: external-gateways: | - name: knative-custom-gateway namespace: custom-ns service: istio-ingressgateway.istio-system.svc.cluster.local
spec.config.istio
中的鍵的格式為:external-gateways: | - name: <gateway_name> namespace: <gateway_namespace> service: istio-ingressgateway.istio-system.svc.cluster.local
叢集本機閘道的組態¶
更新 spec.ingress.istio.knative-local-gateway
,以選擇新的叢集本機輸入閘道的標籤:
預設本機閘道名稱¶
請瀏覽安裝 Istio指南,以使用本機叢集閘道,如果您使用名為 knative-local-gateway
的預設閘道。
非預設本機閘道名稱¶
如果您建立的自訂本機閘道名稱不是 knative-local-gateway
,請更新 config.istio
和 knative-local-gateway
選取器:
此範例顯示在命名空間 istio-system
中具有標籤 custom: custom-local-gw
的服務和 Deployment knative-local-gateway
。
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
ingress:
istio:
enabled: true
knative-local-gateway:
selector:
custom: custom-local-gateway
config:
istio:
local-gateways: |
- name: knative-local-gateway
namespace: knative-serving
service: custom-local-gateway.istio-system.svc.cluster.local
Istio 閘道的伺服器組態:¶
您可以利用 KnativeServing CR 來組態 knative-local-gateway
或 knative-ingress-gateway
閘道的伺服器段落的主機和連接埠。例如,您想要將主機指定為 <test-ip>
並使用 number: 443
、name: https
、protocol: HTTPS
和 target_port: 8443
來組態 knative-local-gateway
的連接埠,請套用以下 YAML 內容:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
ingress:
istio:
enabled: true
knative-local-gateway:
servers:
- port:
number: 443
name: https
protocol: HTTPS
target_port: 8443
hosts:
- <test-ip>
config:
istio:
local-gateways: |
- name: knative-local-gateway
namespace: knative-serving
service: custom-local-gateway.istio-system.svc.cluster.local
為 Kourier 閘道自訂 kourier-bootstrap:¶
預設情況下,Kourier 在 ConfigMap kourier-bootstrap
中包含 Envoy 啟動組態。spec.ingress.kourier.bootstrap-configmap
欄位可讓您指定自訂的啟動 ConfigMap。
此範例顯示 Kourier 閘道使用 my-configmap
作為 Envoy 啟動組態。
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
config:
network:
ingress-class: kourier.ingress.networking.knative.dev
ingress:
kourier:
bootstrap-configmap: my-configmap
enabled: true
高可用性¶
預設情況下,Knative Serving 會執行每個 Deployment 的單一實例。spec.high-availability
欄位可讓您組態由 Operator 管理的所有 Deployment 的複本數量。
以下組態指定工作負載的複本計數為 3:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
high-availability:
replicas: 3
您也可以執行以下命令來進行等效的變更
kn operator configure replicas --component serving --replicas 3 -n knative-serving
replicas
欄位也會根據 spec.high-availability
來組態 HorizontalPodAutoscaler
資源。假設 Operator 包含以下 HorizontalPodAutoscaler:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
...
spec:
minReplicas: 3
maxReplicas: 5
如果您組態 replicas: 2
,其小於 minReplicas
,則 Operator 會將 minReplicas
轉換為 1
。
如果您組態 replicas: 6
,其大於 maxReplicas
,則 Operator 會將 maxReplicas
轉換為 maxReplicas + (replicas - minReplicas)
,即 8
。
覆寫系統 Deployment¶
如果您想要覆寫特定 Deployment 的某些組態,您可以透過修改 KnativeServing
CR 中的 deployments
規格來覆寫組態。目前支援 resources
、replicas
、labels
、annotations
和 nodeSelector
。
覆寫資源¶
KnativeServing
CR 能夠根據 Deployment 為 Knative 系統容器組態系統資源。可以為 Deployment 中的所有可用容器組態請求和限制。
例如,以下 KnativeServing
CR 會組態 Deployment controller
中的容器 controller
,以請求 0.3 個 CPU 和 100MB 的 RAM,並設定 1 個 CPU 和 250MB RAM 的硬性限制:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
workloads:
- name: controller
resources:
- container: controller
requests:
cpu: 300m
memory: 100Mi
limits:
cpu: 1000m
memory: 250Mi
您也可以執行以下命令來進行等效的變更
kn operator configure resources --component serving --deployName controller --container controller --requestCPU 300m --requestMemory 100Mi --limitCPU 1000m --limitMemory 250Mi -n knative-serving
覆寫複本、標籤和註解¶
以下 KnativeServing 資源會覆寫 webhook
Deployment 以擁有 3
個複本、標籤 mylabel: foo
和註解 myannotations: bar
,同時其他系統 Deployment 透過使用 spec.high-availability
擁有 2
個複本。
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
high-availability:
replicas: 2
workloads:
- name: webhook
replicas: 3
labels:
mylabel: foo
annotations:
myannotations: bar
您也可以執行以下命令來進行等效的變更:
kn operator configure replicas --component serving --replicas 2 -n knative-serving
kn operator configure replicas --component serving --deployName webhook --replicas 3 -n knative-serving
kn operator configure labels --component serving --deployName webhook --key mylabel --value foo -n knative-serving
kn operator configure annotations --component serving --deployName webhook --key myannotations --value bar -n knative-serving
注意:
KnativeServing
CR label
和 annotation
設定會覆寫 Deployment 和 Pod 的 webhook 標籤和註解。
覆寫 nodeSelector¶
以下 KnativeServing
CR 會覆寫 webhook
Deployment 以使用 disktype: hdd
nodeSelector:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
workloads:
- name: webhook
nodeSelector:
disktype: hdd
您也可以執行以下命令來進行等效的變更
kn operator configure nodeSelectors --component serving --deployName webhook --key disktype --value hdd -n knative-serving
覆寫容錯¶
KnativeServing 資源能夠覆寫 Knative Serving Deployment 資源的容錯。例如,如果您想要新增以下容錯:
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
到 Deployment activator
,您需要如下變更您的 KnativeServing CR:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
workloads:
- name: activator
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
您也可以執行以下命令來進行等效的變更
kn operator configure tolerations --component serving --deployName activator --key key1 --operator Equal --value value1 --effect NoSchedule -n knative-serving
覆寫親和性¶
KnativeServing 資源能夠覆寫 Knative Serving Deployment 資源的親和性,包括 nodeAffinity、podAffinity 和 podAntiAffinity。例如,如果您想要新增以下 nodeAffinity:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
到 Deployment activator
,您需要如下變更您的 KnativeServing CR:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
workloads:
- name: activator
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
覆寫環境變數¶
KnativeServing 資源能夠覆寫或新增 Knative Serving Deployment 資源中容器的環境變數。例如,如果您想要將 Deployment controller
中容器 controller
的環境變數 METRICS_DOMAIN
的值變更為 "knative.dev/my-repo",您需要如下變更您的 KnativeServing CR:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
workloads:
- name: controller
env:
- container: controller
envVars:
- name: METRICS_DOMAIN
value: "knative.dev/my-repo"
您也可以執行以下命令來進行等效的變更
kn operator configure envvars --component serving --deployName controller --container controller --name METRICS_DOMAIN --value "knative.dev/my-repo" -n knative-serving
覆寫系統服務¶
如果您想要覆寫特定服務的某些組態,您可以使用 CR 中的 spec.services
來覆寫組態。目前支援 labels
、annotations
和 selector
。
覆寫標籤、註解和選取器¶
以下 KnativeServing 資源會覆寫 webhook
服務,使其具有標籤 mylabel: foo
、註解 myannotations: bar
和選取器 myselector: bar
。
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
services:
- name: webhook
labels:
mylabel: foo
annotations:
myannotations: bar
selector:
myselector: bar
您也可以執行以下命令來進行等效的變更:
kn operator configure labels --component serving --serviceName webhook --key mylabel --value foo -n knative-serving
kn operator configure annotations --component serving --serviceName webhook --key myannotations --value bar -n knative-serving
kn operator configure selectors --component serving --serviceName webhook --key myselector --value bar -n knative-serving
覆寫系統 podDisruptionBudgets¶
Pod 中斷預算 (PDB) 可讓您限制在 Pod 因維護原因而需要重新排程時對應用程式造成的干擾。Knative Operator 可讓您根據名稱組態 Serving 中特定 podDisruptionBudget 資源的 minAvailable
。若要進一步了解資源 podDisruptionBudget 的組態,請按一下這裡。例如,如果您想要將名為 activator-pdb
的 podDisruptionBudget 的 minAvailable
變更為 70%,您需要如下變更您的 KnativeServing CR:
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
spec:
podDisruptionBudgets:
- name: activator-pdb
minAvailable: 70%