ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Raspberry Pi Compute Module 3 (CM3)をさわってみた

会社でRaspberry Pi 3Bを結構な数を所有していたので、Kubernetes クラスターを作ってみたりしました。まあ動きはしたのですが、ストレージがネックであまり思ったように使うことができませんでした。

なんかそのような話をしたところ、「じゃあこれ使ってみてよ」とRaspberry Pi Compute Module 3(以降、CM3モジュール)とminiNodes RPi Cluster RedoというCM3を複数挿せるボードを評価用にわたしてもらったので早速使ってみることにしました。

CM3モジュールは見た目はノートPC用のメモリーモジュールのような形状をしているARMボードで、Raspberry Pi 3くらいの性能があるようです。

f:id:ytooyama:20200110204500j:plain
Raspberry Pi Compute Module 3

ただ、CM3モジュールはコンピュートリソースだけしか提供しないため、これをマウントするモジュールが必要になります。そこで、一緒に借りたのがminiNodes RPi Cluster Redoです。CM3モジュールを最大5枚接続することができます。ネットワークはminiNodes RPi Cluster Redo側に接続し、接続したCM3モジュールにネットワークを提供します。なので、ケーブルがごちゃごちゃしません。

f:id:ytooyama:20200113175818j:plain

ちなみに5枚CM3を接続できるボードのため、3Aのアダプターを使っています。

イメージの書き込み

一般的なARMボードはmicroSDにOSイメージを書き込み、それをボードに挿入することでOSをブートしますが、CM3モジュールはmicroSDスロットは存在しません。その代わりとしてeMMCモジュールが基盤づけされています。

じゃあイメージの書き込みはどうするのかというと、今回お借りしたものだけではできなかったので、次のようなボードをお借りしました。

f:id:ytooyama:20191216094536j:plain

このボードを使ってCM3モジュールのeMMCモジュールをマウントしてEtcherを使ってイメージを書き込みました。

CM3モジュールを挿入して、USB接続するとクライアントに4GBのメモリーとしてマウントされます。

f:id:ytooyama:20200113180606p:plain
モジュールのマウント

CM3モジュールを選択して、イメージを書き込みます。このあと、ヘッドレスでアクセスしたいので、 /boot/ssh ファイルを作っておきます。

f:id:ytooyama:20200113180717p:plain
CM3のeMMCは4GB

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コミュニティで丁度いい動画を見つけたので次に貼り付けます。

www.youtube.com

Docker Swarm modeを使ったときの詳細やセットアップ方法については後日、べつのブログ記事でまとめます。

使ってみて

Raspberry Pi Compute Module 3、非常に楽しいARMボードでした。何かの情報を解析するために持ち歩きできるようなマシンでクラスターを作ってその上で解析したいといった需要には適切なのではないかなと思います。

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。