コンピューティングがネットワークに溶け込む未来〜僕たちがエッジデバイスでKubernetesを使う理由〜

# はじめに
　エッジコンピューティングの一丁目一番地と言えば、ラズパイやNVIDIA Jetsonみたいな **エッジデバイスでKubernetes**ですよね(!?)。[k3s](https://k3s.io/)、[k0s](https://k0sproject.io/)、[MicroK8s](https://microk8s.io/)と軽量Kubernetesは、前々からKubernetes on エッジデバイスの代名詞ですし、[KubeEdge](https://kubeedge.io/en/)やEclipse Foundationの[EdgeNative WG](https://edgenative.eclipse.org/)が推進する[ioFog](https://iofog.org/)など、エッジコンピューティング向けのKubernetes関連のオープンソースプロジェクトも増えつつあります。そして、KubeCon + CloudNativeConでも[Kubernetes on Edge Day](https://events.linuxfoundation.org/kubernetes-on-edge-day-north-america/#:~:text=Kubernetes%20on%20Edge%20Day%20brings,at%20the%20edge%20should%20attend.)なイベントをやったりと、コミュニティの盛り上がりも高まっています。
　そんな中、エンタープライズ向けのKubernetesディストリビューションを提供しているレッドハットが、軽量版OpenShiftとして[MicroShift](https://github.com/openshift/microshift)をオープンソースとして推進し始めたり、VMwareの[VMware Edge Compute Stack 2.0](https://blogs.vmware.com/sase/2022/08/30/vmware-edge-compute-stack-new-in-2022/)のポートフォリオにもDevice Edgeがチラ見えしていたりと、イノベーター向けと思っていたDevice EdgeでのKubernetes活用がいよいよアーリーアダプタ向けに動きだした雰囲気を感じてなりません。
　そこで今回は、エッジコンピューティングの中でも特に「Device Edge」に着目し、Device EdgeでのKubernetesの利用動向と「Device EdgeでなぜKubernetesを使うのか」について、自身の経験も踏まえて整理してみたいと思います。

# Device Edgeとは
　そもそもエッジコンピューティングというのは、「センサーなどのデータを生成する場所へコンピューティングを近づける概念」を指します。詳しくは、過去の記事でまとめてますので、詳細を知りたい方は以下を参照してください。

https://qiita.com/ydo/items/3a5e876b3790c2b21a72

　その中で「Device Edge」とは、**フィールドへ展開された様々なデバイス(エッジデバイス)によって提供されるITリソース**を指します。エッジデバイスとDevice Edgeの違いを明確に語ってるサイト等をあまり見かけませんが、**エッジデバイスはデバイス単体**を表し、**Device Edgeはリソース**を表すイメージを持つと分かりやすいかもしれません。つまり、Device Edgeは、**エッジデバイス単体でも良いし、複数でも良い**、という考え方です。

:::note info
Linux FoundationのLF Edgeのプロジェクトである Open Glossary of Edge Computing [^1]では、Device Edgeを以下で定義しています。

[^1]: https://github.com/State-of-the-Edge/glossary

>Edge computing capabilities on the device or user side of the last mile network. Often depends on a gateway or similar device in the field to collect and process data from devices. May also use limited spare compute and data storage capability from user devices such as smartphones, laptops and sensors to process edge computing workloads. Distinct from infrastructure edge as it uses device resources.

ちなみに、**Device Edge Cloud**というものもあります。エッジデバイスでKubernetesを実行する場合は、Device Edge Cloudと言った方が正しいのかもしれませんが、本稿では、それも含めてDevice Edgeと呼びます。

>An extension of the edge cloud concept where certain workloads can be operated on resources available at the device edge. Typically does not provide cloud-like elastically-allocated resources, but may be optimal for zero-latency workloads.
:::

　以下に、エッジコンピューティングの全体像を示します。一番下に位置するDevice Edgeは、我々の職場や生活圏に溢れるデバイスが対象になります。従来の組み込み市場がモロ被りですが、組み込み市場にIoTやクラウドネイティブの波が押し寄せて、生活圏にあるシステムをスマートにする期待があります。同時に、従来の組み込み市場のプレイヤーは、モノ売りからコト売りへビジネスモデルを転換するチャンスを得ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/082735f6-c83a-7b14-baaf-52162430fefc.png)

# エッジデバイスでKubernetesを利用している事例

　ここでは、公開されている事例をいくつかピックアップして整理していきます。

## カメラでKubernetes

　ラズパイやNVIDIA Jetsonなどのカメラとの組み合わせは、あるあるなユースケースですよね。「お家監視カメラやってみた」とか、とっつきやすいです。ラズパイはエンタープライズの現場でもPoCでよく使われます。基本的に既存の機器とラズパイ等を連携できるようにして、既存の機器をスマート化するモジュールの様な使い方が主流かと思います。エッジコンピューティングを現場に展開される既存のシステムの延長と捉えて、既存の機器を取り替えたり、ソフトウェアを改修しようと思うとなかなかハードルが高いです。既存のシステムはそのままに、手頃なデバイスで試行錯誤するのが第一歩と思います。

https://qiita.com/Y-Shikase/items/eea9b8b3320ffd7a55bb

https://zenn.dev/nkte8/articles/2021-10-12-r01

https://www.ntt-tx.co.jp/column/tec/210611/

　今年の4月に[組み込みエッジコンピューティング展（春）](https://www.japan-it-spring.jp/ja-jp/about/esec.html
)という展示会があったのですが、そこではたくさんのエッジデバイスが展示されていて、非常に盛り上がりを感じました。産業向けのデバイスということで、ファンレス、防塵、耐水、低消費電力など、デバイスをフィールドに展開するときに気になる耐久性の高さや省電力を売りとしたハードウェアがたくさん展示されていた、と言うことに加えて、AIとの組み合わせの展示がとても多かったのが印象的でした。とにかく様々なニーズに応えるためにハードウェアのラインナップを豊富に揃えて、昨今のAIを付加価値的に組み込みで昨今のAIのニーズに応える、というのが組み込みの戦い方なんだなと思います。
　例えば、製品の傷の検知とか簡単なAIはラズパイを使ってさくっと試し、ムラとかもっと深い解析が必要な場合は、NVIDIAのJetsonを使ってみる、みたいな話をよく聞きます。そして、ラズパイのSDカードの故障率が高いことを嫌って、本番運用時は、ラズパイより高価な産業用PCなどの機器も候補に検討するケースが多いとのことです。安くて買いやすいラズパイだからこそ、予備をたくさん確保しておいて、壊れたらすぐ交換、という運用をしやすそうにも感じますが、壊れすぎてもコストがかさんでやってられない訳で、本格運用のフェーズでは、高価で丈夫な機器に向かうんだと思います。
ちなみに、展示されていたハードウェアは以下みたいなやつです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/d6374b2e-cbf0-6518-2fdd-4ae8757a696d.png)

