OperatorHub を楽しむ

Operator は、OpenShift Kubernetes クラスター内で複雑なワークロードを実行するメカニズムとなります。このチュートリアルでは、クラスター内のデータベース・インスタンスを管理するコミュニティー版データベース Operator を使用して、よく使われている PostgreSQL データベースのインスタンスをセットアップする方法を説明します。

Operator は、新しいネイティブ・オブジェクトを Kubernetes に導入します。Operator はクラスター内のサービスに応じてポッドをインスタンス化するファクトリーのようなものであるというのが、1 つの捉え方とです。Operator を作成することで、アプリケーションのアップグレードとバックアップを行ったり、ある種のエラーから復旧したりできます。さらに、Operator の精巧さと機能によっては、運用チームに代わる、特定のビジネス・ロジックの情報源として使用することもできます。

OpenShift には、UI、oc または kubectl コマンド・ライン・インターフェースで操作できる多数のリソース (ノード、デプロイメント、ポッドなど) が備わっています。Operator は、Kubernetes に応じた新しいカスタム・オブジェクトを作成し、それぞれのオブジェクトの機能に固有のロジックを設定することができます。リソース固有の方法で状態を調整するために、Operator はコントローラーを使用します。OpenShift 4 で導入された OperatorHub は、管理者がインストールできるアプリケーションや、開発者が個々のプロジェクトに追加できるアプリケーションのカタログです。アプリケーションをデプロイするにはテンプレートを使用できますが、通常、テンプレートではカスタム・リソースが Kubernetes にインストールされません。さらに重要な点として、アプリケーションがいったん実行された後は環境内の変化に対応できないためサービスを管理きません。

このチュートリアルでは、PostgreSQL データベース・インスタンスを作成するために、コミュニティー版 Operator を既存の OpenShift プロジェクトにデプロイするプロセスを辿っていきます。この Operator でデプロイされた PostgresSQL インスタンスを使用するマイクロサービス・アプリケーションについては、コード・パターン「データ・プライバシーを重視した、顧客ロイヤルティー向けモバイル・アプリのバックエンド」を参照してください。

このチュートリアルで取り上げるサンプルでは、Red Hat® OpenShift® on IBM Cloud™ を利用しています。

前提条件

このチュートリアルの対象読者は、Kubernetes または OpenShift についての十分な知識を基に、OpenShift 4 に含まれる Operator と OperatorHub の使い方を新たに学ぼうと目指しているソフトウェア開発者です。

このチュートリアルに従うには、あらかじめ以下の手順を完了しておいてください。

  1. IBM Cloud にログインします。アカウントをまだお持ちでない場合は作成します。
  2. IBM Cloud 上で OpenShift 4.3 クラスターを作成します。
  3. プロジェクトを作成します。

所要時間

OpenShift クラスターをプロビジョニングする時間は別として、このチュートリアルを完了するには約 30 分かかります。

OperatorHub と OLM について理解する

Red Hat の公式 Operator と (公式にはサポートされていない)「コミュニティー」版 Operator を含め、 Operator OperatorHub にリストアップされている Operator は、Operator Lifecycle Management (OLM) サービスによって管理されます。このサービス自体も Kubernetes Operator の 1 つです。Red Hat Marketplace で、Red Hat OpenShift 上での動作が認定されたオペレーターにアクセスしてください。

OLM には、インストール済み Operator をリストアップする subscription オブジェクトが用意されています。このオブジェクトを使用して、インストール済みオブジェクトを調べることができます。

このチュートリアルで説明する手順に従って Operator をインストールした後、oc get sub コマンドを使用すると、Operator カタログを通じてインストールされた Operator をリストアップできます。

$   oc get subs
NAME                               PACKAGE                            SOURCE                CHANNEL
postgresql-operator-dev4devs-com   postgresql-operator-dev4devs-com   community-operators   alpha

ステップ 1. コミュニティー版 Operator を見つける

まず、OpenShift 内で管理者モードに切り替えて、OperatorHub を参照します。ナビゲーション内で「Operators (Operator)」、「OperatorHub」の順に選択します。

OpenShift OperatorHub のスクリーン・キャプチャー

OperatorHub 内で PostgreSQL を検索し、「Install (インストール)」ボタンをクリックして Dev4Devs コミュニティーの PostgreSQL Operator をインストールします。

