まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:iks

IBM Cloud から提供されている 30 日間無料 Kubernetes サービスIBM Kubernetes Service 、以下 "IKS")環境を使って利用することのできるコンテナイメージを1日に1個ずつ 30 日間連続で紹介していきます。

環境のセットアップや制約事項については Day0 のこちらの記事を参照してください。

Day 6 からはデータベース系コンテナとその GUI ツールを中心に紹介してます。Day 18 はこのデータベース系イメージとしては最終回ですが、軽量ブロックチェーン実装である HATOYA イメージをデプロイする例を紹介します。
bird_shiro_hato



【イメージの概要】
厳密には「データベース」ではないのですが、「データを貯めるもの」という意味合いでこのカテゴリーに含めて紹介します。

HATOYA は2つの側面を持ったミドルウェアです:
(1)RESTful な JSON ドキュメントデータベース
(2)ブロックチェーン

開発者視点でみた HATOYA は(1)の JSON データのデータベースです。データベースの CRUD や、データベース内の(JSON)ドキュメントの CRUD といった操作がすべて REST API で提供されています。ここだけ見ると MongoDB や CouchDB に近い側面を持っています。

一方、運用者視点でみた HATOYA には(2)のブロックチェーン機能が内蔵されています。(1)で紹介した REST API の CRUD 操作の中で、R 以外の CUD が実行されると、その内容はすべてブロックチェーンの台帳に記録されます。つまりデータベースへの変更記録はすべてブロックチェーン台帳に自動的に記録されます。ブロックチェーン記録時にはカスタマイズ可能なマイニングルールが適用されるので、用途に応じてデータ改ざんの難易度とパフォーマンスのバランスをとることができます。HATOYA サーバーは1台でも運用可能ですが、サーバーを複数起動して(ブロックチェーンの)同期をとることも可能です。

HATOYA は軽量でいながらマイニングやハッシュポインタ、リオルグといったブロックチェーンの機能を実装し「一度格納したら管理者でも改竄不可」を実現しています。またデータ操作や複数サーバーの紐付け管理などに REST API が用意されていて、環境構築段階からエンジニアフレンドリーな操作性が提供されている、そんなブロックチェーン対応データベースです。