　なお、組み込みエッジコンピューティング展から何か傾向が見えないかと独自に調べた感じだと、シングルボードコンピュータの製品とアセンブリ済みのボックス製品が半々くらいでした。NVIDIA GPUは意外と少なくて、ほとんどがIntel CPUを採用した製品で、次にARMの製品が多ったです。OSはWindowsとLinuxが多く、Linuxは基本的にUbuntuでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/7d7ae8bf-4d3c-5ebb-3306-89121e66d276.png)

## 産業機器でKubernetes
　エッジデバイスやエッジサーバでOPC-UAクライアントを動かして、PLCからデータを取得する、というのはよくあるユースケースと思います。更に一歩進んで、現在は、**PLCそのものをコンテナで動かす**という動きがあります。元々ハードウェアシステムとして提供されていたPLCがソフトウェアPLCとしてWindowsアプリケーション等で利用出来るようになり、更に発展して、産業用PCでコンテナプラットフォームを構築し、コンテナPLCとAI等のITアプリケーションを同じプラットフォーム上で実行する検討がされています。通信業界におけるNFVみたいな流れです。
　例えば、Red HatとIntelは、[Intel ECI（Edge Controls for Industrial）](https://www.intel.co.jp/content/www/jp/ja/internet-of-things/industrial-iot/edge-controls-industrial.html)とOpenShiftでコラボレーションしています。[^2]

[^2]: https://www.redhat.com/ja/blog/red-hat-and-intel-collaborate-advance-industry-40-ecosystem

　Intelは[TCC（Time Coordinated Computing）](https://www.intel.com/content/www/us/en/developer/tools/time-coordinated-computing-tools/overview.html)や[CAT（Cache Allocation Technology）](https://www.intel.com/content/www/us/en/developer/articles/technical/introduction-to-cache-allocation-technology.html)といったリアルタイム処理とハードウェアアクセラレーションを担い、Red HatはOpenShiftを産業用PCへインストールしてコンテナプラットフォームを構築する役割を担っています。OpenShiftはリモートワーカーノードのトポロジで展開して、Masterノードはデータセンター内のサーバで、Workerノードは産業用PCで構成しています。そして、産業用PCのホストOSにRHEL for realtimeを入れて、OpenShiftのPerformance Addon OperatorでホストOSのKernelをチューニングして、コンテナPLCをリアルタイム実行できる様にセットアップしてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/1d70329e-50e8-c81b-eeb0-374a2c749045.png)

※評価結果のレポートがブログに公開されていますので、興味のある方はご参考まで。

https://www.redhat.com/en/blog/software-defined-programmable-logic-controller-introduction

　産業用PCがコンテナプラットフォームになると、工場毎にプライベートクラウドが構成されて、正に分散クラウドみたいな世界観に感じます。一昔前のプライベートクラウドは、パブリッククラウドでは満たしづらい、SLAやコスト、データセキュリティ、社内ネットワーク接続の要件をカバーするための存在だったと思いますが、NFVやコンテナPLCといった動向を見ると、プライベートクラウドの存在価値を再定義する時代なのかもと思ったりします。プライベートクラウドが現場に近づくことで、従来ハードウェアで導入されていた専用機器を汎用ハードウェアで実行することが可能となり、パブリッククラウドと組み合わせて全体最適化を図る時代に突入してきてるのかなと思います。

## 自動車でKubernetes
　SDV（Software Defined Vehicle）の動きが熱いですが、車でKubernetesの事例は、2018年頃にデンソーの発表した「Misaki[^3]」というプラットフォームの取り組みが有名かと思います。車を制御する機能を実行するECU(Electronic Control Unit)をKubernetes Workerとして利用して、車の中でデータ収集や制御アプリケーションを実行する取り組みをしています。
　この取り組みでは、車とクラウドをVPNで繋げて、フラットなアンダーレイネットワークを作り、クラウド側に配置したKubernetes Masterから車へコンテナを展開します。クラウド側には開発コンソールを実装し、クラウド側で実装したアプリケーションを車へ展開するデジタルツインなプラットフォームを実証しています。また、Misakiでは、車のECUのリソースも有限ということで、車のコンピューティングリソースが不足した際に、クラウドのリソースを補助リソースとして活用する[Cloud Bursting](https://aws.amazon.com/jp/what-is/cloud-bursting/#Why_is_cloud_bursting_important.3F)にも取り組んでいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/80173247-de4c-bb1d-0676-0742e05bbef1.png)
参照） https://www.slideshare.net/JunKaiYong/integrating-service-mesh-with-kubernetesbased-connected-vehicle-platform

[^3]: https://www.slideshare.net/JunKaiYong/integrating-service-mesh-with-kubernetesbased-connected-vehicle-platform

## ロボットでKubernetes
　ロボット制御のミドルウェアであるROSやROS2といったアプリケーションをコンテナで実行し、ロボット上にKubernetesを動かしてROSアプリケーションを実行する、という取り組みがされています。例えば、Sony R&D[^4]の取り組みや、GoogleのGoogle Cloud Robotics Core[^5]、インテック先端技術研究所のRDBOX[^6]といった事例があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/d18ce491-572c-fd8c-00b8-130a28d743c6.png)
参照) SONY R&D - https://www.slideshare.net/FujitaTomoya/rosros2-distributed-system-with-kubernetes

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/7b417798-27dc-1186-2225-369280f55aba.png)
参照) Google Cloud Robotics Core - https://googlecloudrobotics.github.io/core/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/88050486-c9ec-54fd-5d2a-27e830d73f7f.png)
参照) RDBOX - https://github.com/rdbox-intec/rdbox

