IBM Developer Japan Webサイトは2021年3月15日をもって終了となり、日本語コンテンツの一部は、オープンソースとして、提供予定です。 URLはこちら

Kubernetesオペレーターの説明

[Operator Framework]

こんにちは。IBM CloudチームのSai Vennamです。本日はOperatorについてお話ししたいと思います。運用チームのことではなくKubernetesやOpenShiftで使用できるOperator Frameworkです。CoreOS社は2016年にOperator Frameworkを発表しました。同社は現在、Red HatとIBMの子会社です。Operator Frameworkは複雑なKubernetesアプリケーションを管理する便利な方法として、急速に注目を集めるようになりました。

本題に入る前に、Kubernetesの制御ループについてご説明します。これがOperator Frameworkの中核となるからです。この動画ではDeploymentやPodについて取り上げています。

alt

[Kubernetesの制御ループ]

監視

ではKubernetesにおける制御ループとは何かを見ていきましょう。基本的に、制御ループはKubernetesの起動時に動作する中核的機能で、クラスターの実際の状態を監視します。したがって最初のステップは「監視」です。

alt

差異

次に、Kubernetesはクラスターの実際の状態と、ユーザーが希望する状態を比較します。そしてその差異を検出します。

alt

処理

最後にその差異を解決するための処理を実行します。したがって制御ループの最終フェーズは「処理」です。

alt

このように制御ループはKubernetesの動作の中核を担っています。Kubernetesには基本的に各デフォルト・リソースに対して、動作するコントローラーがあります。

[デフォルト・リソース]

Kubernetesにはさまざまなデフォルト・リソースが付属しています。これらのデフォルト・リソースを使用して、Operatorなしでアプリケーションをデプロイする例を見てみましょう。

YAML

エンド・ユーザーはまず、アプリケーションの仕様であるYAMLを記述します。この例ではデプロイを実行しましょう。このDeploymentにはイメージやレプリカなどいくつかの構成を定義する必要があります。これが1つのKubernetesリソースです。

alt

これをKubernetesクラスターにデプロイします。この時点でDeploymentが作成されます。ここで制御ループが開始され、KubernetesはここにあるKubernetesクラスターの状態を監視し、理想の状態と実際の状態の差異をチェックします。

alt

Pod

最初にPodがないことが判明しました。この差異に対処するためKubernetesはいくつかのPodを作成します。

alt

非常に複雑なアプリケーションの場合、YAMLは1つではなく、バックエンド用に2つ目のYAMLがあります。これを2つ目のDeploymentにデプロイします。今度は制御ループのコントローラーによってPodがデプロイされます。

alt

この例はシンプルですが、ここからアプリケーションのスケーリング変更、機密情報や環境変数の設定を行えます。ただしそのたびに新しいKubernetesリソースを作成するか、ここで既存のリソースを編集する必要があります。そのために作業が非常に複雑になります。

Operatorの使用例

では、Operatorを使用した場合はどうなるか見ていきましょう。 最初に行うのはOperator本体のインストールです。Operatorは、チームのメンバーが作成するか、OperatorHubで多数のOperatorの中から選択します。使用可能なOperatorを基にコミュニティーが作成するものもあります。

OLM (Operator Lifecycle Manager)

Kubernetesクラスターで最初に必要になるのが、OLM (Operator Lifecycle Manager)です。OLMはインストールされたOperatorを管理します。次に、Operatorをクラスターにデプロイします。

alt

Operatorの構成要素

Operatorは2つの主要コンポーネントで構成されます。1つはCRDで、もう1つはコントローラーです。CRDとはカスタム・リソース定義のことです。先にDeploymentやPodなどのデフォルト・リソースについて触れました。

alt

[カスタム・リソース]

カスタム・リソースはユーザーがKubernetesで定義するリソースです。あるいはOperatorでリソースを定義する場合もあります。この場合ユーザーはカスタム構成を設定するYAMLを作成できます。コントローラーは、言うなればカスタム制御ループです。クラスター内でPodとして動作しカスタム・リソース定義に従って、制御ループを実行します。

