ハイライト
- Kubernetes Operator は、Kubernetes アプリケーションをパッケージ化、デプロイ、管理する手段です。
- Kubernetes アプリケーションは Kubernetes にデプロイされ、Kubernetes API (アプリケーション・プログラミング・インタフェース) と kubectl ツールを使用して管理されます。
- Kubernetes Operator は、運用タスクを自動化する継続的調整ループを使用してアプリケーションを管理します。
- Operator Framework は、開発者およびランタイムに Kubernetes ツールを提供するオープンソース・プロジェクトです。
- Kubernetes Operator パターンを作成するきっかけとなったのは、Kubernetes にはデータベースやメッセージキューなどの複雑なステートフルシステムを安全に処理するために必要な内部ロジックがないことでした。
- Red Hat OpenShift Operator は、任意のリソースとカスタムロジックを定義して実装することで、ネイティブの OpenShift リソースに関連するカスタムワークフローを自動化できます。
Kubernetes Operator とは
Kubernetes Operator は、Kubernetes API の機能を拡張したアプリケーション固有のコントローラーであり、Kubernetes ユーザーに代わって複雑なアプリケーションのインスタンスを作成、設定、管理します。
Kubernetes のリソースとコントローラーの基本コンセプトをベースに構築されていますが、ドメインまたはアプリケーション固有の知識を含み、管理対象のソフトウェアのライフサイクル全体を自動化します。
Kubernetes では、コントロールプレーンのコントローラーが、クラスタの望ましい状態を実際の状態と繰り返し比較する制御ループを実装します。クラスタの実際の状態が望ましい状態と一致しない場合、コントローラーは問題を修正するためのアクションを実行します。
Operator は、カスタムリソース (CR) を使用してアプリケーションとそのコンポーネントを管理するカスタム Kubernetes コントローラーです。おおまかな構成および設定は、CR 内でユーザーが提供します。Kubernetes Operator は、Operator のロジックに組み込まれたベストプラクティスに基づいて、高レベルの指示を低レベルのアクションに変換します。
カスタムリソースは、Kubernetes の API 拡張メカニズムです。カスタムリソース定義 (CRD) は CR を定義し、Operator のユーザーが使用できるすべての構成を一覧します。
Kubernetes Operator は CR タイプを監視し、アプリケーション固有のアクションを実行して、現在の状態をそのリソースの望ましい状態に一致させます。
Kubernetes Operator は、カスタムリソース定義を通じて新しいオブジェクトタイプを導入します。カスタムリソース定義は、kubectl を介したインタラクションやロールベースのアクセス制御 (RBAC) ポリシーへの組み込みなど、Kubernetes API で組み込みオブジェクトと同様に処理できます。
Kubernetes Operator は実行中のアプリケーションを継続的に監視し、データのバックアップ、障害からの回復、アプリケーションの継続的なアップグレードを自動的に行うことができます。
Kubernetes Operator が実行するアクションには、複雑なアプリケーションのスケーリング、アプリケーションのバージョンのアップグレード、さらには特殊なハードウェアによるコンピュートクラスタ内のノードのカーネルモジュールの管理まで、ほぼあらゆるものが含まれます。
Kubernetes Operator によるアプリケーションの管理方法
Kubernetes Operator は、通常は人間のエンジニアが実行する運用タスクを自動化する継続的な調整ループを使用して、アプリケーションを管理します。これらの Operator はアプリケーション固有のブリッジとなり、標準の Kubernetes リソースをソフトウェアの複雑な内部運用要件へとつなぐ役割を担います。
Kubernetes は、Web アプリケーション、モバイルバックエンド、API サービスなどのステートレス・アプリケーションを管理および拡張できます。これらのアプリケーションの動作に関する追加の知識は必要ありません。Kubernetes に組み込まれている機能は、これらのタスクを容易に処理するように設計されています。
ただし、データベースや監視システムなどのステートフル・アプリケーションには、Kubernetes にはないドメイン固有の知識が追加で必要になります。この知識は、これらのアプリケーションをスケーリング、アップグレード、再構成するために必要です。
Kubernetes Operator は、この特定のドメイン知識を Kubernetes 拡張機能にエンコードして、アプリケーションのライフサイクルを自動化および管理できるようにします。
Kubernetes Operator により、手動による難しいアプリケーション管理タスクが不要になり、それらのプロセスをスケーラブルで反復可能、かつ標準化されたものにできます。
アプリケーション開発者の場合、Operator を使用することで、アプリケーションが依存する基盤サービスのデプロイと実行が容易になります。
インフラストラクチャ・エンジニアやベンダーの場合、Operator を使用することで Kubernetes クラスタにソフトウェアを配布する一貫した方法が得られ、Operator がアプリケーションの問題を特定して修正するため、サポートの負担が軽減されます。
Operator を使用すると、Kubernetes で提供される基本的な自動化機能を超えて、タスクを自動化するコードを記述できます。Operator は、DevOps または SRE (サイト信頼性エンジニアリング) のアプローチを採用するチームが SRE の手法を Kubernetes に適用できるようにするために開発されました。
Operator パターンの機能の目的は、人間のオペレーターがサービスを管理する方法の意図を取り込むことです。人間のオペレーターは、アプリケーションやサービスがどのように機能するべきか、どのようにデプロイするのか、発生する可能性のある問題をどのように修正するのかについて、完全に理解している必要があります。
通常はサイト信頼性エンジニアまたは運用チームが、アプリケーションを管理するためのソフトウェアを作成しますが、Operator は人間の運用知識を取り入れてソフトウェアにエンコードし、Kubernetes ワークロードを管理およびデプロイして、手作業を排除するように設計されています。
Operator は、特定のアプリケーションのインストール、実行、アップグレードに関するビジネスロジックに精通したエキスパートによって作成されるのが最適です。
Operator の作成は多くの場合、アプリケーションのインストールとセルフサービス・プロビジョニングの自動化から始まり、その後、より複雑な自動化機能へと進んでいきます。
また、独自の Operator の開発に役立つ Kubernetes Operator ソフトウェア開発キット (SDK) もあります。この SDK は、Operator を構築、テスト、パッケージ化するためのツールを提供し、Helm チャート、Ansible Playbook、または Golang を使用して Operator を作成するオプションを備えています。
Operator Framework
Operator Framework は開発者およびランタイムに Kubernetes ツールを提供するオープンソース・プロジェクトです。これによって Operator の開発を迅速化できます。
Operator Framework には次のものが含まれています。
- Operator SDK:Kubernetes API の複雑性に関する知識がなくても、開発者は自身の専門知識に基づいて Operator を構築できます。
- Operator Lifecycle Management:Kubernetes クラスタで実行されているすべての Operator のインストール、アップデート、ライフサイクル管理を監視します。
- Operator Metering:専門的なサービスを提供する Operator の使用状況レポートを作成できます。
Operator パターンを使用する理由と動機
Kubernetes Operator パターンが作成されたのは、標準的な Kubernetes には欠けている重大な制約がきっかけとなっています。その欠けているものとは、データベースやメッセージキューなどの複雑なステートフルシステムを安全に処理するために必要な内部ロジックです。従来、これらのシステムを管理する際には、バックアップ、バージョンのアップグレード、マルチノードのフェイルオーバーのための Playbook を人間の SRE (サイト信頼性エンジニア) が手動で実行する必要がありました。
Operator は、人間が持つ運用知識をソフトウェアに直接エンコードすることで、この課題を解決します。Operator は、カスタムリソースを自動化された調整ループと組み合わせることで、手動の運用チェックリストを自動化された継続的な自己修復へと変換します。これにより、手動での構成ドリフトが排除され、リスクのないローリング・アップグレードが可能になるとともに、まったく同じ標準化された宣言型の YAML マニフェストを使用して複雑で可用性の高いソフトウェアを任意のクラウド・プラットフォームにデプロイできるようになるなど、多大なメリットがエンジニアリングチームにもたらされます。
Red Hat OpenShift での Operator の使用方法
Red Hat® OpenShift® Operator は、Red Hat OpenShift の拡張メカニズムです。任意のリソースとカスタムロジックを定義して実装し、ネイティブ OpenShift リソースに関連するカスタムワークフローを自動化できます。Red Hat がこちらのブログ記事で詳しく説明しています。
Red Hat® OpenShift® はエンタープライズ対応の Kubernetes コンテナ・プラットフォームであり、ハイブリッドクラウドやマルチクラウドのデプロイメントを管理するフルスタックの自動運用機能を備えています。
Red Hat OpenShift は Kubernetes Operator を使用してプラットフォーム全体を自律的に実行するとともに、Kubernetes オブジェクトを通じてネイティブに構成を公開します。これにより、迅速なインストールと頻繁で堅牢なアップデートが可能になります。
Red Hat OpenShift には、ソフトウェアベンダーおよびオープンソース・プロジェクトが提供する認定済み Operator のレジストリである、OperatorHub が組み込まれています。OperatorHub では、Operator のライブラリを参照してインストールできます。これらの Operator は Red Hat OpenShift での動作が検証済みであり、ライフサイクル管理を容易にするためにパッケージ化されています。
Red Hat OpenShift でアプリケーション開発を加速する
Red Hat OpenShift により、組織はセキュリティとコンプライアンスを確保しながら、従来のワークロードと AI を活用したワークロードを構築、加速、スケーリングすることができます。その詳細をご覧ください。