会社でRaspberry Pi 3Bを結構な数を所有していたので、Kubernetes クラスターを作ってみたりしました。まあ動きはしたのですが、ストレージがネックであまり思ったように使うことができませんでした。
なんかそのような話をしたところ、「じゃあこれ使ってみてよ」とRaspberry Pi Compute Module 3(以降、CM3モジュール)とminiNodes RPi Cluster RedoというCM3を複数挿せるボードを評価用にわたしてもらったので早速使ってみることにしました。
CM3モジュールは見た目はノートPC用のメモリーモジュールのような形状をしているARMボードで、Raspberry Pi 3くらいの性能があるようです。
ただ、CM3モジュールはコンピュートリソースだけしか提供しないため、これをマウントするモジュールが必要になります。そこで、一緒に借りたのがminiNodes RPi Cluster Redoです。CM3モジュールを最大5枚接続することができます。ネットワークはminiNodes RPi Cluster Redo側に接続し、接続したCM3モジュールにネットワークを提供します。なので、ケーブルがごちゃごちゃしません。
ちなみに5枚CM3を接続できるボードのため、3Aのアダプターを使っています。
イメージの書き込み
一般的なARMボードはmicroSDにOSイメージを書き込み、それをボードに挿入することでOSをブートしますが、CM3モジュールはmicroSDスロットは存在しません。その代わりとしてeMMCモジュールが基盤づけされています。
じゃあイメージの書き込みはどうするのかというと、今回お借りしたものだけではできなかったので、次のようなボードをお借りしました。
このボードを使ってCM3モジュールのeMMCモジュールをマウントしてEtcherを使ってイメージを書き込みました。
CM3モジュールを挿入して、USB接続するとクライアントに4GBのメモリーとしてマウントされます。
CM3モジュールを選択して、イメージを書き込みます。このあと、ヘッドレスでアクセスしたいので、 /boot/ssh
ファイルを作っておきます。
CM3の起動
CM3モジュールにRaspbianをイメージ書き込みした場合は、ヘッドレスでRaspbianにアクセスできます。 クライアントとCM3モジュールを接続したminiNodes RPi Cluster Redoの有線LANケーブルを接続してから電源を接続します。miniNodes RPi Cluster Redoの右側にモジュールごとに電源を投入するためのスイッチが用意されているので、まずひとつ目のCM3の電源を入れます。
Raspbianの場合はクライアントとラズパイを有線LANケーブルで直接接続することで、ヘッドレス(つまり、ネットワークやモニター、キーボードが用意されていない状態)でもクライアントからssh pi@raspberry.local
のようにアクセスできます。初期パスワードは raspberry
です。あとで raspi-config
などで初期パスワードを変えましょう。
Raspbianの初期起動時はrootディスクの伸張が行われたあと再起動されます。再起動後、 ssh pi@raspberry.local
でアクセスできますので、最低限ホスト名 ( /etc/hosts
) の設定や IPアドレス( /etc/dhcpcd.conf
) の設定などを行います。再起動してIPアドレスでアクセスできるのを確認したら、次のCM3の電源を投入してこれを繰り返します。
k3s を使ってKubernetesクラスターをうごかしてみた
k3sは、Rancher Labs社が開発している軽量なCertified Kubernetes distributionのツールで、x86のサーバーからラスパイのようなIoT向け機器など、多くのプラットフォームで使えるクラスター構築ソフトウェアです。
せっかくラズパイクラスターを作れる環境を借りることができたので、k3sを使ってKubernetesクラスターを動かしてみることにしました。
詳細やセットアップ方法については後日、べつのブログ記事でまとめますが、Raspberry Pi 3Bでクラスターを組むよりずっと簡単でした。
# kubectl get no NAME STATUS ROLES AGE VERSION raspi3.localdomain Ready <none> 12m v1.16.3-k3s.2 raspi2.localdomain Ready <none> 12m v1.16.3-k3s.2 raspi1.localdomain Ready master 14m v1.16.3-k3s.2
ラズパイでKubernetesクラスターを動かすにはやはり、microSDがネックになっているんだと思います。評判がいいmicroSDを使えばもっとまともになるかもしれませんが、microSDは書き換えを繰り返すと読み書きの性能が徐々に落ちていくので、永続データの置き場としてはあまり最適ではないためです。
CM3モジュールはmicroSDを使わない分、安心できます。もちろんeMMCも寿命が来れば壊れますが、強度や熱はmicroSDより頼りになりそうです。
Docker Swarm mode を使ってDockerクラスターをうごかしてみた
Docker Swarm modeについても試してみました。 まず、masterノードを起動します。
$ docker swarm init --listen-addr 172.16.214.1:2377 Swarm initialized: current node (nojv9gandjk4clmj1fgmozbng) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-4buclt9u870y9bq89uvf8wkgbzefy1r0swq10ysrlrrk4hx2y6-cm56tncoimoby91tup99u2der 172.16.214.1:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
次に、残りのCM3でmasterノードのトークンキーを指定して docker swarm join
を実行するだけです。これを追加するノードの数だけ実行します。
$ docker swarm join --token SWMTKN-1-4buclt9u870y9bq89uvf8wkgbzefy1r0swq10ysrlrrk4hx2y6-cm56tncoimoby91tup99u2der 172.16.214.1:2377 This node joined a swarm as a worker.
クラスターは次のように表示されます。
$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION nojv9gandjk4clmj1fgmozbng * node1-pi Ready Active Leader 19.03.5 5thkb2d7g12nsgkztkmrg0f20 node2-pi Ready Active 19.03.5 7ipf24j7lmros0mwrvesgyc5z node3-pi Ready Active 19.03.5 wmkfoezogxevg0ut287grpojy node4-pi Ready Active 19.03.5 nb573ipvtt4yun50iyj7l2qjj node5-pi Ready Active 19.03.5
Docker Swarm modeで構築したクラスターをどう使うかは、FacebookのDockerコミュニティで丁度いい動画を見つけたので次に貼り付けます。
Docker Swarm modeを使ったときの詳細やセットアップ方法については後日、べつのブログ記事でまとめます。
使ってみて
Raspberry Pi Compute Module 3、非常に楽しいARMボードでした。何かの情報を解析するために持ち歩きできるようなマシンでクラスターを作ってその上で解析したいといった需要には適切なのではないかなと思います。