はじめに
仕事の一環でKubeEdgeを試す機会があったので、公式ドキュメントを読み解いてみます。
KubeEdgeとは
KubeEdgeはCNCFのサンドボックスプロジェクトとして開発が進められている、コンテナオーケストレーションをエッジに拡張するためのOSSです。
KubeEdgeはK8s上に構築され、エッジにネットワークやアプリケーションのデプロイ、エッジとマスター(公式サイトではクラウドを前提としていました)のメタデータ同期を提供してくれるようです。また、オフラインモードやMQTTを用いたエッジに接続したデバイスとの連携もサポートするようです。
要するにクラウドとエッジでKubernetesクラスターを組んだ際に起きる、NW不安定問題や、外部デバイスとの連携をうまーくラッピングしてくれるのがKubeEdgeと考えていいでしょう。
類似のプロダクトでK3sがありますが、K3sはK8sを最大限軽量化しており、K8sとクラスタを組むことはできませんが、KubeEdgeならK8sとクラスタを組むことができるので、クラウドと同じクラスタにエッジを所属させる、みたいな使い方ができそうですね。
クラウドにコントロールプレーンを持って、エッジのアプリケーションを管理する、みたいなことはKubeEdgeでもK3sでもできるはずです。
KubeEdgeのコンポーネント
公式ドキュメントからの転載になりますが、以下のコンポーネント構成となるようです。
気になるところは、Amazon EKSやGoogle GKEなどマネージドのコントロールプレーンが使えるかですね。
ドキュメントの表記だけではいまいちわかりませんでした。。
- Edged: エッジノードのエージェントで、コンテナ化されたアプリケーションを管理する
- EdgeHub: クラウドサービスとインターフェースするためのWebソケットクライアント(EdgeControllerと同義)。クラウド側のリソース更新をエッジに同期したり、エッジホストのステータスをクラウドにレポートしたりする。
- CloudHub: クラウドサイドの変更点をキャッシュしEdgeHubに送信するためのWebソケットサーバ。
- EdgeController: エッジホストとPodメタデータを管理する拡張Kubernetesコントローラ。
- EventBus: MQTTサーバ(mosquitto)とインターフェースするMQTTクライアント。他のコンポーネントにパブリッシュとサブスクライブの機能を提供する。
- DeviceTwin: デバイスのステータスを保存したり、デバイスステータスをクラウドに同期する機能を提供する。また、アプリケーション向けにクエリインターフェースも提供する。
- MetaManager: EdgedとEdgeHubの間のメッセージプロセッサ。軽量DB(SQLite)との間でメタデータの保存・取得する機能も有する。
KubeEdgeの動作要件
KubeEdgeのリポジトリをみると、KubeEdgeとK8s、Golangのバージョン要件は以下の通りのようです。
また、Setup from KubeEdge Installerを確認するとイントールに用いるKubeEdge installerのサポートOSは現状Ubuntuのみのようです。CentOSやRasPiはまだ対応中の模様。
KubeEdge MasterとWorkerのインストール要件は以下。
Cloud side (KubeEdge Master)
- golang (If you want to compile KubeEdge)
- Docker, or other runtime, such as containerd
- kubeadm/ kubectl
- Kubernetes cluster with kubeadm
Edge side (KubeEdge Worker Node)
- golang (If you want to compile KubeEdge)
- Docker, or other runtime, such as containerd
- mosquitto : If you are just trying KubeEdge, this step can be skipped.
転載元:Github
まとめ
KubeEdgeの概要、コンポーネント、動作要件を調査しました。
次回はAmazon EKS上にKubeEdgeが構築できるのか試してみたいと思います。
次回
EKSでKubeEdgeを構築したら失敗した
KubeEdgeを構築する(再)を書きました。