Teiid Operator (Community版)

Kenta Kosugi
10 min readNov 3, 2019

--

Red Hat Integration — Data Virtualization

前回、Data Virtualization の Tech Preview について書きました。今回は OpenShift を利用していることを前提として、Data Virtualization の Upstream である Teiid の Operator について記載します。

※ 前回ご紹介した Tech Preview には Teiid Operator は含まれておりませんのでご注意ください。

Operator ってなに?

Operator については Red Hat のエンジニアブログに過去記事として様々解説があるので割愛させていただきますが、一言で言えば Kubernetes 上の Pod のライフサイクルを管理するための仕組みです。Strimzi(AMQ Streams の UpStream) Operator の説明を山下さんがされているので、そちらをご参照ください。

Teiid Operator

Teiid Operator は簡単に言うと、以下を自動で実行します。

  • 前回説明した仮想データベースの作成、つまり Maven プロジェクト、SpringBoot コード、プロパティファイルの用意
  • SpringBoot コードのビルド(mvn package)
  • ビルドしてできたアーティファクト UberJar をコンテナ化
  • コンテナ化したイメージを Pod として OpenShift 上にデプロイ
  • VirtualDatabase のオートヒーリング

利用者は Operator が理解できる VirtualDatabase を yaml ファイルとして定義するだけです。

※ Teiid Operator は Community 版なので Red Hat からのサポートは受けられない点に注意が必要です。

動かしてみよう

前提

  • OpenShift 4.2 (oc コマンド含む)が使える状態

仮想化対象の Postgres の準備

まず、OpenShift 上で仮想化対象となるデータベースを動作させます。前回と同様 Postgres を使います。

まず「teiid」 プロジェクトを作成します。

$ oc new-project teiid

続いて Postgres を OpenShift 上に作成します。テストするだけなので ephemeral を使用します。
※ postgresql-ephemeral の Template では User や Password はランダムで決定され、DB 名は sampledb で固定されています。

$ oc new-app postgresql-ephemeral

DeploymentConfig、Services、Secrets が作成されます。oc コマンドの出力にユーザー名が表示されるので、メモしておきます。

    The following service(s) have been created in your project: postgresql.        Username: user3MD
Password: tSd17VyJ7U4AuwoX
Database Name: sampledb
Connection URL: postgresql://postgresql:5432/

user3MD が今回作成されたユーザー名です。

起動した Postgres の Pod 名を確認します。STATUS が ContainerCreating の場合は Running になるまで待ちましょう。

$ oc get pods
NAME READY STATUS RESTARTS AGE
postgresql-1-cjljj 1/1 Running 0 13m
postgresql-1-deploy 0/1 Completed 0 13m

起動した Pod に入って、psql コマンドを実行します。引数にユーザー名を渡して psql を実行します。

$ oc rsh postgresql-1-cjljj
sh-4.2$ psql -U user3MD -d sampledb
psql (10.6)
Type "help" for help.
sampledb=>

SQL 文をコンソールに貼り付けます。

テーブルができたか確認します。

sampledb=> \dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+---------
public | address | table | user3MD
public | customer | table | user3MD
(2 rows)

テーブルができたら完了です。control + d を2回実行して Pod から抜けます。次は Teiid Operator をインストールします。

Teiid Operator のインストール

OpenShift の OperatorHub から Teiid Operator をインストールします。この手順は admin 権限を持ったユーザーで実施する必要があります。
手順に従ってインストールするのみですが、Operator を適用するプロジェクトは予め作成した teiid プロジェクトにしてください。

Install Teiid Operator

Status が Install Succeeded になれば準備完了です。あとは仮想データベースを作成するのみです。

Operator のインストール

仮想データベースの作成

事前に仮想データベースを定義する yaml ファイルを準備しておきました。

teiid-virtualdatabase.yml

kind が VirtualDatabase になっているのが確認できます。この yaml ファイルでは前回紹介した SpringBoot のソースコードは全く登場しません。代わりに customer-vdb.ddl で定義した内容が上記の yaml ファイルに定義されているのみです。Postgres への接続で使用するユーザー名、パスワード、データベース名は Secrets から利用しているため、ランダムの要素があっても問題なく接続できるようにしてあります。

それでは oc apply コマンドを適用して、VirtualDatabase を作成してみましょう。

$ oc apply -f https://raw.githubusercontent.com/k-kosugi/teiid-samples/master/teiid-vritualdatabase.yml

apply に成功すると、virtualdatabase-builder-1-build という Pod が動作し始めます。この Pod のログをみてみると、Maven のリポジトリからなにやら色々ダウンロードされているのが伺えます。

Maven リポジトリからのダウンロード

この Pod が Completed になると、次は順に postgres-virtual-database-1-build、postgres-virtual-database-1-deploy という Pod が立ち上がります。

コンテナイメージをダウンロード

ログの中身を見てみるとコンテナイメージをダウンロードしているのがわかります。Maven ビルドが終わったアーティファクトをコンテナ化し、それをデプロイしています。

デプロイが終わると、postgres-virtual-database-1-xxxx という Pod が立ち上がってきます。これが前回ご紹介した Teiid SpringBoot そのものです。

ログを見てみましょう。

Teiid SpringBoot のログ

「TEIIDXXXXX VDB customer.1 is set to ACTIVE」というログが見えます。前回ご紹介したログと同様のログが出力されました。準備したのはyaml のみですが仮想データベースの作成が成功しました。

OpenShift のコンソール画面で「OperatorHub」->「Installed Operators」->「Teiid Operator」の順に飛んで「VirtualDatabase」のタグをクリックすると Custom Resource で作成した “postgres-virtual-database” が作成されているのが確認できます。

Teiid Operator は Teiid SpringBoot を Pod として起動するのと同時に OpenShift クラスター外へ OData を公開するための Route、OpenShift クラスター内で仮想データベースへ接続するための Service を作成します。

OData へアクセスしてみる

「Routes」->「postgres-virutal-database」-> 「Location」にある URL をクリックしてみます。

404 が表示されますが、URL の末尾に /odata/portfolio/CustomerZip をつけてアクセスすると CustomerZip ビューのデータを XML で取得できます。さらに ?$format=json を付与すれば JSON で取得できます。

CustomerZip(XML)

オートヒーリングを試す

VirtualDatabase を試しに削除してみます。

Pod の削除

OpenShift のコンソールから「Workloads」->「Pods」->「postgres-virtual-database-1-xxxxx」-> 右端の 「︙」-> 「Delete Pod」の順に選択します。

ほとんど削除と同時に新しい Pod が立ち上がってきます。

Pod の再作成

「STATUS」が「Container Creating」になっているのがわかります。

最後に

Teiid Operator は Community 版なので Red Hat からのサポートは提供できませんが、仮想データベースの構築、運用を Operator が担ってくれるようになり、だいぶ楽になるのではないかと思います。

前回ご紹介した Red Hat の Data Virtualization(Upstream が Teiid)も GA を予定しておりポートフォリオを拡大させていく予定です。是非ご検討ください。

--

--

Kenta Kosugi
Kenta Kosugi

Written by Kenta Kosugi

Javaアプリケーションサーバーの開発からCORBA製品のサポート、QA、証券外務員(第一種免許)、ストレージ屋、アーキテクト、SaaS屋と一貫性のない道を歩んでいます。Red Hatに復帰しました。

No responses yet