ちなみに Day 1 で紹介した hostname イメージ同様に、私が開発して公開しているコンテナイメージです。σ(^o^; イメージ自体の挙動として、デフォルトでは 4126 番ポートで REST API リクエストを待受けるよう作っていますが、この意味が分かる人は立派なオッサンだと思ってます。



【イメージのデプロイ】
まずはこちらのファイルを自分の PC にダウンロードしてください:
https://raw.githubusercontent.com/dotnsf/yamls_for_iks/main/hatoya.yaml

今回の HATOYA もシングルノード環境で利用する場合は特にパラメータ指定不要で、そのままデプロイすることができます。以下のコマンドを実行する前に Day 0 の内容を参照して ibmcloud CLI ツールで IBM Cloud にログインし、クラスタに接続するまでを済ませておいてください。

そして以下のコマンドを実行します:
$ kubectl apply -f hatoya.yaml

以下のコマンドで HATOYA 関連の Deployment, Service, Pod, Replicaset が1つずつ生成されたことと、サービスが 30126 番ポートで公開されていることを確認します:
$ kubectl get all

NAME                          READY   STATUS    RESTARTS   AGE
pod/hatoya-7886987799-6hkpc   1/1     Running   0          21s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/hatoya       NodePort    172.21.53.119   <none>        4126:30126/TCP   21s
service/kubernetes   ClusterIP   172.21.0.1      <none>        443/TCP          27d

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/hatoya   1/1     1            1           22s

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/hatoya-7886987799   1         1         1       22s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック IP アドレスを確認します(以下の例であれば 161.51.204.190):
$ ibmcloud ks worker ls --cluster=mycluster-free
OK
ID                                                       パブリック IP    プライベート IP   フレーバー   状態     状況    ゾーン   バージョン
kube-c3biujbf074rs3rl76t0-myclusterfr-default-000000df   169.51.204.190   10.144.185.144    free         normal   Ready   mil01    1.20.7_1543*

つまりこの時点で(上述の結果であれば)アプリケーションは http://169.51.204.190:30126/ で稼働している、ということになります。HATOYA はこの URL が管理ダッシュボードの URL になっているので早速実行してみます。ウェブブラウザを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます:
hatoya1


管理用ダッシュボードが表示され、この画面からデータベースを作成したり、そのデータベース内へのドキュメント追加・更新・削除といったオペレーションが可能です。変更系のオペレーションはすべて台帳にハッシュポインタチェーンで繋がれた形で記録され、データの改竄ができない形で記録されていることがわかります:
hatoya2



【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: hatoya
spec:
  selector:
    app: hatoya
  ports:
  - port: 4126
    protocol: TCP
    targetPort: 4126
    nodePort: 30126
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hatoya
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hatoya
  template:
    metadata:
      labels:
        app: hatoya
    spec:
      containers:
      - name: hatoya
        image: dotnsf/hatoya
        ports:
        - containerPort: 4126

Deployment 1つと、Service 1つ、環境変数の指定も不要で本シリーズで紹介する 30 個の中でも指折りにシンプルな YAML ファイルです。一応解説を加えておきます。アプリケーションそのものは 4126 番ポートで動作するように作られているため、NodePort 30126 番を指定して、外部からは 30126 番ポートでアクセスできるようにしています(NodePort として指定可能な番号の範囲は 30000 ~ 32767 です、指定しない場合は空いている番号がランダムに割り振られます)。また ReplicaSet は1つだけで作りました(データベースなので、別途クラスタ構成の準備をしない限りはこの数値だけを増やしてもあまり意味ないと思います)。


デプロイしたコンテナイメージを削除する場合はデプロイ時に使った YAML ファイルを再度使って、以下のコマンドを実行します。不要であれば削除しておきましょう:
$ kubectl delete -f hatoya.yaml


【紹介したイメージ】
https://hub.docker.com/r/dotnsf/hatoya


【紹介記録】
Dayカテゴリーデプロイ内容
0準備準備作業
1ウェブサーバーhostname
2Apache HTTP
3Nginx
4Tomcat
5Websphere Liberty
6データベースMySQL
7phpMyAdmin
8PostgreSQL
9pgAdmin4
10MongoDB
11Mongo-Express
12Redis
13RedisCommander
14ElasticSearch
15Kibana
16CouchDB
17CouchBase
18HATOYA
19プログラミングNode-RED
20Scratch
21Eclipse Orion
22Swagger Editor
23R Studio
24Jenkins
25アプリケーションFX
262048
27DOS Box
28VNC Server(Lubuntu)
29Drupal
30WordPress

IBM Cloud から提供されている 30 日間無料 Kubernetes サービスIBM Kubernetes Service 、以下 "IKS")環境を使って利用することのできるコンテナイメージを1日に1個ずつ 30 日間連続で紹介していきます。

環境のセットアップや制約事項については Day0 のこちらの記事を参照してください。

Day 6 からはデータベース系コンテナとその GUI ツールを中心に紹介してます。Day 17 では Day 16 に紹介した CouchDB の弟的な製品でもある CouchBase イメージをデプロイする例を紹介します。
couchbase



【イメージの概要】
CouchDB を作った Damien Katz さんが、CouchDB を新たに再設計して開発した NoSQL 型データベースです。非常に高速に動作するというだけでなく、低遅延かつ高持続スループットを実現しています。



【イメージのデプロイ】
まずはこちらのファイルを自分の PC にダウンロードしてください:
https://raw.githubusercontent.com/dotnsf/yamls_for_iks/main/couchbase.yaml

今回の CouchBase もシングルノード環境で利用する場合は特にパラメータ指定不要で、そのままデプロイすることができます。以下のコマンドを実行する前に Day 0 の内容を参照して ibmcloud CLI ツールで IBM Cloud にログインし、クラスタに接続するまでを済ませておいてください。


そして以下のコマンドを実行します:
$ kubectl apply -f couchbase.yaml

