Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IoTっぽいアプリをk3s+Raspberry Piで実行する

IoTっぽいアプリをk3s+Raspberry Piで実行する

2019/04/26のCloud Native Sendai #1で発表した資料です

Ba6e6b57ca87882b1aa0a7ed835a5ed6?s=128

taiko19xx

April 26, 2019
Tweet

Transcript

  1. IoT”っぽい”アプリを k3s+Raspberry Piで実行する Cloud Native Sendai #01@2019/04/26 @taiko19xx / 木村

    俊彦
  2. 自己紹介 • 木村俊彦(@taiko19xx) • 主にAzure/AWSの設計構築 • PHP/Node.jsでのバックエンド構築も • 技術系同人誌サークル「杜の都の開発室」主宰 •

    https://morinomiyakono.booth.pm/ • 「技術書典」というイベントで本を出しています
  3. None
  4. いつものように Raspberry Piで遊んでいた ある日のこと…

  5. ある日のこと • Raspberry PiでDockerは動く • Kubernetesは動くのか? • 実用的かは別 • 動いたとしてもRaspberry

    Piには重荷と予想
  6. None
  7. None
  8. ある日のこと • Kubernetesも思っていた以上の低負荷で動かせる事が判明 • コンテナ動かすだけであれば簡単にできる • せっかくなのでRaspberry Piらしい何かをしたい

  9. “GPIO”にアクセスして “Lチカ”させられないか?

  10. What is GPIO/Lチカ • GPIO = General-purpose input/output • 汎用入出力のこと

    • Raspberry Piに沢山ついている”ピン” • Lチカ = LEDチカチカ • LEDを点滅させること • 電子工作の第一歩として有名
  11. KubernetesのPodから 物理デバイスにアクセスする 必要がある

  12. 実現するための唯一にして 最大のハードル

  13. 本当に可能か?

  14. 今回の実験環境 • Raspberry Pi 3B • Raspbian Stretch • k3s

    v0.4.0 • Kubernetes v1.14.1-k3s.4 • Docker v18.09.0 • 比較用 • k3sにcontainerdが含まれているので、Docker自体は不要
  15. Docker単体ではどうか? • 可能 • $ docker run -it --rm --device

    /dev/gpiomem raspbian/stretch /bin/bash • --device /dev/gpiomem でGPIOが割り当てられてるメモリ領域 へのアクセスを可能にする
  16. None
  17. None
  18. しかしKubernetesには --device相当のオプションが ない

  19. None
  20. None
  21. 行けるかと思ったが ダメだった…

  22. 最終手段、Privileged • 特権モードを有効にしてホストのデバイスの操作ができる • https://kubernetes.io/docs/concepts/workloads/pods/pod/#priv ileged-mode-for-pod-containers • Kubernetesでは1.11以降でサポート • Dockerにもある(--privileged)

    • 全デバイスにアクセスできるので諸刃の剣
  23. None
  24. Lチカのデモ

  25. Kubernetes on Raspberry Piは 実用的か?

  26. 正直(まだ)実用的ではない

  27. 実用的ではない理由 • 利用できるコンテナが少ない • Raspberry PiはARM(armhf/arm64)アーキテクチャ • 既存のコンテナ(x86_64)が利用できない • 種類がない訳ではない

    • カスタマイズする場合のビルドも大変 • Raspberry Pi(もしくは他のARMデバイス)上でビルドする • もしくはクロスプラットフォームビルドを行う必要がある • まだまだ重い • K3sを使えば大分軽くはなるが…
  28. Kubernetesを使うことによる良い面 • 使い慣れたkubectlでデプロイや操作ができる • ビルド問題が解決できている前提 • 管理に利用するツールが一括で済む • SSHで接続してログやサービスの状態を確認する手間が減る •

    Podが落ちても自動でリトライしてくれる • スタンドアロンで動作させる時は便利 • IoT機器は基本スタンドアロン
  29. 結論 • 何とか物理アクセスは可能 • 1GBしかメモリを積んでいない環境ではまだまだ重荷 • KubernetesやK3sのこれからに期待 • Raspberry Piのような制限のある環境で試行錯誤するのは楽しい

    • 休み中のコンテナ入門にいかがでしょうか • 頑張ればクラスタも組めます
  30. ありがとうございました