Kubernetesコントローラーとオペレーターとは何ですか?
Kubernetesの用語「コントローラー」と「オペレーター」は、クラスターを望ましい状態に遷移させる2つの異なるパターンを指します。コントローラーは確立された概念であり、一方、オペレーターは最近になって特定のアプリケーション向けのコントローラーを説明するために登場しました。
制御ループ
Kubernetes クラスターは制御ループで機能します。クラスターが何をすべきかを YAML マニフェストを書いて適用することによって定義します。クラスター内のコントローラーは要求された変更を検出し、状態を調整するためにアクションを起こします。これは、あなたが新しいマニフェストを送信した後に非同期に発生します。
コントローラーは、クラスタのリソースを監視し、定義された状態から逸脱しているかどうかを評価し、それらを再び整合性を持たせるために必要な調整を行う責任があります。彼らは完全に自動化されたコンポーネントであり、干渉なしに動作します。
エコシステム内には、いくつかの種類のコントローラーが存在します。いくつかはクラスターのレベルで動作し、他はワークロードを管理します。マニフェストで定義する日常的なKubernetesリソースは、コントローラーになることができます:
Deployment
,
ReplicaSet, および類似の例はコントローラーの定義を満たします。彼らはネストされたオブジェクトの管理を担い、ユーザー定義のレプリカ数を維持します。
コントローラーとは何か?
コントローラーとは、クラスタ内にあり、少なくとも1つの他のKubernetesリソースタイプを追跡するものです。コントローラーは受動的であったり能動的であったりします。能動的なコントローラーは必要なアクションを自ら実行しますが、受動的なものは他のコンポーネントやクラスタAPIサーバーに変更を伝えます。
コントローラーの役割は意図的に抽象的であるため、特定のオブジェクトの監視を超えた共通の機能はありません。特定の条件を満たすPodを自動的に削除するコントローラーを持つことができます。
eligible-for-autodelete注釈。
Kubernetesにおいて、コントローラーは自動制御ループ機能を実装するためのパターンに過ぎません。各コントローラーには独自の目的と特性がありますが、常にクラスタのオブジェクトや設定を監視しています。
演算子についてはどうですか?
オペレーターは、コントローラーの特殊な形態です。オペレーターはコントローラーパターンを実装し、クラスターを定義された状態に向けて移動させますが、いくつかの追加的な特性も持っています。この用語はもともとCoreOSによって作られましたが、現在ではKubernetesによっても広く採用されています。
オペレーターは特定のアプリケーションに合わせて調整されています。彼らはカスタムリソース定義を通じてKubernetes API拡張を追加し、管理するアプリケーションで使用される新しいオブジェクトタイプを作成します。
いくつかの人気のあるコミュニティアプリケーションには、独自のオペレーターが付属しています。これにより、クラスター内の管理ソフトウェアのインストール、構成、および維持が容易になります。etcd、Fluentd、Prometheus、そして他の多くの重要なプロジェクトに対するオペレーターがあり、これらは一般的にクラスターに展開されます。
これらの作業負荷は複雑で、いくつかの個々のコンポーネントから構成されている可能性があります。それらは、インストールのライフサイクル全体で管理する必要があるアプリケーション固有のロジックを含むことが多いです。
オペレーターの概念は、通常のコントローラーと同じ原則を使用してこれらのアプリケーションを監視する方法を提供します。オペレーターは、特定のアプリケーションを正しいユーザー定義の状態に移動させるためにカスタムリソースを使用する専門的なコントローラーに過ぎません。
オペレーターは通常、カスタムリソースに設定データを提供することによって構成されます。オペレーターはアプリケーションの知識を使って、そのデータをクラスター内の具体的なアクションに変換します。これらのアクションにより、設定リソースで定義された状態に一致するアプリの機能するインストールが組み立てられます。
演算子は何に使われるのですか?
オペレーターはドメイン固有であるため、それぞれ異なる機能を含みます。一般に、オペレーターは以下のいくつかの機能を提供することが期待できます:
- 自動監視とアラート - オペレーターは通常、自分のアプリケーションが正しく動作していないことを知っており、適切なアラートを生成します。
- 時間の経過に伴う自動バージョンアップグレード - オペレーターは、クラスターの変更を自動的に適用して、新しいアプリの更新を入手可能になると同時にインストールできることが多いです。これにより、運用チームのメンテナンス負担が大幅に軽減されます。
- カスタムリソースのインストール - オペレーターはアプリのカスタムリソースをKubernetes APIサーバーに追加し、クラスタがワークロードをホストできるように準備します。
- 自動スケーリングを提供する - ドメイン特有の知識を持つオペレーターは、設定されたレプリカの数が現在のトラフィックを快適に処理するには少なすぎると認識し、新しいインスタンスを立ち上げてパフォーマンスを維持できます。
- ライフサイクル管理 - オペレーターは、新しいアプリケーションインスタンスがすべての前提条件が満たされた環境で起動することを確認します。また、レプリカが停止した後に必要なクリーンアップも行います。
- ストレージ管理とバックアップ - 一部のオペレーターは永続的ストレージの設定を支援します。彼らは自分のアプリケーションを理解しているため、破壊的な操作を適用する前にバックアップを取ることもあります。
新しいワークロードを展開する前に、すべての機能をゼロから組み立てるのは複雑で、維持管理も難しくなります。オペレーターを使用すると、ベンダー承認の戦略を使って、自己管理型でKubernetesネイティブな複雑なシステムをクラスターに展開できます。
オペレーターの利点は、それを提供するいくつかのアプリケーションで明確に観察できます。GitLabのバージョン管理ソフトウェアは複雑なコンポーネントのスタックですが、そのオペレーターは完全に自動化されたオートスケーリング、ローリングアップグレード、バックアップ、さらにPrometheusとGrafanaを使用したメトリクス可視化スタックを提供します。オペレーターをクラスターに追加するだけで、すぐに使用できる状態になります。
別のオペレーターはMongoDBのもので、定義した単一の仕様セットからストレージ、データベース、ユーザー、およびMongoの設定をプロビジョニングするための完全管理型方法を提供します。その後、オペレーターはデータベースのワークロードをサポートするようにクラスタを適切に構成します。
自分のオペレーターを作成するには、Kubernetesクライアントライブラリの1つを使用してコントローラーを作成することができます。オペレーターは、Kubernetes REST APIを使用してクラスタおよびそのオブジェクトと対話し、クエリを実行することで開発されます。
結論
コントローラーとオペレーターは、リソースを監視し、クラスターの状態を変更するためのアクションを適用する制御プレーンコンポーネントを説明するKubernetesの用語です。コントローラーがKubernetesレベルの操作に関心を持つのに対し、オペレーターはドメイン特有のロジックを持ち、特定のアプリケーションに合わせて調整されています。
アプリケーションをインストールするためにオペレーターを使用する場合、それはそのインストールを監視し、正常に動作しているかを確認し、更新や設定変更のための状態遷移を自動化するコンポーネントを追加することを意味します。Helmチャートはすでにアプリとその依存関係をデプロイするという課題を解決していますが、オペレーターはさらに一歩進んでいます。オペレーターはアプリのベンダーによって提供され、ワークロードの要件に関する詳細な知識を持ち、インストールの全ライフサイクルにわたって責任を維持します。
オペレーターは、より複雑な状態を持つアプリケーションがそれらを提供し始めるにつれて、可視性が高まる可能性が高いです。メンテナンス、"デイツー"タスク、アップグレードの自動化は、圧迫された運用チームの負担を軽減し、新しく参加した人が本番環境の準備されたデプロイメントを簡単に開始できるようにします。
