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

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

タグ:30days

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

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

Day 25 からはアプリケーション系コンテナとその GUI ツールを中心に紹介してます。Day 26 はこれまでとは少し趣を変えて、「シンプルだけどハマる」ゲームの代表である 2048 イメージをデプロイする例を紹介します。
2048


【イメージの概要】
ゲームそのものの好き嫌いや向き不向きがあることは理解していますが、私自身はアクション要素の少ないいわゆる「パズルゲーム」が好きです。今回紹介する 2048 はその代表とも言えるものです。

ルールは簡単で以下のようなものです。まあ「まずはやってみる」のがわかりやすいと思います:
・上・下・左・右のどちらかに重力を与えることで、画面全体のコマが何かにぶつかるまでそちらの方向に動く
・同じ数値のコマが2つぶつかると1つは消え、残った1つの数値は倍になる。消えたコマの数値が得点になる
・1手動かす(重力を与える)毎に、新しいコマがランダムに画面内に現れて追加される
・アンドゥ(1手やり直す)を認めるルールもありますが、今回紹介するゲームにはありません。

制限時間もなく、じっくり考えることもできますが、操作性がよいとつい手が動いてしまってすぐに後悔して、、というゲームです。いわゆる「基本戦略」も存在しますが、ここでは書きません。興味ある方はググって調べてみてください。単純ゆえの奥深さがあります。


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

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

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

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

NAME                          READY   STATUS    RESTARTS   AGE
pod/game2048-cd5d785c-nfqdn   1/1     Running   0          32s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/game2048     NodePort    172.21.84.54   <none>        80:30080/TCP   33s
service/kubernetes   ClusterIP   172.21.0.1     <none>        443/TCP        27d

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/game2048   1/1     1            1           33s

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/game2048-cd5d785c   1         1         1       33s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック 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)にアクセスしてみます:
2048a


無事に 2048 ゲームが起動できました。矢印キーで遊ぶことができます。たまの気分転換にどうぞ。


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

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


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


【紹介したイメージ】
https://hub.docker.com/r/ponsfrilus/2048nginx


【紹介記録】
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 25 からはアプリケーション系コンテナとその GUI ツールを中心に紹介してます。本日 Day 25 は本シリーズ3回目(最後です)の登場となる自作の FX イメージをデプロイする例を紹介します。
fx0



【イメージの概要】
FX(Foreign eXchange) 、つまり「外国為替」の情報を REST API でリアルタイムに取得できるアプリケーションです。「1米ドル=102円10銭」というアレを米ドル:日本円の組み合わせだけでなく、このアプリケーションでは20種類のペアで取得します。FX は基本的に 24 時間世界中で稼働しており、リアルタイムにその情報を取得できる点が解析データとしても有用です。

Day 1 に、やはり自作ツールとして紹介した hostname と同様のシンプルなツールですが、リアルタイムな情報を取得できる(取得した情報をデータベースに入れておけば後から活用できる)という点で幅広い応用ができるアプリケーションです。


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

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

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

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

NAME                     READY   STATUS    RESTARTS   AGE
pod/fx-8c9f89476-7m9jh   1/1     Running   0          39s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/fx           NodePort    172.21.194.141   <none>        8080:30080/TCP   39s
service/kubernetes   ClusterIP   172.21.0.1       <none>        443/TCP          27d

NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/fx   1/1     1            1           40s

NAME                           DESIRED   CURRENT   READY   AGE
replicaset.apps/fx-8c9f89476   1         1         1       40s

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


フォーマットを整えるとこのような結果でした。リアルタイムな外国為替情報を GET リクエストのたびに取得できる、なかなか便利な API サーバーです:
{
 "status":true,
 "result":{
  "datetime":"2021-07-24 06:34:08+0",
  "rate":{
    "USDJPY":110.55,
    "EURJPY":130.109,
    "EURUSD":1.17691,
    "AUDJPY":81.398,
    "GBPJPY":151.969,
    "NZDJPY":77.134,
    "CADJPY":87.962,
    "CHFJPY":120.19,
    "HKDJPY":14.219,
    "GBPUSD":1.37465,
    "USDCHF":0.91965,
    "ZARJPY":7.438,
    "AUDUSD":0.73629,
    "NZDUSD":0.6977,
    "EURAUD":1.59832,
    "TRYJPY":12.91,
    "CNHJPY":17.068,
    "NOKJPY":12.456,
    "SEKJPY":12.704,
   "MXNJPY":5.511
  }
 }
}



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

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


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


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


