介紹 Istio Operator

介紹 Istio 新的基於 Operator 的安裝和控制平面管理功能。

2019 年 11 月 14 日 | 作者:Martin Ostrowski - Google, Frank Budinsky - IBM

Kubernetes operators 提供一種將人類操作知識編碼到軟體中的模式,並且是簡化軟體基礎架構組件管理的常用方法。Istio 是一個自動化 operator 的自然候選者,因為它管理起來具有挑戰性。

到目前為止,Helm 一直是安裝和升級 Istio 的主要工具。Istio 1.4 引入了一種使用 istioctl 安裝的新方法。這種新的安裝方法建立在 Helm 的優勢之上,並增加了以下功能

Helm 安裝方法正在逐步淘汰。從未使用 Helm 安裝的 Istio 1.4 升級也將被新的 istioctl 升級功能取代。

新的 istioctl 安裝命令使用 自訂資源來設定安裝。自訂資源是新的 Istio operator 實作的一部分,旨在簡化 Istio 的常見管理任務,例如安裝、升級和複雜的組態變更。安裝和升級的驗證和檢查與工具緊密整合,以防止常見錯誤並簡化疑難排解。

Operator API

每個 operator 實作都需要一個 自訂資源定義 (CRD) 來定義其自訂資源,也就是其 API。Istio 的 operator API 由 IstioControlPlane CRD 定義,該 CRD 是從 IstioControlPlane proto 產生。API 使用單一欄位來選擇設定檔,支援 Istio 目前所有的 組態設定檔。例如,以下 IstioControlPlane 資源使用 demo 設定檔設定 Istio

apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
metadata:
  namespace: istio-operator
  name: example-istiocontrolplane
spec:
  profile: demo

然後,您可以使用其他設定來自訂組態。例如,停用遙測功能

apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
metadata:
  namespace: istio-operator
  name: example-istiocontrolplane
spec:
  profile: demo
  telemetry:
    enabled: false

使用 istioctl 安裝

使用 Istio operator API 的建議方法是透過一組新的 istioctl 命令。例如,將 Istio 安裝到叢集中

$ istioctl manifest apply -f <your-istiocontrolplane-customresource>

編輯組態檔案並再次執行 istioctl manifest apply 來變更安裝組態。

若要升級到新版本的 Istio

$ istioctl x upgrade -f <your-istiocontrolplane-config-changes>

除了在 IstioControlPlane 資源中指定完整組態外,istioctl 命令也可以使用 --set 旗標傳遞個別設定

$ istioctl manifest apply --set telemetry.enabled=false

還有許多其他 istioctl 命令,例如,可協助您列出、顯示和比較組態設定檔和資訊清單。

如需更多詳細資訊,請參閱 Istio 安裝說明

Istio 控制器 (alpha)

Operator 實作使用 Kubernetes 控制器來持續監控其自訂資源並套用相應的組態變更。Istio 控制器會監控 IstioControlPlane 資源,並透過更新對應叢集中的 Istio 安裝組態來回應變更。

在 1.4 版本中,Istio 控制器處於開發的 alpha 階段,尚未與 istioctl 完全整合。但是,可以使用 kubectl 命令進行實驗。例如,若要將控制器和預設版本的 Istio 安裝到您的叢集中,請執行以下命令

$ kubectl apply -f https://<repo URL>/operator.yaml
$ kubectl apply -f https://<repo URL>/default-cr.yaml

然後,您可以變更 Istio 安裝組態

$ kubectl edit istiocontrolplane example-istiocontrolplane -n istio-system

一旦資源更新,控制器就會偵測到變更,並透過相應更新 Istio 安裝來回應。

operator 控制器和 istioctl 命令都共用相同的實作。主要差異在於執行內容。在 istioctl 的情況下,操作會在管理使用者命令的執行和安全性內容中執行。在控制器的情況下,叢集中的 Pod 會在其安全性內容中執行程式碼。在這兩種情況下,都會根據結構描述驗證組態,並執行相同的正確性檢查。

從 Helm 移轉

為了協助簡化從先前使用 Helm 的組態轉換,istioctl 和控制器支援完整 Helm 安裝 API 的直通存取。

您可以透過在選項名稱前面加上字串 values.,使用 istioctl --set 傳遞 Helm 組態選項。例如,代替此 Helm 命令

$ helm template ... --set global.mtls.enabled=true

您可以使用此 istioctl 命令

$ istioctl manifest generate ... --set values.global.mtls.enabled=true

您也可以在 IstioControlPlane 自訂資源中設定 Helm 組態值。如需詳細資訊,請參閱使用 Helm 自訂 Istio 設定

另一個協助從 Helm 轉換的功能是 alpha istioctl manifest migrate 命令。此命令可用於自動將 Helm values.yaml 檔案轉換為對應的 IstioControlPlane 組態。

實作

已建立數個架構,藉由為部分或所有元件產生 Stub 來協助實作 operators。Istio operator 是在 kubebuilderoperator framework 的協助下建立。Istio 的安裝現在使用 proto 來描述 API,以便可以根據結構描述執行執行時間驗證。

如需有關實作的詳細資訊,請參閱 Istio operator 儲存庫中的 README 和 ARCHITECTURE 文件。

摘要

從 Istio 1.4 開始,Helm 安裝將被使用新的 operator 自訂資源定義 IstioControlPlane 作為組態 API 的新 istioctl 命令取代。此外,還提供了一個 alpha 控制器,供早期實驗 operator 使用。

新的 istioctl 命令和 operator 控制器都會驗證組態結構描述,並針對安裝變更或升級執行一系列檢查。這些檢查與工具緊密整合,以防止常見錯誤並簡化疑難排解。

Istio 維護者期望這種新方法將改善使用者在 Istio 安裝和升級期間的體驗、更好地穩定安裝 API,並協助使用者更好地管理和監控其 Istio 安裝。

我們歡迎您在 discuss.istio.io 上提供有關新安裝方法的意見回饋。

分享這篇文章