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

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

タグ:minix

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

最終日というかおまけとして、31 日目は実際にこれらのイメージをデプロイしてきたの感想を含めたあとがきを記していきます。


【率直な感想】
改めてこの 30 日間を振り返ります。これだけの環境を作ってきました:

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



自分はプログラマーなので、プログラマー視点というか開発者視点で客観的にこの表を見てまず思うのは、自分が開発環境として使いそうなデータベースやツール、ミドルウェア類は一通り揃っているという事実です。もちろん自分の PC にこの環境を用意することはできるし、ローカルだけで開発環境が整うのはそれはそれでメリットもあるわけですが、一方で無料のリモート環境にこれだけのツール類を揃えて使うことができるというのは充分すぎるというか、「使う予定はないかもしれないけど、この環境を使うならおまけに R Studio も入れちゃおうかな」とか、「念の為 IaaS 的な環境も」とか、「ちょっと気分転換にゲームを」とか余裕で考えるくらいの環境が用意できる、そんな太っ腹な無料サービスだと改めて感じました。

また単なる開発環境である以上に、コンテナや k8s の運用を勉強するための環境としてもかなり使えると感じています。Day 1 で紹介したようなレプリカセットを変更した上で挙動の変化を確認したり、Day 24 では k8s の管理ダッシュボードを使ってポッドの中でシェルを動かしたり、Day 29Day 30 では複数のコンテナを通信させて動く環境を作る、といったことも体験できました。普段データベースは使っているけど、データの解析はしたことがない人でも解析環境まで入手できるようになる、このような、実際に外部から利用可能な形で公開して体験できる形の環境が無料で提供されているという点を改めて素晴らしいと感じています。


【この環境の制約事項について】
もちろん制約事項を感じることもありました。この契約では k8s の Ingress が使えないためサービスは NodePort 公開しかできない(ワーカーノードの IP アドレスでしか公開できない)、そのためコンテナ側に SSL を使った公開方法が考慮されていてもこの環境では使えない、、といった制約を何度か経験することになりました。まあここは開発環境と割り切って使う中ではあまり気にならないとも言えますけど、外部連携時に SSL 接続を前提としているケースがあったり、(IP アドレスではなく)ドメイン名やホスト名を使う前提のサービスと連携するケースがあったりすると、そこで制約を受けることになる点が注意が必要だと思いました。

加えて、今回は 30 日間で紹介するサービスを上述の 30 種類にしていますが、実はこの中に含めたくて諦めたサービスもいくつかあります。それらの多くはこの無料環境でデプロイして使うのは難しい※と判断したものばかりでした。

※自分の誤解に基づくものや、うまく回避する方法を知らなかっただけというものも含まれているかもしれません。ただ今回の企画の時間的な意味も含めた制約の中では「難しい」と諦めざるを得なかった、という意味です。

理由としてもったいなかったのは「デプロイはできたようだが、確認する方法(専用クライアント)がない」というケースでした。超軽量データベースである Apache Derby などはその例で、IKS へのデプロイ自体は成功していたように見えているのですが、動作を確認するにはアプリケーションを作る必要があって、そこまで作業するのが時間制約的に困難だったというケースです。curl やウェブブラウザで動作確認ができず、動作確認用クライアントを作る必要がある、というパターンのは今回は諦めました。

この動作確認用クライアントが存在しない以外の理由が原因となったケースもあります。その1つを紹介すると IBM Db2 コンテナがあります。本環境で IBM Db2 コンテナを使うのが難しそうだと判断した理由は少し特殊な環境設定にありました。

IBM Db2 はデフォルトで 50000 番ポートを使って通信します。ポート番号自体はコンテナ公開時にポートフォワーディングで変更することもできるのですが、IBM Db2 の場合は /etc/services ファイル内にこのポート番号を指定するための設定を加える必要がありました。コンテナで動かす場合は、コンテナイメージ内のこの設定を変更して(かつこの変更が消えないようにして)再起動するか、設定を変更せず 50000 番ポートで公開するか、いずれかの方法が必要となります。

コンテナの紹介ページでは docker コマンドによるデプロイ方法が紹介されていました。docker であれば EXPOSE するポート番号を自由に指定できるのですが、今回は NodePort を使った公開しかできない k8s 環境、という制約があります。また今回は無料の範囲内で(ボリュームを使わずに)紹介するという目的もありました。この制約の中で色々な方法を試したのですが、結局うまく公開することができず、今回は 30 個の中から除外する、という判断をするに至った、という背景を記載しておきます。

ここに記載するのもどうかと思ったのですが、もしかすると詳しい人が引き継いでくれることを期待して、自分が(ちょっと)試してみた限りでは難しそうだと判断して諦めたコンテナイメージのリストを掲載しておきます。本当はこれらを 30 個に加えたかったのだけど、そもそも自分が普段使っているわけではないものもあったりして、設定そのものにあまり詳しくなかったりするものが大半です。もし 30 日無料版 IKS 環境で動かすことができたら教えてください(笑):