【紹介記録】
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 19 からはプログラミング・開発系コンテナとその GUI ツールを中心に紹介してます。このカテゴリーでは最終日となる Day 24 は CI(Continuous Integration) や CD(Continuous Delivery) と呼ばれる継続的なインテグレーション/デリバリーを実現するツールの1つである Jenkins イメージをデプロイする例を紹介します。
logo_jenkins



【イメージの概要】
プログラミングによって開発したソフトウェアを、実際の利用環境にデプロイする、という作業はソフトウェアのメンテナンス性の高まりと同時に重要性が増してきました。利用環境は物理サーバーだったり、クラウドサーバーだったり、コンテナ環境だったりして、その違いを意識する必要がある上に、いかにしてサービスを止めずに利用環境を更新するか、という課題もあります。
そういった複雑な作業をあらかじめ定義して自動化し、すばやく安定した環境に更新するためのツールとして CI/CD が注目されています。Jenkins はそんな CI/CD を実現するツールです。

また詳しくは後述しますが、この Jenkins イメージはアプリケーションとして利用できるようになるまでの手順が少し複雑です。実際に作成したコンテナのコンソールからでないと確認できない情報を使ったりするので、k8s(IKS) のダッシュボード周りの使い方についても学習する機会となっています。


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

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

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

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

NAME                           READY   STATUS    RESTARTS   AGE
pod/jenkins-8646cd685c-2kpcg   1/1     Running   0          26s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                          AGE
service/jenkins      NodePort    172.21.211.147   <none>        8080:30080/TCP,50000:30500/TCP   28s
service/kubernetes   ClusterIP   172.21.0.1       <none>        443/TCP                          27d

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/jenkins   1/1     1            1           27s

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/jenkins-8646cd685c   1         1         1       28s

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


"Unlock Jenkins" というメッセージが表示されました。なんらかのアプリケーションが動いていることは間違いないのですが、このままだと Jenkins 本来の使い方をする意味で先に進めません。

実はこの Jenkins イメージはこの 30 回紹介シリーズの中でもコンテナ稼働後のセットアップが複雑な部類に入ります。以下でその手順を紹介します。

上画面のメッセージにも書かれているのですが、ここでは Jenkins を使うための管理パスワードを入力する必要があります。そしてそのパスワードはコンテナ内の /var/jenkins_home/secrets/initialAdminPassword というファイルに書かれているようです。つまりまずはコンテナからこのファイルの内容を確認する必要がありそうです。 ではこのファイルの内容を k8s ダッシュボードコンソールからログインして確認してみましょう。

ウェブブラウザで IBM Cloud にログインして、作成した IKS サービスを開きます。画面右上に「Kubernetes ダッシュボード」と書かれた青いボタンがあるので、ここをクリックします:
jenkins2


すると k8s クラスタのダッシュボード画面が表示されます:
jenkins3


画面左のメニューから「ポッド」を選択し、ポッドの一覧から先程作った jenkins に関係あるものを探して、画面右の三点メニューから「実行」を選択します:
jenkins4



するとこのポッドのコンソールが開き、シェルでログインした状態になります。k8s ではこの方法で実行中のコンテナにログインすることができます:
jenkins5


このシェル内で $ cat /var/jenkins_home/secrets/initialAdminPassword を実行して、このファイルの内容を確認します:
jenkins6


確認した内容を先程の "Unlock Jenkins" の画面に入力して、"Continue" をクリックします:
jenkins1


正しいパスワードが入力されるとプラグインのカスタマイズ画面に移動します。とりあえず "Install suggested plugins" で推奨プラグインを全部インストールします:
jenkins1


