跳到內容

設定 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 中對應於容器名稱的預定義變數。如果您的私有儲存庫中的映像檔名稱與容器名稱 (activatorautoscalercontrollerwebhookautoscaler-hpanet-istio-controllerqueue-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} 的形式推送。

若要定義您的映像檔連結

  1. 將映像檔推送至以下映像檔標籤

    容器 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
  2. 使用以下內容定義您的 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 輸入閘道服務

  1. 建立閘道服務和 Deployment 實例:.

  2. 透過更新 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
    
  3. 更新 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
    

取代輸入閘道

  1. 建立閘道:.

  2. 更新 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.istioknative-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-gatewayknative-ingress-gateway 閘道的伺服器段落的主機和連接埠。例如,您想要將主機指定為 <test-ip> 並使用 number: 443name: httpsprotocol: HTTPStarget_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 規格來覆寫組態。目前支援 resourcesreplicaslabelsannotationsnodeSelector

覆寫資源

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 labelannotation 設定會覆寫 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 來覆寫組態。目前支援 labelsannotationsselector

覆寫標籤、註解和選取器

以下 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%

我們使用分析和 Cookie 來了解網站流量。您使用我們網站的資訊會為了該目的與 Google 分享。了解更多。