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

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

タグ:iks

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

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

Day 13 は Day 12 で紹介した Redis 環境を GUI で使うためのウェブツールとして RedisCommander イメージをデプロイする例を紹介します。
rediscommander1



【イメージの概要】
RedisCommander は Redis を CLI ではなく、GUI から利用するためのツール(ウェブ用クライアント)です。


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


次にこのファイルをテキストエディタで開いてパラメータを編集します。具体的には以下2箇所の value 値を変更してください。それぞれの具体的な意味は以下の通りです:
・REDIS_HOST : 接続先 Redis サーバー(初期値 xxx.xxx.xxx.xxx)
・REDIS_PORT : 接続先 Redis ポート番号(初期値 30379)

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

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

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

NAME                                  READY   STATUS    RESTARTS   AGE
pod/redis-commander-b8f7c4c7d-wr87m   1/1     Running   0          11s
pod/redis-fd794cd65-8phh2             1/1     Running   0          7m53s

NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/kubernetes        ClusterIP   172.21.0.1      <none>        443/TCP          27d
service/redis-commander   NodePort    172.21.60.99    <none>        8081:30080/TCP   13s
service/redisserver       NodePort    172.21.187.90   <none>        6379:30379/TCP   7m55s

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/redis             1/1     1            1           7m54s
deployment.apps/redis-commander   1/1     1            1           12s

NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/redis-commander-b8f7c4c7d   1         1         1       13s
replicaset.apps/redis-fd794cd65             1         1         1       7m55s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック 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/ で稼働している、ということになります。早速実行してみます。ウェブブラウザか curl コマンドを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます:
rediscommander1


Redis サーバーに接続しました。左メニューの接続アイコンをクリックすると、選択したデータベースの詳細内容を確認することができます:
rediscommander2



【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: redis-commander
spec:
  selector:
    app: redis-commander
  ports:
  - port: 8081
    protocol: TCP
    targetPort: 8081
    nodePort: 30080
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-commander
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-commander
  template:
    metadata:
      labels:
        app: redis-commander
    spec:
      containers:
      - name: redis-commander
        image: rediscommander/redis-commander
        env:
        - name: REDIS_HOST
          value: "169.51.204.190"
        - name: REDIS_PORT
          value: "30379"
        ports:
        - containerPort: 8081

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


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

$ kubectl delete -f rediscommander.yaml


【紹介したイメージ】
https://hub.docker.com/r/rediscommander/redis-commander


【紹介記録】
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 12 ではメモリキャッシュとしても利用されている Redis イメージをデプロイする例を紹介します。
redis



【イメージの概要】
キー・バリュー型のメモリデータベースです。I/O にディスクアクセスを伴わないため、高速なトランザクション処理が可能です。また最近のコンテナ化の中でこの高速性を共有セッションの管理などの用途に使われることも多くなっています。



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


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

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

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

NAME                        READY   STATUS    RESTARTS   AGE
pod/redis-fd794cd65-8phh2   1/1     Running   0          58s

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/kubernetes    ClusterIP   172.21.0.1      <none>        443/TCP          27d
service/redisserver   NodePort    172.21.187.90   <none>        6379:30379/TCP   60s

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/redis   1/1     1            1           59s

NAME                              DESIRED   CURRENT   READY   AGE
replicaset.apps/redis-fd794cd65   1         1         1       59s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック 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*

つまりこの時点で(上述の結果であれば)アプリケーションは 169.51.204.190:30379 で稼働している、ということになります。これまでの例と同様、動作確認は次回の GUI ツールのインストール後に行うことにするので、今回はこのデプロイ作業までとします。



【YAML ファイルの解説】
YAML ファイルはこちらを使っています(編集する前の状態です):
apiVersion: v1
kind: Service
metadata:
  name: redisserver
spec:
  selector:
    app: redis
  ports:
  - port: 6379
    protocol: TCP
    targetPort: 6379
    nodePort: 30379
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis
        ports:
        - containerPort: 6379

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


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


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