以下のコマンドで CouchBase 関連の Deployment, Service, Pod, Replicaset が1つずつ生成されたことと、サービスが 31210, 30091, 30092, 30093, 30094 番の各ポートで公開されていることを確認します:
$ kubectl get all

NAME                            READY   STATUS    RESTARTS   AGE
pod/couchbase-58b4b8c99-m8tmt   1/1     Running   0          105s

NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                       AGE
service/couchbaseserver   NodePort    172.21.76.112   <none>        11210:31210/TCP,8091:30091/TCP,8092:30092/TCP,8093:30093/TCP,8094:30094/TCP   105s
service/kubernetes        ClusterIP   172.21.0.1      <none>        443/TCP                                                                       27d

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/couchbase   1/1     1            1           106s

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/couchbase-58b4b8c99   1         1         1       106s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック IP アドレスを確認します(以下の例であれば 161.51.204.190):
$ ibmcloud ks worker ls --cluster=mycluster-free
OK
ID                                                       パブリック IP    プライベート IP   フレーバー   状態     状況    ゾーン   バージョン
kube-c3biujbf074rs3rl76t0-myclusterfr-default-000000df   169.51.204.190   10.144.185.144    free         normal   Ready   mil01    1.20.7_1543*

つまりこの時点で(上述の結果であれば)アプリケーションの UI は http://169.51.204.190:30091/ で稼働している、ということになります。CouchDB はこの URL が管理ダッシュボードの URL になっているので早速実行してみます。ウェブブラウザを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます:
couchbase1


初回はサーバーセットアップ画面になるので、管理者ユーザーの作成や接続先サーバーの情報を入力していきます:

couchbase2


最終的にデータまでが入力されると、この UI を使って内容や統計情報を確認することができるようになります:
couchbase3



【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: couchbaseserver
spec:
  selector:
    app: couchbase
  ports:
  - port: 11210
    name: port0
    protocol: TCP
    targetPort: 11210
    nodePort: 31210
  - port: 8091
    name: port1
    protocol: TCP
    targetPort: 8091
    nodePort: 30091
  - port: 8092
    name: port2
    protocol: TCP
    targetPort: 8092
    nodePort: 30092
  - port: 8093
    name: port3
    protocol: TCP
    targetPort: 8093
    nodePort: 30093
  - port: 8094
    name: port4
    protocol: TCP
    targetPort: 8094
    nodePort: 30094
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: couchbase
spec:
  replicas: 1
  selector:
    matchLabels:
      app: couchbase
  template:
    metadata:
      labels:
        app: couchbase
    spec:
      containers:
      - name: couchbase
        image: couchbase
        ports:
        - containerPort: 11210
        - containerPort: 8091
        - containerPort: 8092
        - containerPort: 8093
        - containerPort: 8094

Deployment 1つと、Service 1つのごくごくシンプルな YAML ファイルですが、一応解説を加えておきます。アプリケーションそのものは 11210, 8091, 8092, 8093, 8094 番ポートで動作するように作られているため、NodePort 30080 番を指定して、外部からは 30080 番ポートでアクセスできるようにしています(NodePort として指定可能な番号の範囲は 30000 ~ 32767 です、指定しない場合は空いている番号がランダムに割り振られます)。また ReplicaSet は1つだけで作りました(データベースなので、別途クラスタ構成の準備をしない限りはこの数値だけを増やしてもあまり意味ないと思います)。


デプロイしたコンテナイメージを削除する場合はデプロイ時に使った YAML ファイルを再度使って、以下のコマンドを実行します。不要であれば削除しておきましょう:
$ kubectl delete -f couchbase.yaml


【紹介したイメージ】
https://hub.docker.com/_/couchbase


【紹介記録】
Dayカテゴリーデプロイ内容
0準備準備作業
1ウェブサーバーhostname
2Apache HTTP
3Nginx
4Tomcat
5Websphere Liberty
6データベースMySQL
7phpMyAdmin
8PostgreSQL
9pgAdmin4
10MongoDB
11Mongo-Express
12Redis
13RedisCommander
14ElasticSearch
15Kibana
16CouchDB
17CouchBase
18HATOYA
19プログラミングNode-RED
20Scratch
21Eclipse Orion
22Swagger Editor
23R Studio
24Jenkins
25アプリケーションFX
262048
27DOS Box
28VNC Server(Lubuntu)
29Drupal
30WordPress

