KubeEdge
KubeEdgeは、Kubernetesを基盤としたオープンソースのシステム。エッジデバイス上でのコンテナ化されたアプリケーションのオーケストレーションとデバイス管理を可能にする。これにより、クラウドとエッジ間でのネットワーキング、アプリケーションのデプロイメント、メタデータの同期を容易にする。
KubeEdgeは、Cloud Native Computing Foundation(CNCF)のサンドボックスプロジェクトとして開発が進められていたが、晴れてCNCFのGraduatedとなり、現在も盛んに開発が進められている。
Ref:
https://kubeedge.io/
https://github.com/kubeedge/kubeedge
https://gyazo.com/0a0489ea6a10e1a397c2c2fe5f868746
(画像は公式より引用)
KubeEdgeはk3sやk0sのようなKubernetesを構築するためのLightweight Kubernetes Distributionではなく、構築済みのKubernetes Clusterをエッジ側に拡張するためのソフトウェアである。具体的には、CloudCoreというクラウド側に配置されるComponentがPodとして構築済みのKubernetes Clusterに配置される。そして、エッジデバイス側にはEdgeCoreというモジュールをシステムに組み込む。このEdgeCoreがCloudCoreと接続することで、エッジデバイスをあたかもKubernetesのノードのように管理することが可能となる。また、EdgeCoreはKubernetes Clusterに適用されるマニフェストをもとに、kubeletのようにエッジデバイス側でリソース管理を行う。
k3sなどのLightweight KubernetesでもエッジデバイスをKubernetesのノードとして活用可能ではあるが、Kubernetesの仕組み上、好ましくない部分も存在する。大きな問題点の一つが、k3sを含むKubernetesではノードはControl Planeからの変更をPull型で取得することである。つまり、ノードは一定期間ごとにControl PlaneのAPI Serverをポーリングし、状態の変更を検知している。管理するエッジデバイスが増加するとControl Planeの負荷が増大し、大規模なエッジデバイス群の管理が難しくなる。KubeEdgeはこれを解消するがめのソリューションを提供する。
KubeEdgeにおいては、ベースとなるKubernetesのControl Planeの状態をポーリングするのはCloudCoreのみである。CloudCoreとEdgeCore間は通常はWebSocketでネットワークのコネクションが確立されており、状態の変化があった場合はCloudCoreからEdgeCoreにWebSocketの経路で通知が送られる。つまり、Edge NodeはPull型ではなくPush型で動作する。これがKubeEdgeをエッジデバイス管理に用いるもっとも大きな理由とも言えよう。
CloudCoreやEdgeCore、KubeEdge Clusterの構築方法などは別のページにまとめていく (気が向いたら)
#KubeEdge #Kubernetes