[^4]: https://www.slideshare.net/FujitaTomoya/rosros2-distributed-system-with-kubernetes
[^5]: https://googlecloudrobotics.github.io/core/
[^6]: https://github.com/rdbox-intec/rdbox

　それぞれ共通して、**ロボットとクラウドを統合してフラットなプラットフォームを実現する**という取り組みになっています。エッジとクラウドでアプリケーションの管理プラットフォームがサイロになってしまう課題を、Kubernetesで標準化することで対応しています。

## 飲食店でKubernetes
　北米でハンバーガーショップを展開しているChick-fil-a[^7]は、フライドチキンの需要予測を精緻化するために、店舗内のPOSやフライヤーなどの調理機器からデータを収集し、店舗内にIntel NUC 3台で構成したKubernetesクラスタでデータ分析を行うプラットフォームを発表しています。2018年のKubeCon+CloudNativeConで発表された有名な事例です。
　もともと、本社の方にPOS等のデータが集まって、全店舗共通の需要予測が店舗に降りてくる業務フローだったのに対して、各店舗のPOSや調理機器等から得たリアルタイムデータで補正して、店舗毎に最適化した需要予測を算出し、店舗スタッフの業務の生産性を向上しようという取り組みです。既に約2000店舗へこの分析プラットフォームを展開しているということで、かなりイノベーティブな事例です。初めからエッジコンピューティングありきで取り組んだのでなく、初めはクラウドで構築したりしていたそうですが、外部ネットワークとの切断が起こっても業務を継続できる点と、ネットワーク接続性がそもそも乏しい店舗が存在するということから、エッジコンピューティングに舵を切って推進しています。将来的に、調理の自動化をやるぞ！という方針もあるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/f4bd5214-5463-6e86-19a9-4742b81045fa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/8bec71db-8f78-6a46-24d2-5f2c25803e94.png)
参照) https://medium.com/@cfatechblog/edge-computing-at-chick-fil-a-7d67242675e2

