自訂安裝設定
先決條件
開始之前,請檢查以下先決條件
- 下載 Istio 版本.
- 執行任何必要的平台特定設定。
- 檢查Pod 和服務的需求。
除了安裝任何 Istio 內建的設定檔之外,istioctl install
還提供完整的 API 來客製化設定。
此 API 中的設定參數可以使用命令列上的 --set
選項個別設定。例如,要在預設設定檔中啟用偵錯記錄,請使用此命令
$ istioctl install --set values.global.logging.level=debug
或者,IstioOperator
設定可以在 YAML 檔案中指定,並使用 -f
選項傳遞至 istioctl
$ istioctl install -f samples/operator/pilot-k8s.yaml
識別 Istio 元件
IstioOperator
API 將組件定義如下表所示
組件 |
---|
base |
pilot |
ingressGateways |
egressGateways |
cni |
istiodRemote |
這些組件的每個可配置設定都可以在 API 的 components.<component name>
下找到。 例如,若要使用 API 將 pilot
組件的 enabled
設定變更為 (false),請使用 --set components.pilot.enabled=false
,或在 IstioOperator
資源中設定如下
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
components:
pilot:
enabled: false
所有組件也都共用一個通用 API,用於變更 Kubernetes 特定設定,位於 components.<component name>.k8s
下,如下節所述。
自訂 Kubernetes 設定
IstioOperator
API 允許以一致的方式自訂每個組件的 Kubernetes 設定。
每個組件都有一個 KubernetesResourceSpec
,允許變更以下設定。 使用此列表來識別要自訂的設定
- 資源
- 準備就緒探測 (Readiness probes)
- 副本計數 (Replica count)
HorizontalPodAutoscaler
PodDisruptionBudget
- Pod 註釋 (Pod annotations)
- Service 註釋 (Service annotations)
ImagePullPolicy
- 優先級類別名稱 (Priority class name)
- 節點選擇器 (Node selector)
- 親和性和反親和性 (Affinity and anti-affinity)
- 服務 (Service)
- 容忍度 (Toleration)
- 策略 (Strategy)
- 環境變數 (Env)
- Pod 安全性環境 (Pod security context)
- 磁碟區和磁碟區掛載 (Volumes and volume mounts)
所有這些 Kubernetes 設定都使用 Kubernetes API 定義,因此可以參考 Kubernetes 文件。
以下範例覆蓋檔案調整了 Pilot 的資源和水平 Pod 自動縮放設定
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
components:
pilot:
k8s:
resources:
requests:
cpu: 1000m # override from default 500m
memory: 4096Mi # ... default 2048Mi
hpaSpec:
maxReplicas: 10 # ... default 5
minReplicas: 2 # ... default 1
使用 istioctl install
將修改後的設定套用到叢集
$ istioctl install -f samples/operator/pilot-k8s.yaml
使用 Helm API 自訂 Istio 設定
IstioOperator
API 包含一個使用 values
欄位傳遞到 Helm API 的介面。
以下 YAML 檔案透過 Helm API 配置全域和 Pilot 設定
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
pilot:
traceSampling: 0.1 # override from 1.0
global:
monitoringPort: 15014
某些參數將暫時存在於 Helm 和 IstioOperator
API 中,包括 Kubernetes 資源、命名空間和啟用設定。 Istio 社群建議使用 IstioOperator
API,因為它更一致、經過驗證,並且遵循 社群畢業流程。
設定閘道
閘道是一種特殊的組件,因為可以定義多個入口和出口閘道。 在 IstioOperator
API 中,閘道定義為列表類型。 default
設定檔安裝一個入口閘道,稱為 istio-ingressgateway
。 您可以檢查此閘道的預設值
$ istioctl profile dump --config-path components.ingressGateways
$ istioctl profile dump --config-path values.gateways.istio-ingressgateway
這些命令會顯示閘道的 IstioOperator
和 Helm 設定,它們會一起用於定義產生的閘道資源。 可以像自訂任何其他組件一樣自訂內建閘道。
可以透過新增新的列表項目來建立新的使用者閘道
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
components:
ingressGateways:
- name: istio-ingressgateway
enabled: true
- namespace: user-ingressgateway-ns
name: ilb-gateway
enabled: true
k8s:
resources:
requests:
cpu: 200m
serviceAnnotations:
cloud.google.com/load-balancer-type: "internal"
service:
ports:
- port: 8060
targetPort: 8060
name: tcp-citadel-grpc-tls
- port: 5353
name: tcp-dns
請注意,Helm 值 (spec.values.gateways.istio-ingressgateway/egressgateway
) 由所有入口/出口閘道共用。 如果必須針對每個閘道自訂這些值,建議使用單獨的 IstioOperator CR 為使用者閘道產生資訊清單,與主要的 Istio 安裝分開
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
profile: empty
components:
ingressGateways:
- name: ilb-gateway
namespace: user-ingressgateway-ns
enabled: true
# Copy settings from istio-ingressgateway as needed.
values:
gateways:
istio-ingressgateway:
debug: error
進階安裝自訂
自訂外部圖表和設定檔
istioctl
的 install
、manifest generate
和 profile
命令可以使用以下任何來源的圖表和設定檔
- 編譯在圖表中。 如果未設定
--manifests
選項,則這是預設值。 編譯在圖表中的內容與 Istio 發行.tgz
的manifests/
目錄中的內容相同。 - 本機檔案系統中的圖表,例如
istioctl install --manifests istio-1.24.0/manifests
。
可以透過編輯 manifests/
中的檔案來自訂本機檔案系統圖表和設定檔。 對於廣泛的變更,我們建議製作 manifests
目錄的副本,並在那裡進行變更。 但是請注意,必須保留 manifests
目錄中的內容佈局。
設定檔位於 manifests/profiles/
下,可以編輯,並且可以透過建立具有所需設定檔名稱和 .yaml
副檔名的新檔案來新增設定檔。 istioctl
會掃描 profiles
子目錄,並且所有在那裡找到的設定檔都可以透過 IstioOperatorSpec
設定檔欄位中的名稱來參照。 在套用使用者覆蓋之前,內建設定檔會覆蓋預設設定檔 YAML。 例如,您可以建立一個名為 custom1.yaml
的新設定檔檔案,該檔案會自訂 default
設定檔中的某些設定,然後在該設定檔之上套用使用者覆蓋檔案
$ istioctl manifest generate --manifests mycharts/ --set profile=custom1 -f path-to-user-overlay.yaml
在這種情況下,custom1.yaml
和 user-overlay.yaml
檔案將覆蓋在 default.yaml
檔案上,以取得用作資訊清單產生的最終值。
一般來說,不需要建立新的設定檔,因為可以透過傳遞多個覆蓋檔案來達成類似的結果。 例如,上面的命令等效於傳遞兩個使用者覆蓋檔案
$ istioctl manifest generate --manifests mycharts/ -f manifests/profiles/custom1.yaml -f path-to-user-overlay.yaml
僅當您需要透過 IstioOperatorSpec
中的名稱參照設定檔時,才需要建立自訂設定檔。
修補輸出資訊清單
IstioOperator
CR 是 istioctl
的輸入,用於產生包含要套用到叢集的 Kubernetes 資源的輸出資訊清單。 輸出資訊清單可以在產生後,但在套用到叢集之前,透過 IstioOperator
的 overlays API 進一步自訂,以新增、修改或刪除資源。
以下範例覆蓋檔案 (patch.yaml
) 示範了可以完成的輸出資訊清單修補類型
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
profile: empty
hub: docker.io/istio
tag: 1.1.6
components:
pilot:
enabled: true
namespace: istio-control
k8s:
overlays:
- kind: Deployment
name: istiod
patches:
# Select list item by value
- path: spec.template.spec.containers.[name:discovery].args.[30m]
value: "60m" # overridden from 30m
# Select list item by key:value
- path: spec.template.spec.containers.[name:discovery].ports.[containerPort:8080].containerPort
value: 1234
# Override with object (note | on value: first line)
- path: spec.template.spec.containers.[name:discovery].env.[name:POD_NAMESPACE].valueFrom
value: |
fieldRef:
apiVersion: v2
fieldPath: metadata.myPath
# Deletion of list item
- path: spec.template.spec.containers.[name:discovery].env.[name:REVISION]
# Deletion of map item
- path: spec.template.spec.containers.[name:discovery].securityContext
- kind: Service
name: istiod
patches:
- path: spec.ports.[name:https-dns].port
value: 11111 # OVERRIDDEN
將檔案傳遞給 istioctl manifest generate -f patch.yaml
會將上述修補套用到預設設定檔輸出資訊清單。 這兩個修補的資源將如下所示進行修改 (為了簡潔起見,省略了資源的某些部分)
apiVersion: apps/v1
kind: Deployment
metadata:
name: istiod
spec:
template:
spec:
containers:
- args:
- 60m
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v2
fieldPath: metadata.myPath
name: discovery
ports:
- containerPort: 1234
---
apiVersion: v1
kind: Service
metadata:
name: istiod
spec:
ports:
- name: https-dns
port: 11111
---
請注意,修補是按照給定的順序套用的。 每個修補都套用在上一個修補的輸出之上。 修補中輸出資訊清單中不存在的路徑將會建立。
清單項目路徑選取
istioctl --set
旗標和 IstioOperator
CR 中的 k8s.overlays
欄位都支援透過 [index]
、[value]
或 [key:value]
進行清單項目選擇。 --set
旗標還會在資源中建立路徑中遺失的任何中間節點。