インストール中の画面です。ここで少し時間がかかります:
jenkins2


プラグインのインストールが終わると管理者ユーザーの作成に移ります:
jenkins1


そして URL を指定して "Save" すると・・・
jenkins2


"Jenkins is ready!" で準備完了です:
jenkins3


無事にセットアップが完了し Jenkins が利用できるようになりました。ちょっと複雑でしたが、コンソールも併用してのセットアップが完了しました。ここまでできるとちょっと制約のあるこの環境でも使えるコンテナイメージは多そうですね:
jenkins4




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

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


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


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


【紹介記録】
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 19 からはプログラミング・開発系コンテナとその GUI ツールを中心に紹介してます。Day 23 は R 言語を使ったデータ解析環境として人気のある R Studio イメージをデプロイする例を紹介します。
rstudio


【イメージの概要】
高い専門性が求められるデータ解析は、その利用ツールも敷居が高いもの、という印象がありました。その印象を変えたのが R 言語と、その GUI 実行環境である R Studio でした。無料の解析環境を無料の GUI ツールで利用できるようになったというインパクトが大きなものでした。


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

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

以下のコマンドを実行する前に Day 0 の内容を参照して ibmcloud CLI ツールで IBM Cloud にログインし、クラスタに接続するまでを済ませておいてください。

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

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

NAME                           READY   STATUS    RESTARTS   AGE
pod/rstudio-59df5995bd-9gdn7   1/1     Running   0          55s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/kubernetes   ClusterIP   172.21.0.1      <none>        443/TCP          27d
service/rstudio      NodePort    172.21.19.183   <none>        8787:30787/TCP   56s

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/rstudio   1/1     1            1           56s

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/rstudio-59df5995bd   1         1         1       57s

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


ユーザー名: rstudio 、パスワード:(rstudio.yaml に設定したもの)を入力すると R Studio 画面が表示され、R 言語コマンドを実行できるようになります:
rstudio2



【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: rstudio
spec:
  selector:
    app: rstudio
  ports:
  - port: 8787
    protocol: TCP
    targetPort: 8787
    nodePort: 30787
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rstudio
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rstudio
  template:
    metadata:
      labels:
        app: rstudio
    spec:
      containers:
      - name: rstudio
        image: rocker/rstudio
        env:
          - name: PASSWORD
            value: "P@ssw0rd"
        ports:
        - containerPort: 8787

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


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


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


【紹介記録】
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 19 からはプログラミング・開発系コンテナとその GUI ツールを中心に紹介してます。Day 22 は実行可能な API ドキュメントを記述するエディタである Swagger Editor イメージをデプロイする例を紹介します。
swagger



【イメージの概要】
アプリケーション開発において、ドキュメント準備は(直接、プログラミングと関わる点が少ないという意味においても)比較的面倒な作業です。が、最近は Swagger  API ドキュメントとか Open API ドキュメントと呼ばれる、画面上で直接実行可能なドキュメンテーション技術が生まれたことで、プログラマーにとっても大事かつ役立つ作業となりました。

この Swagger API ドキュメントは特殊な JSON や YAML フォーマットで記述することで実現できるのですが、この特殊なフォーマットを知らなくても作れるようになるのが Swagger Editor です。今回紹介するのは、この Swagger Editor が使えるようになるコンテナイメージです。


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

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

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

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

NAME                                  READY   STATUS    RESTARTS   AGE
pod/swagger-editor-6f94c7c8d6-6rc58   1/1     Running   0          6s

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/kubernetes       ClusterIP   172.21.0.1       <none>        443/TCP          27d
service/swagger-editor   NodePort    172.21.237.213   <none>        8080:30080/TCP   8s

NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/swagger-editor   1/1     1            1           7s

NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/swagger-editor-6f94c7c8d6   1         1         1       8s

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


この GUI 画面(プレビュー画面)を使いながら Swagger API を作り、必要であればローカルファイルにエクスポートすることも可能です:
swagger2


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

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


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


【紹介したイメージ】
https://hub.docker.com/r/swaggerapi/swagger-editor


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

このページのトップヘ