エッジコンピューティングにKubernetesが適切な理由

エッジコンピューティングは、IoT機器などの情報の発生源や利用者の近くに、サーバーなどを分散配置することによって、クラウドに集中する方式よりも、素早くデータ処理結果を活用するコンピューティングモデルである。

クラウドなどのデータセンターを中心として考えた場合、情報の発生源や利用者は、インターネットには接続されているが、ネットワークの末端に位置すると見なすことができる。 この末端でデータ処理することから、エッジコンピューティングと言い表される。クラウドコンピューティングではデータセンターで集中処理することに対して、エッジコンピューティングは拠点に配置された機器とクラウドのサーバーとの分散処理である。


データの発生源やユーザーの近くでデータ処理する利点として、５つ上げることができる。

1. 応答の早いリアルタイムな処理
1. 通信コストの削減と高効率
1. 信頼性
1. スケーラビリティ
1. プライバシーとセキュリティ


### 応答の早いリアルタイムな処理

ネットワーク末端に配置された機器から、クラウドのサーバーにアクセスする場合、データ量が少ない場合でも、数十ミリ秒の転送時間を必要とする。それに対して、拠点内ローカルで通信する場合には、家庭用の安価なHUBを使っても1ミリ秒以下でアクセスが可能となる。つまり、クラウドなど処理する場合には、数十倍の待ち時間が発生することになる。

監視カメラやセンサーなどから生成される大量のデータを、クラウドのデータセンターへ転送する時間を短くするには、末端のネットワーク接続の広帯域化が必要になる。それだけでなく、クラウドのサーバー側のネットワーク接続の帯域も考慮しなければならない。 クラウド側のサーバーにデータ転送のトラフィックが集中すると、転送時間が長くなる。また、転送経路上のインターネットプロバイダー等の混雑度合いによっても転送時間が一定しない懸念がある。

一定した高速な応答性能を得るために、トラフィックの流れや情報の処理を拠点内のローカルに閉じ込めるのは、理にかなっている。


### 通信コストの削減と効率化

大量のデータを短時間で転送するためには、相応の高性能なネットワーク機器が必要なだけでなく通信費も高額となる。機器を配置する拠点が多いと費用に多大な影響がある。そして、データ伝送中は、サーバーでは情報の処理は行われず、転送完了まで待ち時間となる。そのため、全体の処理時間を短縮するために高性能な処理能力を必要とする。 このように集中処理だけでシステムを構築するのは費用もかかり、待ち時間も多くなるため効率が悪い。


### 信頼性

拠点側で情報を処理することで、クラウドやネットワークに障害が発生しても、全体障害となることはない。通信が途切れたとしても送信データを蓄積する、また、マスターデータの複製をローカルに持つなど、拠点側である程度、自律して処理を継続できるように、アプリケーションが設計されていれば、簡単に全体障害に至らない堅牢なシステムを構築できる。


### スケーラビリティ

データセンターに配置されたサーバーに処理が集中していると、IoT機器が増加する、情報量が増加、アプリケーションの処理内容が増えるなどの影響を大きく受けることになり、拡張が難しい。 


### プライバシーとセキュリティ

個人情報に関わるデータをクラウドに保存するのではなく、拠点側に留めておくことは、関係者の人数を減らすことができる。そのため、情報漏洩のリスクを減らすこと、外部からの攻撃による漏洩や、データを悪用のリスクを軽減できる。



## エッジコンピューティングが必要なアプリケーション

カメラの動画、温度、湿度、振動、音、化学物質など、様々なセンサーから取得した情報を活用する用途がある。 

例えば、モーターなどで機械的な動作を伴う装置の場合、長期間使用すると部品が摩耗するために、異常な音や振動が発生する。この状態が悪化すると装置が正常に動作しなくなる。このような故障の兆候を現場近くのエッジ機器で捉え、兆候が判定された場合に、クラウド側のシステムに伝え、予防保守に役立てることができる。

もう一例として、特定地点の人や自動車の流れ、車種、男女、年齢などをカメラ画像やセンサーで把握することで、ビル管理として照明や空調の最適化と省エネ、大型店舗での人の流れを把握して、売上向上に役立てるなどの応用がある。

以下に、エッジコンピューティングによる産業に変化が起こるとされる分野を列挙しておく。

1. テレコム(MEC: モバイルエッジコンピューティング/5G)
1. インダストリIoT　（エネルギー産業、製造業、医療)　
1. 小売り業
1. コネクテッドカー、自動運転
1. スマートシティ
1. 農業 IoT



## Kubernetes が エッジコンピューティング に適している理由

前述に挙げたアプリケーションのエッジデバイスは、数百～数千箇所の拠点にデバイスを配置することを考える必要がる。 

![overview_edge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42829/759b3916-f930-e759-e6c3-0210cd3c454a.png)


エッジデバイスでは、センサーなどからの大量のデータを、GPUやTFUなどのデバイスと伴に人工知能と機械学習などのプログラミング技術を駆使して、情報を処理することになる。このようなことから、エッジデバイスを配置した後のライフサイクルを通じた管理が重要となる。具体的には、以下の３つの分野が考えられる。

1. エッジデバイスのライフサイクル管理
1. エッジデバイス上のアプリケーションのライフサイクル管理
1. セキュリティやアクセスポリシー管理

エッジデバイスをシステムに参加させるにあたって、不正なプログラムを仕込まれたデバイスが配置されないように、十分な注意が必要となる。 
これに対して、Kubernetes では コントロールプレーンの認証局で作られたCA証明書とクライアント証明書がなければ、ノードを追加することができない。耐タンパー性はハードウェアを含めて別途考える必要があるが、Kubernetesによって基本となる仕組みが出来ている。

AI/ML技術を駆使するアプリケーションは、コンテナとして配布することで、Kubernetesの得意とするロールアウト／ロールバックを活用できる。また、全ノードにアプリを配布するためにデーモンセット・コントローラーとノードセレクター活用することで、アプリケーションの配布などの自動化が容易になる。そして、Kubernetesクラスタと連携するメトリックス管理とログ分析を利用することで運用を容易にできる。

セキュリティでは、Kubernetesのポッドのサービスアカウントに、ポッドセキュリティポリシーを適用することで、ポッドのアクセス可能な範囲を制限することができる。

このように、Kubernetes のコアには、基本的なエッジアプリケーションにとって必要な機能が揃っている。


しかし、これらをKubernetesの機能を熟知して、使いこなすことは容易ではない。その点で、Red Hat OpenShift、Red Hat Advanced Cluster Management for Kubernetesなどは、これらユースケースを想定したウェブUIによって、解りやすく設定できるので、目的に集中することができる。また、IBM Edge Computing Solutions は、Kubernetes 上で 画像識別や機械学習により異常判別などを容易にできるソリューションが揃っている。


## 参考資料
* Edge computing, Wikipedia, https://en.wikipedia.org/wiki/Edge_computing
* エッジコンピューティングとは何か？ IoTの関連事例や課題、市場動向まとめ, https://www.sbbit.jp/article/cont1/35432
* ガートナー、2020年の戦略的テクノロジ・トレンドのトップ10を発表, https://www.gartner.com/jp/newsroom/press-releases/pr-20191113
* Edge computing with Red Hat OpenShift, https://www.openshift.com/learn/topics/edge
* IBM Edge computing solutions, https://www.ibm.com/partnerworld/cloud/edge-computing
* IBM Edge Computing, https://www.ibm.com/downloads/cas/O8YVJY9Z
* Red Hat Advanced Cluster Management for Kubernetes, https://www.redhat.com/en/technologies/management/advanced-cluster-management