[^7]: https://medium.com/@cfatechblog/edge-computing-at-chick-fil-a-7d67242675e2

## スーパーでKubernetes
　Walmartは、店舗内にKubernetesクラスタを展開して、クラウドPOSの決済トランザクションを店舗で、BIなどの分析アプリケーションをクラウドで処理するアーキテクチャに改善する取り組みをおこなっています。2019年にKubeCon North America[^8]で発表されました。クラウドPOSは、決済トランザクションがクラウド側で行われる故に、外部ネットワークとの切断が発生してしまうと業務影響が大きい課題に取り組んだ事例です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/10639637-5972-9819-7569-d5591f450882.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/c9939cc7-6ab6-8f25-9be1-051a82c502f2.png)
参照) https://static.sched.com/hosted_files/kccncna19/20/3%20Manesh%20and%20Siram%20New%20V2.pptx.pdf

[^8]: https://static.sched.com/hosted_files/kccncna19/20/3%20Manesh%20and%20Siram%20New%20V2.pptx.pdf

## 衛星でKubernetes
　Red HatとIBM Space Techは、ENDURANCE[^9]という宇宙ミッションで、Red Hatがオープンソースとして開発を推進する軽量版OpenShiftの「MicroShift」を小型人工衛星(CubeSat)へ搭載して、SpaceXの宇宙船で宇宙へ運び、磁力計、太陽センサー、電圧、温度といった衛星のテレメトリデータの取得やCubeSatのカメラで写真撮影などを地上から制御できるプラットフォームをIBM Cloud上に実装しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/5e1320ec-bbe6-52d9-d025-19366c03f5f5.png)

[^9]: https://www.universetoday.com/152751/ibm-space-tech-wants-to-democratize-space-with-endurance/

他にも、Hypergiantが軍事衛星軌道にk3sベースのKubernetesクラスタを導入したり[^10]、地味に衛星エッジコンピューティングでKubernetesが自然と採用されている感じがします。衛星でKubernetesが動く時代...胸熱...

[^10]: https://japan.zdnet.com/paper/30001466/30005882/

# Device EdgeでKubernetesを使う理由
　このように、様々な業界でDevice EdgeへKubernetesを導入し、アプリケーションを実行する検討がされているわけですが、なぜDevice EdgeでもKubernetesを検討するのでしょうか？クラウドやデータセンターで使われるソフトウェアとして生まれたKubernetesは、もともと分散システムの思想で実装されており、ある意味初めからエッジにも親和性が高いソフトウェアです。そのため、クラウドの延長でエッジを考えた時に、Kubernetesが候補に上がるのは必然の様に感じます。一方で、もともとエッジデバイスを主戦場としている開発者がKubernetesに期待することは何なのでしょうか？ 事例やお客様とのトークを踏まえて自分なりに整理すると、以下の3つに集約されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/358760ed-34d1-f179-2f32-4e50b760fc9d.png)