IBM Cloud から提供されている 30 日間無料 Kubernetes サービスIBM Kubernetes Service 、以下 "IKS")環境を使って利用することのできるコンテナイメージを1日に1個ずつ 30 日間連続で紹介していきます。

環境のセットアップや制約事項については Day0 のこちらの記事を参照してください。

Day 6 からはデータベース系コンテナとその GUI ツールを中心に紹介してます。Day 16 では個人的に大ファンな IBM Cloudant データベースサービスのベース製品でもあるApache CouchDB イメージをデプロイする例を紹介します。
couchdb



【イメージの概要】
元 IBM 社員だった Damien Katz さんが開発した NoSQL 型データベースです。単にデータを格納するだけでなく、画面の UI データを格納して文書データと合わせて表示する、といった(ノーツに似た)デザインドキュメントの概念も実装されていて、ノーツファンとしては非常に感銘を受けるデータベースです。IBM Cloudant ではこの CouchDB をマルチサーバーによる分散データ管理する仕組みがマネージドサービスとして提供されています。



【イメージのデプロイ】
まずはこちらのファイルを自分の PC にダウンロードしてください:
https://raw.githubusercontent.com/dotnsf/yamls_for_iks/main/couchdb.yaml

次にこのファイルをテキストエディタで開いてパラメータを編集します。具体的には以下2箇所の value 値を変更してください:
・COUCHDB_USER : ログイン時のユーザー名(初期値 admin)
・COUCHDB_PASSWORD : ログイン時のパスワード(初期値 P@ssw0rd)


ではこのダウンロード&編集した couchdb.yaml ファイルを指定してデプロイします。以下のコマンドを実行する前に Day 0 の内容を参照して ibmcloud CLI ツールで IBM Cloud にログインし、クラスタに接続するまでを済ませておいてください。

そして以下のコマンドを実行します:
$ kubectl apply -f couchdb.yaml

以下のコマンドで CouchDB 関連の Deployment, Service, Pod, Replicaset が1つずつ生成されたことと、サービスが 30984 番ポートで公開されていることを確認します:
$ kubectl get all

NAME                           READY   STATUS    RESTARTS   AGE
pod/couchdb-7866c5d4c6-z462x   1/1     Running   0          12s

NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/couchdbserver   NodePort    172.21.71.164   <none>        5984:30984/TCP   13s
service/kubernetes      ClusterIP   172.21.0.1      <none>        443/TCP          27d

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/couchdb   1/1     1            1           14s

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/couchdb-7866c5d4c6   1         1         1       14s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック IP アドレスを確認します(以下の例であれば 161.51.204.190):
$ ibmcloud ks worker ls --cluster=mycluster-free
OK
ID                                                       パブリック IP    プライベート IP   フレーバー   状態     状況    ゾーン   バージョン
kube-c3biujbf074rs3rl76t0-myclusterfr-default-000000df   169.51.204.190   10.144.185.144    free         normal   Ready   mil01    1.20.7_1543*

つまりこの時点で(上述の結果であれば)アプリケーションは http://169.51.204.190:30984/ で稼働している、ということになります。CouchDB はこの URL が管理ダッシュボードの URL になっているので早速実行してみます。ウェブブラウザを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます:
couchdb1


(シンプルすぎて)一瞬びっくりしますが、稼働中の CouchDB に関する情報が表示されました。CouchDB も IKS 上で動かすことができました。


【YAML ファイルの解説】
YAML ファイルはこちらを使っています(編集する前の状態です):
apiVersion: v1
kind: Service
metadata:
  name: couchdbserver
