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で発表した資料です

taiko19xx

April 26, 2019
Tweet

More Decks by taiko19xx

Other Decks in Technology

Transcript

  1. IoT”っぽい”アプリを
    k3s+Raspberry Piで実行する
    Cloud Native Sendai #[email protected]/04/26
    @taiko19xx / 木村 俊彦

    View Slide

  2. 自己紹介
    • 木村俊彦(@taiko19xx)
    • 主にAzure/AWSの設計構築
    • PHP/Node.jsでのバックエンド構築も
    • 技術系同人誌サークル「杜の都の開発室」主宰
    • https://morinomiyakono.booth.pm/
    • 「技術書典」というイベントで本を出しています

    View Slide

  3. View Slide

  4. いつものように
    Raspberry Piで遊んでいた
    ある日のこと…

    View Slide

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

    View Slide

  6. View Slide

  7. View Slide

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

    View Slide

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

    View Slide

  10. What is GPIO/Lチカ
    • GPIO = General-purpose input/output
    • 汎用入出力のこと
    • Raspberry Piに沢山ついている”ピン”
    • Lチカ = LEDチカチカ
    • LEDを点滅させること
    • 電子工作の第一歩として有名

    View Slide

  11. KubernetesのPodから
    物理デバイスにアクセスする
    必要がある

    View Slide

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

    View Slide

  13. 本当に可能か?

    View Slide

  14. 今回の実験環境
    • Raspberry Pi 3B
    • Raspbian Stretch
    • k3s v0.4.0
    • Kubernetes v1.14.1-k3s.4
    • Docker v18.09.0
    • 比較用
    • k3sにcontainerdが含まれているので、Docker自体は不要

    View Slide

  15. Docker単体ではどうか?
    • 可能
    • $ docker run -it --rm --device /dev/gpiomem raspbian/stretch
    /bin/bash
    • --device /dev/gpiomem でGPIOが割り当てられてるメモリ領域
    へのアクセスを可能にする

    View Slide

  16. View Slide

  17. View Slide

  18. しかしKubernetesには
    --device相当のオプションが
    ない

    View Slide

  19. View Slide

  20. View Slide

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

    View Slide

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

    View Slide

  23. View Slide

  24. Lチカのデモ

    View Slide

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

    View Slide

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

    View Slide

  27. 実用的ではない理由
    • 利用できるコンテナが少ない
    • Raspberry PiはARM(armhf/arm64)アーキテクチャ
    • 既存のコンテナ(x86_64)が利用できない
    • 種類がない訳ではない
    • カスタマイズする場合のビルドも大変
    • Raspberry Pi(もしくは他のARMデバイス)上でビルドする
    • もしくはクロスプラットフォームビルドを行う必要がある
    • まだまだ重い
    • K3sを使えば大分軽くはなるが…

    View Slide

  28. Kubernetesを使うことによる良い面
    • 使い慣れたkubectlでデプロイや操作ができる
    • ビルド問題が解決できている前提
    • 管理に利用するツールが一括で済む
    • SSHで接続してログやサービスの状態を確認する手間が減る
    • Podが落ちても自動でリトライしてくれる
    • スタンドアロンで動作させる時は便利
    • IoT機器は基本スタンドアロン

    View Slide

  29. 結論
    • 何とか物理アクセスは可能
    • 1GBしかメモリを積んでいない環境ではまだまだ重荷
    • KubernetesやK3sのこれからに期待
    • Raspberry Piのような制限のある環境で試行錯誤するのは楽しい
    • 休み中のコンテナ入門にいかがでしょうか
    • 頑張ればクラスタも組めます

    View Slide

  30. ありがとうございました

    View Slide