【紹介記録】
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 11 は Day 10 で紹介した MongoDB 環境を GUI で使うためのウェブツールから Mongo-Express イメージをデプロイする例を紹介します。
mongoexpress1



【イメージの概要】
Mongo-Express は MongoDB を CLI ではなく、GUI から利用するためのツール(ウェブ用クライアント)です。


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


次にこのファイルをテキストエディタで開いてパラメータを編集します。具体的には以下2箇所の value 値を変更してください。それぞれの具体的な意味は以下の通りです:
・ME_CONFIG_MONGODB_SERVER : 接続先 MongoDB サーバー(初期値 xxx.xxx.xxx.xxx)
・ME_CONFIG_MONGODB_PORT : 接続先 MongoDB ポート番号(初期値 30017)
・ME_CONFIG_MONGODB_ENABLE_ADMIN : 接続先 MongoDB 管理者IDの自動設定(初期値 false ここはこのままで)
・ME_CONFIG_MONGODB_AUTH_USERNAME : 接続先 MongoDB 管理者ID(初期値 root)
・ME_CONFIG_MONGODB_AUTH_PASSWORD : 接続先 MongoDB 管理者パスワード(初期値 P@ssw0rd)


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

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

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

NAME                                 READY   STATUS    RESTARTS   AGE
pod/mongo-65cb95c444-xkgx9           1/1     Running   0          5m43s
pod/mongo-express-65fc46bf78-vprjb   1/1     Running   0          18s

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
service/kubernetes      ClusterIP   172.21.0.1       <none>        443/TCP           27d
service/mongo-express   NodePort    172.21.156.220   <none>        8081:30080/TCP    19s
service/mongoserver     NodePort    172.21.93.229    <none>        27017:30017/TCP   5m45s

NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mongo           1/1     1            1           5m44s
deployment.apps/mongo-express   1/1     1            1           19s

NAME                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/mongo-65cb95c444           1         1         1       5m44s
replicaset.apps/mongo-express-65fc46bf78   1         1         1       19s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック 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/ で稼働している、ということになります。早速実行してみます。ウェブブラウザか curl コマンドを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます:
mongoexpress1


test データベースが存在しています。選択すると test データベースの内容を GUI で確認できます:
mongoexpress2



【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: mongo-express
spec:
  selector:
    app: mongo-express
  ports:
  - port: 8081
    protocol: TCP
    targetPort: 8081
    nodePort: 30080
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-express
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo-express
  template:
    metadata:
      labels:
        app: mongo-express
    spec:
      containers:
      - name: mongo-express
        image: mongo-express
        env:
        - name: ME_CONFIG_MONGODB_SERVER
          value: "xxx.xxx.xxx.xxx"
        - name: ME_CONFIG_MONGODB_PORT
          value: "30017"
        - name: ME_CONFIG_MONGODB_ENABLE_ADMIN
          value: "false"
        - name: ME_CONFIG_MONGODB_AUTH_USERNAME
          value: "root"
        - name: ME_CONFIG_MONGODB_AUTH_PASSWORD
          value: "Passw0rd"
        ports:
        - containerPort: 8081

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


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


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


【紹介記録】
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 10 では NoSQL データベースを代表する MongoDB イメージをデプロイする例を紹介します。
mongodb



【イメージの概要】
高速なデータ格納処理を得意とする分散データベース環境です。RDB の SQL のような高度な検索や結合処理を苦手とする一方で、追加・更新・削除といった変更系作業を非常に高速に行うことができるため、IoT などの短時間で大量の書き込み処理を行うケースに向いています。

開発および製品サポートは MongoDB Inc. が行っています。


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


次にこのファイルをテキストエディタで開いてパラメータを編集します。具体的には "MONGO_" で始まる3箇所の env.name の value 値を変更してください。それぞれの具体的な意味は以下の通りです(初期値として指定されている値のまま動かすことも可能ですが、安全のためなるべく変更してください):
・MONGO_INITDB_ROOT_USERNAME : 管理者ID(初期値 root)
・MONGO_INITDB_ROOT_PASSWORD : 管理者パスワード(初期値 P@ssw0rd)
・MONGO_INITDB_DATABASE : デプロイと同時に作成するデータベース(初期値 mydb)

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

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

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