spec:
  selector:
    app: couchdb
  ports:
  - port: 5984
    protocol: TCP
    targetPort: 5984
    nodePort: 30984
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: couchdb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: couchdb
  template:
    metadata:
      labels:
        app: couchdb
    spec:
      containers:
      - name: couchdb
        image: couchdb
        env:
        - name: COUCHDB_USER
          value: "admin"
        - name: COUCHDB_PASSWORD
          value: "P@ssw0rd"
        ports:
        - containerPort: 5984

Deployment 1つと、Service 1つのごくごくシンプルな YAML ファイルですが、一応解説を加えておきます。アプリケーションそのものは 5984 番ポートで動作するように作られているため、NodePort 30080 番を指定して、外部からは 30080 番ポートでアクセスできるようにしています(NodePort として指定可能な番号の範囲は 30000 ~ 32767 です、指定しない場合は空いている番号がランダムに割り振られます)。また ReplicaSet は1つだけで作りました(データベースなので、別途クラスタ構成の準備をしない限りはこの数値だけを増やしてもあまり意味ないと思います)。


デプロイしたコンテナイメージを削除する場合はデプロイ時に使った YAML ファイルを再度使って、以下のコマンドを実行します。不要であれば削除しておきましょう:
$ kubectl delete -f couchdb.yaml


【紹介したイメージ】
https://hub.docker.com/_/couchdb


【紹介記録】
Dayカテゴリーデプロイ内容
0準備準備作業
1ウェブサーバーhostname
2Apache HTTP
3Nginx
4Tomcat
5Websphere Liberty
6データベースMySQL
7phpMyAdmin
8PostgreSQL
9pgAdmin4
10MongoDB
11Mongo-Express
12Redis
13RedisCommander
14ElasticSearch
15Kibana
16CouchDB
17CouchBase
18HATOYA
19プログラミングNode-RED
20Scratch
21Eclipse Orion
22Swagger Editor
23R Studio
24Jenkins
25アプリケーションFX
262048
27DOS Box
28VNC Server(Lubuntu)
29Drupal
30WordPress

IBM Cloud から提供されている 30 日間無料 Kubernetes サービスIBM Kubernetes Service 、以下 "IKS")環境を使って利用することのできるコンテナイメージを1日に1個ずつ 30 日間連続で紹介していきます。

環境のセットアップや制約事項については Day0 のこちらの記事を参照してください。

Day 15 は Day 14 で紹介した ElasticSearch 環境に GUI のダッシュボード機能を付与する Kibana イメージをデプロイする例を紹介します。
kibana0



【イメージの概要】
Kibana は ElasticSearch の GUI ダッシュボード(ウェブ用クライアント)です。


【イメージのデプロイ】
まずはこちらのファイルを自分の PC にダウンロードしてください:
https://raw.githubusercontent.com/dotnsf/yamls_for_iks/main/kibana.yaml


