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 の使い方を新たに学ぼうと目指しているソフトウェア開発者です。
このチュートリアルに従うには、あらかじめ以下の手順を完了しておいてください。
所要時間
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」の順に選択します。
OperatorHub 内で PostgreSQL を検索し、「Install (インストール)」ボタンをクリックして Dev4Devs コミュニティーの PostgreSQL Operator をインストールします。
ステップ 2. Operator にサブスクライブする
既存の名前空間の中から、Operator のインストール先とする名前空間を選択する必要があります。この名前空間に、データベースのインスタンスを作成できます。
Operator を最新の状態に維持するためのチャネルの 1 つにサブスクライブして Operator をインストールした後は、インストールされた Operator を確認できます。それには、ナビゲーションにある「Operators (Operator)」から「Installed Operators (インストール済み Operator)」を選択します。以下に示されているように、PostgreSQL Operator が表示されます。
ステップ 3. 開発者向けビューに切り替えてデータベースを作成する
管理者向けビューから開発者向けビューに切り替えて、「Topology (トポロジー)」を選択します。デプロイ済みの Operator が表示されます。
左側のパネル内にある「+Add (+追加)」リンクをクリックし、以下のスクリーン・キャプチャーに示されている「Database (データベース)」タイルを選択します。
データベース・カタログから、Operator で使用する Postgres の「Database Database」タイルを選択します。
表示される画面で、データベースに割り当てるボリュームのサイズと、データベースのリソース上限を選択できます。
この画面では、データベースの名前と名前空間も指定できます。以下のスクリーン・キャプチャーに示されているように、この例ではデータベース名として loyaltydb
を指定し、名前空間として example-loyalty
を指定します。
以下に、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 のリストを確認できます。