PostgreSQL Operator のスクリーン・キャプチャー

ステップ 2. Operator にサブスクライブする

既存の名前空間の中から、Operator のインストール先とする名前空間を選択する必要があります。この名前空間に、データベースのインスタンスを作成できます。

OpenShift OperatorHub のスクリーン・キャプチャー

Operator を最新の状態に維持するためのチャネルの 1 つにサブスクライブして Operator をインストールした後は、インストールされた Operator を確認できます。それには、ナビゲーションにある「Operators (Operator)」から「Installed Operators (インストール済み Operator)」を選択します。以下に示されているように、PostgreSQL Operator が表示されます。

OpenShift OperatorHub のスクリーン・キャプチャー

ステップ 3. 開発者向けビューに切り替えてデータベースを作成する

管理者向けビューから開発者向けビューに切り替えて、「Topology (トポロジー)」を選択します。デプロイ済みの Operator が表示されます。

左側のパネル内にある「+Add (+追加)」リンクをクリックし、以下のスクリーン・キャプチャーに示されている「Database (データベース)」タイルを選択します。

OpenShift の「Add (追加)」画面のスクリーン・キャプチャー

データベース・カタログから、Operator で使用する Postgres の「Database Database」タイルを選択します。

OpenShift の「Add (追加)」画面のスクリーン・キャプチャー

表示される画面で、データベースに割り当てるボリュームのサイズと、データベースのリソース上限を選択できます。 この画面では、データベースの名前と名前空間も指定できます。以下のスクリーン・キャプチャーに示されているように、この例ではデータベース名として loyaltydb を指定し、名前空間として example-loyalty を指定します。

OpenShift OperatorHub のスクリーン・キャプチャー

以下に、Operator によって作成された新しいデータベースを示します。

$   oc get pods

NAME                                  READY     STATUS    RESTARTS   AGE
loyaltydb-8565d6bfd9-dm88t             1/1       Running   1          6d4h
pdb-xl-76c6d4c5bf-z5kfz                1/1       Running   1          5d2h
postgresql-operator-576dc87c4-vtr6j   1/1       Running   0          6d21h

Kubernetes ネイティブ・オブジェクトの databases CRD が用意できたので、以下の例に示すように oc を使用してこのオブジェトに対するクエリーを実行できます。あるいは、kubectl を使用してクエリーを実行することもできます。

$   oc get databases

NAME       AGE
loyaltydb   6d6h
db-xl      5d4h

$   kubectl get databases

NAME       AGE
loyaltydb   6d6h
db-xl      5d4h

Operator はデータベースをインスタンス化するだけでなく、データベース・ストレージの PersistentVolumeClaim も作成します。

ステップ 4. データベースに接続する

クラスター外部から外部 IP を使用してアクセスできるようにするために、oc expose を実行してサービスを公開します。OpenShift のルートでサポートされるのは HTTP/HTTPS トラフィックのみです。そのため、OpenShift のルートを使用して PostgreSQL インスタンスにアクセスすることはできません。

$ oc expose deploy loyaltydb --port=5432 --target-port=5432 --type=LoadBalancer --name my-pg-svc

service/my-pg-svc exposed
$  oc get svc

NAME                          TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)             AGE
my-pg-svc                     LoadBalancer   172.21.48.131   169.aaa.bbb.ccc   5432:32469/TCP      12s

これで、前述のようにクラスター外部から外部 IP を使用してデータベースにアクセスできるようになりました。

データベースが本番環境に移行されたら、LoadBalancer を削除できます。LoadBalancer を削除すると、データベースへの外部アクセスが排除され、サービスは、内部クラスター IP またはサービスを介さなければデータベースに接続できなくなります。

まとめ

OpenShift OperatorHub では、「アプリ・ストア」感覚でサービスを検索して OpenShift クラスターにインストールできます。OLM サービスとそのコマンド・ライン・インターフェースを利用すれば、Operator を管理して最新の状態に維持できます。

OpenShift 4.3 で導入されている OperatorHub を表示すれば、クラスターにインストールできるその他のサービスを見つけることができます。また、operatorhub.io にアクセスすると、手作業でインストールできる、さらに多くの Operator のリストを確認できます。