NAME                         READY   STATUS    RESTARTS   AGE
pod/mongo-65cb95c444-xkgx9   1/1     Running   0          2m48s

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
service/kubernetes    ClusterIP   172.21.0.1      <none>        443/TCP           27d
service/mongoserver   NodePort    172.21.93.229   <none>        27017:30017/TCP   2m49s

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mongo   1/1     1            1           2m49s

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/mongo-65cb95c444   1         1         1       2m49s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック 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*

つまりこの時点で(上述の結果であれば)アプリケーションは 169.51.204.190:30017 で稼働している、ということになります。これまでの例と同様、動作確認は次回の GUI ツールのインストール後に行うことにするので、今回はこのデプロイ作業までとします。



【YAML ファイルの解説】
YAML ファイルはこちらを使っています(編集する前の状態です):
apiVersion: v1
kind: Service
metadata:
  name: mongoserver
spec:
  selector:
    app: mongo
  ports:
  - port: 27017
    protocol: TCP
    targetPort: 27017
    nodePort: 30017
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      containers:
      - name: mongo
        image: mongo
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          value: "root"
        - name: MONGO_INITDB_ROOT_PASSWORD
          value: "Passw0rd"
        - name: MONGO_INITDB_DATABASE
          value: "mydb"
        ports:
        - containerPort: 27017

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


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


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


【紹介記録】
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 9 は Day 8 で紹介した PostgreSQL 環境を GUI で使うためのウェブツールから pgAdmin4 イメージをデプロイする例を紹介します。
pgadmin41



【イメージの概要】
pgAdmin4 は postgreSQL を CLI ではなく、GUI から利用するためのツール(ウェブ用クライアント)です。なお本日紹介するコンテナイメージはいわゆる Docker オフィシャルイメージではなく、個人で公開されているものが本環境では使いやすかったため、これを紹介させていただきます。


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


次にこのファイルをテキストエディタで開いてパラメータを編集します。具体的には以下2箇所の value 値を変更してください。それぞれの具体的な意味は以下の通りです:
・PGADMIN_DEFAULT_EMAIL : 管理者IDメールアドレス、実在の必要はない(初期値 admin@testtest.com)
・PGADMIN_DEFAULT_PASSWORD : 管理者IDパスワード(初期値 P@ssw0rd)


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

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

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

NAME                            READY   STATUS    RESTARTS   AGE
pod/pgadmin4-54495cb996-2cc85   1/1     Running   0          20s
pod/postgres-558dc49c46-wkdlp   1/1     Running   0          6m53s

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/kubernetes       ClusterIP   172.21.0.1       <none>        443/TCP          26d
service/pgadmin4         NodePort    172.21.255.145   <none>        80:30080/TCP     22s
service/postgresserver   NodePort    172.21.82.102    <none>        5432:30432/TCP   6m55s

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/pgadmin4   1/1     1            1           22s
deployment.apps/postgres   1/1     1            1           6m55s

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/pgadmin4-54495cb996   1         1         1       22s
replicaset.apps/postgres-558dc49c46   1         1         1       6m55s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック 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/ で稼働している、ということになります。早速実行してみます。ウェブブラウザか curl コマンドを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます:
pgadmin41


上述の yaml ファイル内で指定したメールアドレスとパスワードを入力するとデータベースの接続画面に遷移し、ここからデータベースのスキーマや実データを参照・変更できるようになります:
pgadmin42



【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: pgadmin4
spec:
  selector:
    app: pgadmin4
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30080
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pgadmin4
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pgadmin4
  template:
    metadata:
      labels:
        app: pgadmin4
    spec:
      containers:
      - name: pgadmin4
        image: dpage/pgadmin4
        env:
        - name: PGADMIN_DEFAULT_EMAIL
          value: "admin@testtest.com"
        - name: PGADMIN_DEFAULT_PASSWORD
          value: "P@ssw0rd"
        ports:
        - containerPort: 80

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


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


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


【紹介記録】
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

このページのトップヘ