コンテナイメージあきらめた理由
Cassandra デプロイはできたが、稼働中にポッドが Pending 状態になる
CockroachDB デプロイ時に CrashLoopBackOff エラー
Apache Derby デプロイはできているっぽいが、動作確認ができていない
GitLab デプロイはできたが、稼働中にポッドが Pending 状態になる(HTTPS 必須で HTTP 接続不可?)
IBM Db2 50000 番ポートでのサービス公開が NodePort の範囲外だった
MediaWiki デプロイはできたが、稼働中に大量の deprecated メッセージ
Memcached デプロイはできたように見えたが、接続時にエラー
Minix デプロイはできたが、Minix のシェルにログインできない・・・と思っていたが、後から方法がわかりました(k8s のポッドにコンソールログインしてから "# ssh localhost")。これを 30 個に含めてもよかったかも。
Mosquitto デプロイはできているっぽいが、動作確認ができていない
phpMoAdmin デプロイはできているっぽいが、MongoDB に接続できない(docker 環境でしか動かないコンテナイメージ?)
Container Registry デプロイはできているっぽいが、動作確認ができていない(HTTPS 必須で HTTP 接続不可?)
SAMBA デプロイはできたように見えたが、接続時にエラー
Ubuntu デプロイ時に CrashLoopBackOff エラー


Minix イメージについては幻の 31 日目のイメージとして加えさせていただきます(笑)。


上述の IBM Db2 もそうだったのですが、コンテナ内のファイルを編集して再起動、を前提とするようなコンテナイメージや、そもそも動作に必要なスペックが高すぎるものは諦めました。自分の場合はあくまで開発環境という意味での「とりあえず動いて外部から利用できることが重要」という視点で見ていたので、上記 30 個のリストの中にもしかすると使っているうちに別の制約を受けることになる可能性は否定できません。


【最後に】
改めて書きますが、これだけの開発環境が連続して 30 日間無料で使えるというのはやはり魅力です。自分が業務や個人で作っているアプリケーションを作る際の環境と比較しても、ほぼ支障を感じることがありませんし、制約事項で挙げたサービスについても他の方法で無料で入手することができるものばかりと考えると、アプリケーション開発者にとっては無料で勉強も利用もできる環境がかなり広くなったと改めて感慨にふけることができるようになりました。

余談ですが、IBM Cloud にはこの 30 日無料版 k8s クラスタ環境以外にも、無料枠内で(期間制限なしで)使える多くのサービスが用意されています。この k8s 環境を通じて、興味が湧いたらぜひこちらも試していただきたいです。これは私自身の感想ですが、マネージドサービスで使えるデータベースは本当に便利です。

本 k8s 環境をできるだけ多くの人に知ってもらって、使ってみていただければと思っています。


最後に 30 日間の利用環境が残り1時間になった時の記念写真。1か月ありがとうございました。
mycluster1

mycluster2




値段が高かったこともありますが、初めて買ったパソコンは結構記憶に残っているものですよね。自分の場合は NEC PC-9801 DA でした。

普段はこれに DOS や Windows を入れて使っていたのですが、当時アスキーから発売されていた MINIX 1.5(当時は 1.2だったかも)も使っていました。初めて使う UNIX でしたが、「カーネルやユーティリティのソースコードが手元にあって、自分でコンパイルする」などはとても新鮮でした。

後に MINIX は BSD ライセンスでオープンソースとなり、その後も進化を続けていて、現在の最新バージョンは 3.2.1 になっています。 当時は(少なくとも標準では)なかった X Window や TCP/IP ドライバも付属しており、久しぶりにインストール&セットアップして遊んでみました。その導入記です:


インストール

まずは導入メディアのダウンロードです。メインページのダウンロードサイトから最新版の ISO イメージをダウンロードします:
2014021501

ダウンロードしたファイルは bz2 形式で圧縮されています。この形式に対応したアーカイブツールで解答して、640MB 程の ISO ファイルを取り出します。この ISO ファイルを元に(仮想環境であればこの ISO からブートして、実機環境であれば CD に焼くなどしてから CD ブートして)インストールを開始します。

まず起動画面です。ここは特に何もしなければ10秒後に 1 を選択したと判断されて MINIX 3 の起動に進みます。何かキーを押して止めてしまった場合も 1 を選択して MINIX 3 の起動へ進んでください:
2014021502

起動が終わるとログイン画面になります。ログインプロンプトの直前に「 root でログインして setup コマンドを実行しろ」と書かれているのでそのようにします。root でログイン(パスワードなし)して、setup と入力します。
2014021503

