Istio Operatorのご紹介
Istioの新しいオペレーターベースのインストールとコントロールプレーン管理機能をご紹介します。
Kubernetes オペレーターは、人間の運用知識をソフトウェアにエンコードするためのパターンを提供し、ソフトウェアインフラストラクチャコンポーネントの管理を簡素化する一般的な方法です。Istioは管理が難しいことから、自動化オペレーターの当然の候補です。
これまで、HelmがIstioをインストールおよびアップグレードするための主要なツールでした。Istio 1.4では、istioctlを使用した新しいインストール方法が導入されました。この新しいインストール方法は、Helmの長所に以下の点を追加したものです。
- ユーザーは1つのツール`istioctl`をインストールするだけで済みます。
- すべてのAPIフィールドが検証されます。
- APIに含まれていない小さなカスタマイズは、チャートやAPIの変更を必要としません。
- バージョン固有のアップグレードフックを簡単かつ確実に実装できます。
Helmインストール方法は廃止予定です。Helmで最初にインストールされていないバージョンのIstio 1.4からのアップグレードも、新しいistioctlアップグレード機能に置き換えられます。
新しい`istioctl`インストールコマンドは、カスタムリソースを使用してインストールを構成します。カスタムリソースは、Istioのインストール、アップグレード、および複雑な構成変更の一般的な管理タスクを簡素化することを目的とした新しいIstioオペレーター実装の一部です。インストールとアップグレードの検証とチェックはツールと緊密に統合されており、一般的なエラーを防ぎ、トラブルシューティングを簡素化します。
オペレーターAPI
すべてのオペレーター実装には、カスタムリソース、つまりAPIを定義するためのカスタムリソース定義(CRD)が必要です。IstioのオペレーターAPIは、`IstioControlPlane` 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オペレーター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コントローラー(アルファ版)
オペレーター実装は、Kubernetesコントローラーを使用してカスタムリソースを継続的に監視し、対応する構成変更を適用します。Istioコントローラーは、`IstioControlPlane`リソースを監視し、対応するクラスターのIstioインストール構成を更新することで変更に反応します。
1.4リリースでは、Istioコントローラーは開発のアルファ段階にあり、`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インストールを更新することで応答します。
オペレーターコントローラーと`istioctl`コマンドはどちらも同じ実装を共有しています。大きな違いは実行コンテキストです。`istioctl`の場合、操作は管理ユーザーのコマンド実行とセキュリティコンテキストで実行されます。コントローラーの場合、クラスター内のポッドがセキュリティコンテキストでコードを実行します。どちらの場合も、構成はスキーマに対して検証され、同じ正当性チェックが実行されます。
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からの移行に役立つもう1つの機能は、アルファ版のistioctl manifest migrateコマンドです。このコマンドを使用して、Helmの`values.yaml`ファイルを対応する`IstioControlPlane`構成に自動的に変換できます。
実装
コンポーネントの一部またはすべてのスタブを生成することで、オペレーターの実装を支援するために、いくつかのフレームワークが作成されています。Istioオペレーターは、kubebuilderとoperator frameworkの組み合わせを使用して作成されました。Istioのインストールでは、スキーマに対してランタイム検証を実行できるように、APIを記述するためにprotoを使用するようになりました。
実装の詳細については、IstioオペレーターリポジトリのREADMEおよびARCHITECTUREドキュメントを参照してください。
まとめ
Istio 1.4以降、Helmインストールは、構成APIの新しいオペレーターカスタムリソース定義`IstioControlPlane`を使用する新しい`istioctl`コマンドに置き換えられます。オペレーターの早期試用のためのアルファコントローラーも利用可能です。
新しい`istioctl`コマンドとオペレーターコントローラーはどちらも構成スキーマを検証し、インストールの変更またはアップグレードのためにさまざまなチェックを実行します。これらのチェックはツールと緊密に統合されており、一般的なエラーを防ぎ、トラブルシューティングを簡素化します。
Istioメンテナーは、この新しいアプローチにより、Istioのインストールとアップグレード中のユーザーエクスペリエンスが向上し、インストールAPIがより安定し、ユーザーがIstioインストールの管理と監視を改善できると期待しています。
新しいインストール方法に関するフィードバックは、discuss.istio.ioまでお寄せください。