次にこのファイルをテキストエディタで開いてパラメータを編集します。具体的には以下1箇所の value 値を変更してください:
・ELASTICSEARCH_HOST : 接続先 ElasticSearch サーバー(初期値 http://xxx.xxx.xxx.xxx:30200)

ではこのダウンロード&編集した kibana.yaml ファイルを指定してデプロイします。以下のコマンドを実行する前に Day 0 の内容を参照して ibmcloud CLI ツールで IBM Cloud にログインし、クラスタに接続するまでを済ませておいてください。

そして以下のコマンドを実行します:
$ kubectl apply -f kibana.yaml

以下のコマンドで ElasticSearch および Kibana 関連の Deployment, Service, Pod, Replicaset がそれぞれ1つずつ生成されたことと、サービスが 30200, 30300 番ポート(ElasticSearch)と 30080 番ポート(Kibana)で公開されていることを確認します:
$ kubectl get all

NAME                                 READY   STATUS    RESTARTS   AGE
pod/elasticsearch-7bbff9597c-wz22n   1/1     Running   0          6m36s
pod/kibana-9c86dd987-l54cw           1/1     Running   0          75s

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
service/elasticsearch   NodePort    172.21.61.7      <none>        9200:30200/TCP,9300:30300/TCP   6m37s
service/kibana          NodePort    172.21.166.254   <none>        5601:30080/TCP                  76s
service/kubernetes      ClusterIP   172.21.0.1       <none>        443/TCP                         27d

NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/elasticsearch   1/1     1            1           6m37s
deployment.apps/kibana          1/1     1            1           76s

NAME                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/elasticsearch-7bbff9597c   1         1         1       6m37s
replicaset.apps/kibana-9c86dd987           1         1         1       76s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック IP アドレスを確認します(以下の例であれば 161.51.204.190):
$ ibmcloud ks worker ls --cluster=mycluster-free
OK
ID                                                       パブリック IP    プライベート IP   フレーバー   状態     状況    ゾーン   バージョン
kube-c3biujbf074rs3rl76t0-myclusterfr-default-000000df   169.51.204.190   10.144.185.144    free         normal   Ready   mil01    1.20.7_1543*

つまりこの時点で(上述の結果であれば)アプリケーションは http://169.51.204.190:30080/ で稼働している、ということになります。早速実行してみます。ウェブブラウザを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます。サンプルデータを入れた解析ダッシュボードを作るとこんな感じになります:
kibana


【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: kibana
spec:
  selector:
    app: kibana
  ports:
  - port: 5601
    protocol: TCP
    targetPort: 5601
    nodePort: 30601
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana:7.13.2
        env:
        - name: ELASTICSEARCH_HOSTS
          value: "http://xxx.xxx.xxx.xxx:30200"
        ports:
        - containerPort: 5601

Deployment 1つと、Service 1つのごくごくシンプルな YAML ファイルですが、一応解説を加えておきます。アプリケーションそのものは 5601 番ポートで動作するように作られているため、NodePort 30080 番を指定して、外部からは 30080 番ポートでアクセスできるようにしています(NodePort として指定可能な番号の範囲は 30000 ~ 32767 です、指定しない場合は空いている番号がランダムに割り振られます)。また ReplicaSet は1つだけで作りました。


デプロイしたコンテナイメージを削除する場合はデプロイ時に使った YAML ファイルを再度使って、以下のコマンドを実行します。不要であれば削除しておきましょう(Day 14 の ElasticSearch も一緒に作成しておきましょう)

$ kubectl delete -f kibana.yaml


【紹介したイメージ】
https://docker.elastic.co/kibana/kibana


【紹介記録】
Dayカテゴリーデプロイ内容
0準備準備作業
1ウェブサーバーhostname
2Apache HTTP
3Nginx
4Tomcat
5Websphere Liberty
6データベースMySQL
7phpMyAdmin
8PostgreSQL
9pgAdmin4
10MongoDB
11Mongo-Express
12Redis
13RedisCommander
14ElasticSearch
15Kibana
16CouchDB
17CouchBase
18HATOYA
19プログラミングNode-RED
20Scratch
21Eclipse Orion
22Swagger Editor
23R Studio
24Jenkins
25アプリケーションFX
262048
27DOS Box
28VNC Server(Lubuntu)
29Drupal
30WordPress

IBM Cloud から提供されている 30 日間無料 Kubernetes サービスIBM Kubernetes Service 、以下 "IKS")環境を使って利用することのできるコンテナイメージを1日に1個ずつ 30 日間連続で紹介していきます。

環境のセットアップや制約事項については Day0 のこちらの記事を参照してください。

Day 6 からはデータベース系コンテナとその GUI ツールを中心に紹介してます。Day 14 では超強力な検索エンジンである ElasticSearch イメージをデプロイする例を紹介します。
es



【イメージの概要】
検索エンジンです。データベースに格納したデータは SQL 文で柔軟に検索することも可能ですが、検索のパフォーマンスを上げる目的で専用検索エンジンを併用することは珍しくありません。また例えば「白い」という検索で「白く」という文字を含むデータを検索するなどといった曖昧な検索や、同義語を定義した検索など、より実用的な検索機能を実現できます。



【イメージのデプロイ】
まずはこちらのファイルを自分の PC にダウンロードしてください:
https://raw.githubusercontent.com/dotnsf/yamls_for_iks/main/elasticsearch.yaml


