Raspberry Pi + MicroK8sで居室環境モニタリングシステムを構築してみました
Raspberry PiとMicroK8sで居室環境モニタリングシステムを構築してみました。 簡単なマニフェストのサンプルも掲載しています。
テクノロジーコラム
- 2021年06月11日公開
安価なシングルボードコンピュータとして人気のRaspberry Piと手軽にkubernetesクラスタの展開が可能なMicroK8sを使って、居室の環境情報を取得・可視化するIoTシステムを構築しました。
Raspberry Pi
LinuxOSが稼働するシングルボードコンピュータで、IoTシステムでの活用やデスクトップコンピュータとしての利用など幅広く利用されています。近年は産業用途でも利用が拡大していることが注目されています。
今回のIoTシステムではRaspberry Pi 4B 8GBモデルを利用し、OSにはUbuntu Server 20.10のRaspberry Pi用イメージを利用しました。
MicroK8s
Ubuntuの開発元であるCanonical社が開発する軽量kubernetesです。
- インストールが1コマンドで完了する
- クラスタ構築も数コマンドで完了
- kubernetesのアップデートに自動で対応する
- データストアの高可用性に自動で対応する
- ARMアーキテクチャでも稼働する
といった点が特徴のOSSです。
Raspberry Piでも稼働するkubernetes製品として注目されています。
IoTシステムでKubernetesを使うメリット
IoTシステムはエッジサーバーやIoT機器の台数が増えやすいという特性があります。ここで問題になるのは数十台~数百台規模のIoT機器にアプリケーションをどのように配信・更新するかといった点です。このような課題を解決する方法の一つが、Raspberry Pi上でKubernetesクラスタを稼働させることです。各Raspberry Piへのアプリケーションの配信・更新はKubernetes経由となるため、設置台数が1台でも100台でもマニフェストの適用だけでアプリケーション配信が可能となります。
システム概要
Raspberry PiにはGPIOピン経由で - 温湿度センサ - 音量センサ - 照度センサ
が接続されており、Kubernetes上で稼働するコンテナアプリケーションがそれぞれのセンサからデータを収集、クラウド上に送付をしています。
以下のように居室の環境情報がリアルタイムにモニタリングできるようになりました。ここでは室温の時系列データや最新値を表示しています。このシステムを応用するとIoTデバイス機器の監視などの活用も考えられます。
カメラデバイスも接続されており
- クラウドからカメラ撮影命令をRaspberry Piに送信
- Raspberry Piでカメラ撮影
- 撮影した画像をクラウドに送付する
といった挙動で画像取得を行っています。IoTでよく利用されるMQTTプロトコルを使うことで1対多の通信が実現できるため、一度の命令で複数のマシンでカメラ撮影が行われます。これによりクラウド上からリモートでRaspberryPiに命令を送り、撮影した画像データをクラウド上のストレージノードに蓄積できるようになりました。MQTT通信では最大256MBのデータが扱えるため、画像ファイルやログファイルをIoTデバイスから集約するような運用も考えられます。
Kubernetesのマニフェストサンプル
DaemonSetとnodeSelector
各ノードに接続されたセンサーデバイスを利用するため、ノードに1Podずつ配置することが可能なDaemonSetを選択しました。さらにノードごとに接続されているセンサーデバイスが異なるため、ノードにラベル付けを行いました。このラベルを使って適切なセンサーデバイスが接続されたノードへのスケジューリングが実現されます。
サンプル
利用したKubernetesのマニフェストをサンプルとして掲載します。※一部実際のファイルから変更しています。
Kubernetesを使ったアプリケーション更新
カメラ画像に撮影時刻を文字入れする簡単な変更を加えた新たなイメージを作成しました。このとき、Kubernetesに対して利用するイメージを変更しただけのマニフェストを適用しました。※一部画像を加工しています。
- image: gitlab.example.com:5005/raspberry/camera:v2★v1からv2へ
1台1台アプリケーションの更新作業をする必要がなく、この変更だけでカメラが接続されたRaspberryPi上のアプリケーションはすべて更新されることが確認できました。kubernetesではアプリケーションのデプロイはマニフェストファイルを介して行われるため、クラスタの台数に関わらず同じ作業手順でクラスタ全台へのアプリケーションの作成・更新が行えます。
終わりに
Raspberry PiとMicroK8sを利用し、Kubernetes上でIoTシステムを構築するメリットを説明させていただきました。 NTTテクノクロスではKubernetes構築・運用のノウハウを活かした幅広いソリューションをご用意しております。 Ubuntu/Kubernetes/OSS製品について何かお困りのことがございましたら、是非お声掛けください。
※NTTテクノクロスではUbuntuの開発元であるCanonical社の商用サポート日本語窓口業務も行っています。