## アプリ管理の自動化ソフトとしてのKubernetes
　これは、シンプルに、Kubernetesというソフトウェアそのものの価値への期待です。Device Edgeのアプリケーション開発者からすると、Kubernetesの、APIベースでアプリケーションをデプロイできる機能、ローリングアップデートといったアップデートの自動化機能など、アプリケーションのライフサイクル管理の効率化をスクラッチ実装を考えずに容易に実現する点に価値を感じています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/3b7789e2-3a2b-9d11-a959-5fee18b3ccf6.png)

## クラウドのKernelとしてのKubernetes
　これは、クラウドネイティブの動向に強い開発者のニーズです。Kubernetesは、ハードウェアでいうところのOSのように、クラウドのKernelとしてアプリケーションの管理やコンピューティングリソースの管理を標準化するソフトウェアです。マルチクラウドやハイブリッドクラウドでもKubernetesを軸に運用の一貫性のあるプラットフォームを設計するように、エッジに対してもKubernetesを軸として、クラウドとエッジの運用の一貫性を確保したい、というものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/ccc3e92e-cf05-e231-5240-4288c5fe62e2.png)

## エッジでもクラウドネイティブなオープンソースを使いたい
　これも、クラウドネイティブの動向に強い開発者のニーズです。例えば、エッジデバイスを横断してサービスメッシュを構成したい、サーバレスなプラットフォームを実現したいといった、CNCFなどで推進されるオープンソースをエッジでも利用したい、というものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/0106447b-f978-9234-db46-0b90ce737aab.png)


# 今後のエッジコンピューティングの技術的な方向性（インフラ観点）
　エッジコンピューティングの導入形態は様々ありますが、個人的にはDevice Edgeこそ、エッジコンピューティングの真骨頂と思います。そんなDevice EdgeとクラウドがKubernetesを中心にインテグレーションされて、エッジもクラウドも一貫性を持った運用が可能になると、正にコンピューティングがネットワークに溶け込む世界が見えてきます。
点々と存在するコンピューティング環境が線で結ばれて一つの群を成して、論理的な一つの大きなコンピューティングリソースを形成する分散システムのワクワクが止まりません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/fbdd7286-d1f9-64cb-b3bf-54c0d751870b.png)

　Eclipse FoundationのEdge Native Working Groupでは、DevOpsの原則をエッジへ適用しつつ、エッジならではの特徴を解決するコンセプトとして「EdgeOps[^11]」というコンセプトを推進しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/3b5cd216-01c5-2970-224a-6f53941baaa7.png)
参照) https://cedalo.com/wp-content/uploads/2021/06/Eclipse-Foundation-EdgeOps-White-Paper.pdf

[^11]:https://cedalo.com/wp-content/uploads/2021/06/Eclipse-Foundation-EdgeOps-White-Paper.pdf

　EdgeOpsを実現するオープンソースとして「ioFog」というオープンソースがあります。ioFogは、北米のエッジプラットフォームのスタートアップであるEdgeworxが主導して開発されているオープンソースで、同社の「[Darcy.ai](https://www.darcy.ai/)」などのエッジPaaSの基盤として使用されています。ioFogのコアコンセプトはまさに、**エッジデバイスを群としてコンピューティングリソースを統合管理**し、**エッジデバイスを横断してサービスメッシュを構成**できるプラットフォームです。各エッジデバイスや、エッジデバイス上のマイクロサービスは、コントロールプレーンで一元管理されます。この様に、今後のエッジコンピューティングの方向性は、**Control PlaneとData Plane、エッジとクラウドが統合したフラットなプラットフォーム**であると考えています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559968/2712d894-1292-8320-5da6-33bc0b52e0cd.png)
参照) https://iofog.org/docs/2/getting-started/architecture.html

# まとめ
　本稿では、Device EdgeのKubernetes動向を踏まえて、「なぜエッジデバイスでKubernetesが期待されているのか？」、についてまとめました。他にこんな事例があるよ！とか、他にhogehogeな理由でKubernetes使うんだぜ！という方がいましたらぜひご連絡いただけると嬉しいです〜。最後まで読んでいただき、ありがとうございましたー！