セットアップを実行するとつらつらとメッセージが出てきます。こんなことが書かれています:
 1) ブランクスクリーンになったら CTRL+F3 で "Software Scrolling" を選ぶ
 2) 間違えた場合は CTRL+C で作業を中断して、最初からやり直す
 3) [y] のように書かれているときは Enter キーで y が選択されたことになる
 4) コロン(:) が表示されているときは Enter キーで先にすすむ
というわけで、まずは Enter キーで先に進みます:
2014021504

Step 1: まずはキーボードの種類を指定します。日本語キーボードであれば japanese と入力します:
2014021505

Step 2: は何もすることがなく飛ばされ、Step 3: パーティショニングの指定。ここは設定しても構いませんが、特に事情がなければそのまま Enter で automatic とします:
2014021506

Substep 3.1: MINIX をインストールするハードディスクを選択します。ハードディスクが1つしかないような状況であれば(大抵がそうでしょうけど)、Enter キーで 0 番目を選択します:
2014021507

Substep 3.2: 選択した領域をそのまま使うか、と聞かれているので Enter で [0] を選択
2014021508

Substep 3.3: この設定でいいか、と聞かれているので yes と入力します:
2014021509

Step 4: は再インストールではないので何もせず先に進み、Step 5: ホームディレクトリのサイズをMBで指定します。例えば 4GB にする場合は 4096 と入力します。"OK?" と聞かれるのでそのまま Enter で先に進みます:
2014021510

 Step 6: ディスクのブロックサイズの指定。デフォルトの 4KB のままで問題ないのでそのまま Enter :
2014021511

Step 7: ファイルのコピーが進みます。しばらく待ちます・・・:
2014021512


Step 8: イーサネットワークカードのチップを選択します。自動検知されたカードには * マークがついています。* がついていればそのまま Enter 、ついてなければ該当チップを選択(あるいは 0 のネットワークなしを選択)します:
2014021513

ネットワークの設定方法を指定します。DHCP であればそのまま Enter キーを:
2014021514

プロンプトが戻ってセットアップ完了です。変更を反映させるため、一度
# shutdown -r now 
と入力して、再起動します。
2014021515

ネットワークが有効になった状態で再起動完了。これでインストール作業は一応完了です:
2014021516


セットアップ

インストールは完了して、一応このままでも使いはじめることはできますが、セットアップして使いやすくしましょう。

まずは root でログインし、デフォルトで設定されていないパスワードを設定しておきます:
# passwd

次にパッケージ管理機能(pkgin)を使ってモジュールを最新状態に更新しておきます:
# pkgin update 
と入力してパッケージ管理DBを最新状態に更新しておきます:
2014021517

とりあえず ssh を入れてみましょう。
# pkgin install openssh

Proceed(「進めますか」)? と聞かれるので y を入力してインストールします。インストールが完了すると ssh コマンドや sftp コマンドなどが使えるようになります:
2014021518


同様にして vim をインストールしてみます。vi よりはやはり vim のほうが便利かな、と:
# pkgin install vim


次は X Window をインストールしてみます。これも pkgin コマンドでインストールできますが、今回はダウンロードサイズが大きいこともあり、かなり時間がかかります。インストールが完了するまでひたすら待ちます:
# pkgin install x11

2014021519


インストールが完了したら xdm コマンドで X Window を起動します:
# xdm
X Window のログイン画面が出るのでここでユーザー ID(root) とパスワードを入力してログインします:
2014021520



デフォルト状態の X Window が起動します。おお、懐かしい twm ! ついに MINIX もここまできたか:
2014021521


最後に X Window の設定を変更してみましょう。root のホームディレクトリ以下に .xinitrc という名前のファイルを、以下の内容で作成します:
xterm -geometry 80x24+1+345 -sb &
xeyes &
xclock -geometry 100x100+200+10 & xsetroot -solid lightskyblue & twm
このファイルを作成した後に MINIX を再起動して root でログインし、今度はコマンドラインから startx コマンドを実行して X Window を起動してみます:
# startx
すると先程 .xinitrc で設定した内容でウィンドウマネージャーが起動し、背景色も変わり、懐かしい xeyes や xclock が起動した状態でスタートするようになるはずです:
2014021522


xeyes キターッ! 懐かしすぎる!!

自分が MINIX を使っていた頃は、Mini-X とかいうツールを使って、なんとか X Window が動くようになったとかならないとか・・・という噂を聞いたことがあったくらいでした。今では X Window までこんな簡単に導入できちゃうんですね。

ただ自分はこの twm というウィンドウマネージャーがあまり得意でなくて(苦笑)・・ まあ軽くていいんでしょうけど、ちょっと慣れない感じ。別のに変更できないかな。あと日本語化についてもちゃんと調べてみたいです。


 

このページのトップヘ