今回の ElasticSearch もシングルノード環境で利用する場合は特にパラメータ指定不要で、そのままデプロイすることができます。以下のコマンドを実行する前に Day 0 の内容を参照して ibmcloud CLI ツールで IBM Cloud にログインし、クラスタに接続するまでを済ませておいてください。

そして以下のコマンドを実行します:
$ kubectl apply -f elasticsearch.yaml

以下のコマンドで ElasticSearch 関連の Deployment, Service, Pod, Replicaset が1つずつ生成されたことと、サービスが 30200, 30300 番ポートで公開されていることを確認します:
$ kubectl get all

NAME                                 READY   STATUS    RESTARTS   AGE
pod/elasticsearch-7bbff9597c-wz22n   1/1     Running   0          15s

NAME                    TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                         AGE
service/elasticsearch   NodePort    172.21.61.7   <none>        9200:30200/TCP,9300:30300/TCP   17s
service/kubernetes      ClusterIP   172.21.0.1    <none>        443/TCP                         27d

NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/elasticsearch   1/1     1            1           16s

NAME                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/elasticsearch-7bbff9597c   1         1         1       17s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック IP アドレスを確認します(以下の例であれば 161.51.204.190):
$ ibmcloud ks worker ls --cluster=mycluster-free
OK
ID                                                       パブリック IP    プライベート IP   フレーバー   状態     状況    ゾーン   バージョン
kube-c3biujbf074rs3rl76t0-myclusterfr-default-000000df   169.51.204.190   10.144.185.144    free         normal   Ready   mil01    1.20.7_1543*

つまりこの時点で(上述の結果であれば)アプリケーションは http://169.51.204.190:30200/ で稼働している、ということになります。早速実行してみます。ウェブブラウザか curl コマンドを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます:
2021071103



【YAML ファイルの解説】
YAML ファイルはこちらを使っています。シングルノードモードで動かすための設定です:
apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
spec:
  selector:
    app: elasticsearch
  ports:
  - port: 9200
    name: port1
    protocol: TCP
    targetPort: 9200
    nodePort: 30200
  - port: 9300
    name: port2
    protocol: TCP
    targetPort: 9300
    nodePort: 30300
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: elasticsearch
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:7.13.2
        env:
        - name: discovery.type
          value: "single-node"
        ports:
        - containerPort: 9200
        - containerPort: 9300

Deployment 1つと、Service 1つのごくごくシンプルな YAML ファイルですが、一応解説を加えておきます。アプリケーションそのものは 9200 番ポートおよび 9300 番ポートで動作するように作られているため、NodePort 30200 番、30300 番をそれぞれ指定して、外部からは 30200 番ポートでアクセスできるようにしています(NodePort として指定可能な番号の範囲は 30000 ~ 32767 です、指定しない場合は空いている番号がランダムに割り振られます)。また ReplicaSet は1つだけで作りました(データベースなので、別途クラスタ構成の準備をしない限りはこの数値だけを増やしてもあまり意味ないと思います)。


デプロイしたコンテナイメージを削除する場合はデプロイ時に使った YAML ファイルを再度使って、以下のコマンドを実行します。不要であれば削除しておきましょう(ちなみにこの ElasticSearch コンテナは明日の Day 15 でも使う予定なので、削除するのはそのあとの方がいいかもしれません):
$ kubectl delete -f elasticsearch.yaml


【紹介したイメージ】
https://docker.elastic.co/elasticsearch/elasticsearch


【紹介記録】
Dayカテゴリーデプロイ内容
0準備準備作業
1ウェブサーバーhostname
2Apache HTTP
3Nginx
4Tomcat
5Websphere Liberty
6データベースMySQL
7phpMyAdmin
8PostgreSQL
9pgAdmin4
10MongoDB
11Mongo-Express
12Redis
13RedisCommander
14ElasticSearch
15Kibana
16CouchDB
17CouchBase
18HATOYA
19プログラミングNode-RED
20Scratch
21Eclipse Orion
22Swagger Editor
23R Studio
24Jenkins
25アプリケーションFX
262048
27DOS Box
28VNC Server(Lubuntu)
29Drupal
30WordPress

このページのトップヘ