MyApp

このカスタム・アプリケーション・デプロイメントに対してOperatorが作成されます。エンド・ユーザーは複数のDeploymentを記述したり、クラスターに必要なConfigMapや機密情報を設定したりする代わりに、1つのYAMLをデプロイするだけで済みます。このOperatorをMyAppとしておきます。stateful app、frontend appなどわかりやすい名前を付けるとよいでしょう。

alt

ここでいくつかの構成を定義できます。設定済みのデフォルト構成を使用したり、オプションを選択したりすることもできます。このOperatorをクラスターに直接デプロイします。

alt

この時点でOperatorは処理を引き継ぎいで制御ループを実行し必要な処理を判別します。いくつかのDeploymentとPodが必要であることが判明します。

alt

アプローチ

これはアプリケーションを管理するための一種の形式つまりアプローチであり、こちらのアプローチよりも元々扱いやすく、スケーリングも容易です。エンド・ユーザーは自分に公開されている構成について考慮するだけでいいからです。Operatorは、制御ループや、アプリケーションの現在の状態および、目的とする状態を管理します。

Operatorの自作

優れたOperatorが既に存在しています。例えば、etcd、各種データベース、IBM Cloudサービスなどを管理するOperatorです。現在、そうしたすべてのOperatorはOperatorHubで公開されています。しかし独自のOperator、つまりここに描き出したような、自分のアプリケーション・アーキテクチャーで実行可能なカスタムOperatorを開発したい場合もあります。

Operator SDK

それを可能にする方法はいくつかあります。Operator SDKと呼ばれるツールを使用するとOperatorを自作できます。

Helm

最も簡単にOperatorの開発を開始するにはHelmを使用します。HelmアプローチではHelmチャートを取得してOperatorに適用し、構成を公開します。既存のチャートを使用して、Operatorをここに示したような、かなり成熟したレベルまで高めることができます。

alt

[Operatorに適用される5つの成熟度レベル]

Operatorの成熟度は、ここに示す5つのレベルに分類されます。Helmは最初の2つの成熟度レベルに対応します。では成熟度レベルについて見ていきましょう。

alt

第1レベル

第1レベルは基本的なインストールです。原則として、第1レベルでは必要なリソースのプロビジョニングのみを行えます。

alt

第2レベル

第2レベルではもう少し進歩して、アップグレードが可能になります。Operatorでの定義に従ってマイナーおよびパッチ・バージョンをアップグレードできます。ここまではHelmを使用して実行できます。

alt

それではその先の3つの成熟度レベルはどうかというとGoまたはAnsibleを使用できます。GoおよびAnsibleはOperatorを5つの成熟度レベルすべてに適合させることができます。では簡単に見ていきましょう。

alt

第3レベル

第3レベルではライフサイクル全体がサポートされます。これはストレージやアプリケーションのライフサイクルです。バックアップや障害回復も可能です。構成、開発済みの機能がOperatorに組み込まれます。開発者が誰であるかは関知しません。

alt

第4レベル

第4レベルでは洞察を取得できます。これによってOperatorでの詳細なメトリック、分析、ロギングなどが可能になります。

alt

第5レベル

第5レベルでは「オートパイロット」と呼ばれる機能を利用できます。その名前が示す通りOperatorそのものに多数の機能が組み込まれています。

alt

基本的には、水平および垂直方向のスケーリングが自動化されます。構成も自動的に調整されます。Operatorを基盤とするアプリケーションに異常が発生した場合は、自動的に検出されます。

OperatorHub

これがOperatorに適用される5つの成熟度レベルです。OperatorHubでは、コミュニティーが開発したOperatorと、その成熟度レベルを確認できます。先程も述べましたがOperator SDKでHelm、GoまたはAnsibleを使用してユーザー独自のOperatorを作成できます。

Operatorに関する説明をご覧いただきありがとうございました。

無料のIBM Cloudアカウントに登録すれば、費用をかけずにいつでもクラウドで作業を開始できます。