エッジに最適化されたKubernetesであるK3sとは?
目次
エッジコンピューターにおけるKubernetesの利用
近年、エッジコンピューティングを実施する基盤としてコンテナが選択されており、そのために、エッジにKubernetes環境を構築してエッジコンピューティングを行う事例が増えてきています。Kubernetesの利用によりどのようなメリットがあるのか、そして、なぜKubernetesが利用されるのかについて、さらに、エッジに最適化されたKubernetesとして開発されたK3sとはどんな製品かを本記事で記載していきます。
エッジコンピューターとは
そもそもエッジコンピューターとは何を指しているのかを簡単に説明します。エッジコンピューターとは、『エッジ』と『コンピューター』を組み合わせた造語です。『エッジ』とは「先端」や「縁」を意味し、ネットワークの端の部分を示します。『コンピューター』とは処理を行うデバイスやサーバーのことを指します。
したがって、『エッジコンピューター』とは、データの発生源の近くに分散配置された、データの処理や計算を行なうサーバーやデバイスのことを指します。AWS(Amazon Web Services)などを利用したクラウドにおいて様々な処理を行う例も近年数多く存在しますが、その対極にある設計といえるでしょう。
エッジコンピューターの例
エッジコンピューターは『低いレイテンシ(低遅延)が求められる』『データをセキュアに扱う必要がある』といったユースケースにおいて活用されるケースが数多く存在します。具体的なエッジコンピューターの利用例を記載します。
- 自動車における自動運転
自動運転では、人の命にかかわる判断を瞬時におこない、操作までする必要があるため、クラウドまでデータを送信して処理を行っていると、レイテンシにより致命的な事故につながってしまいかねません。そのため、自動車に搭載されたコンピューターと、カメラやレーダーにより、データを処理して瞬時に判断をするエッジコンピューティングの技術が用いられています。 - 工場などにおける製造ラインの異常検知
工場などにおいて検査したい製造ラインなどにデバイスを設置し、検査対象の製品画像を定期的に取得します。画像は機械学習のモデルを搭載したエッジコンピューターにて処理が実行され、製造ラインの異常検知をセキュアかつ高速に実現します。検査対象の画像はデバイス内で処理するため、クラウドAIを利用する場合と比べて、外部ネットワークで画像を送信する処理が不要になり、セキュアかつ高速にデータを処理することが可能になります。
SUSE社公式パートナー/スタイルズによるRancher/K3sの商用保守サポートはこちら→
エッジでKubernetesを利用する際の問題点
エッジに配置したコンピューターでコンテナの実行環境を構築するケースが増えており、運用管理の効率性を求めてKubernetesを利用するケースも増えています。Kubernetesは柔軟なスケーリングが可能であり、可用性があり、カスタマイズ可能といった、エッジ環境におけるコンテナ運用管理の様々な機能を備えており、エッジ環境におけるコンテナの運用管理基盤として必要な機能をすべて備えているように見えます。ただし、エッジコンピューティングにKubernetesを使用する場合、Kubernetesをそのまま使用するのは難しい場合があります。具体的な理由を見ていきましょう。
- アーキテクチャの問題
Kubernetesはデータセンターでの実行を前提としたツールです。Kubernetesはコンテナを運用管理するコントローラーノードとコンテナを実行するワーカーノードが必要で、Kubernetesの実行のためには多くのディスクスペース、CPU、メモリといった多大なリソースが必要となります。したがって、小さいコンピューターを配置するエッジコンピューターでは実行が難しいケースがあります。 - ネットワークの問題
Kubernetesはコンテナ同士で、環境の内外へさまざまな通信を実施します。したがってエッジデバイスのネットワークの負荷がかかってしまい、肝心の『レイテンシを低くする』というエッジコンピューティングの目的を果たさなくなってしまう可能性があります。
そして登場したK3sとは?
Kubernetesはオープンソースで、世界中の開発者によって開発が進められています。Kubernetesの管理ツールという位置づけの『Rancher』を開発したRancher Labs社(現SUSE社)の製品開発者たちは、Kubernetesをエッジコンピューティングに適したプラットフォームとして改良した『K3s』という製品を生み出しました。Kubernetesは省略形として『K8s』と呼ばれることがありますが、K8sの機能削減版ということで、K3sと命名されました。
K3sは、Kubernetesの様々な機能をスリム化することで、Kubernetesをエッジコンピューティングで実行可能にすることを目的としています。なお、当初はRancher LabsのプロジェクトだったK3sは、2020年6月にKubernetesのオープン・ソース団体であるCNCFに寄付されました。現在、SUSE社はこのプロジェクトの主なコントリビューターです。
具体的にはKubernetesに対して、下記のような機能の変更が行われています。
- 利用シーンの少ない機能を削っている
Kubernetesには、後方互換性のために残しているレガシーな機能やAPIや、新たに追加されようとしているAlphaやBetaの機能が多数存在します。k3sでは、軽量化のためにそれらの機能を削っています。 - デフォルトのランタイムをcontainerdにしている
Kubernetes自身は、管理者からの指定がない限りはDockerをデフォルトのコンテナランタイムとして利用しようとします。k3sでは、Dockerが内部的に利用しているCRI、containerdを利用するため、より軽量な動作が可能なようです。 - データストアの機能
Kubernetesのデータストアはデフォルトではetcdという製品が利用されていますが、k3sではSQLiteに置き換えられており、軽量化が実現されています。 - ARM向けに最適化
バイナリとマルチ・アーキテクチャ・イメージによりARM64とARMv7がサポートされます。K3sは、小規模なRaspberry Piでも動作が可能です。 - 単体で稼働できる仕組み
Kubernetesのコントロールプレーンが動くために必要なコンポーネントをひとつにまとめて、複数のノードがない環境でも稼働できるようになっています。 - 煩雑な管理プロセスの自動化
証明書の配布といった、煩雑なクラスター操作を自動化することで、軽量化を実現しています。
K3sでエッジコンピューターを活用する
IoT技術は近年様々なビジネスへ利用されており、ますます重要性を帯びてきています。このような状況下においては、セキュリティ、バグフィックス、新機能への対応などIoTソフトのソフトウェア管理は、エッジ分野での必須業務となっていくことが予想されます。そのような状況に対応していくためには、コンテナとコンテナを実行する運用ツールの存在が不可欠です。具体的な理由を見ていきます。
コンテナを使ってデプロイを簡単にし、リソースを有効活用する
コンテナは仮想化技術の1つであるため、1つのサーバー機器におけるCPUやメモリといったリソースを有効活用することができます。また、コンテナの特徴である圧倒的な可搬性により、開発からシステムリリースまでのプロセスを簡単にすることができます。
エッジデバイスは多種多様なOSやデバイスが存在し、数も非常に多くなることが予想されるため、通常のOSではリリース時にライブラリ不足による不具合が起きたり、開発コストがかさんでしまうという懸念がありますが、コンテナを用いればそのような懸念が解消されることが見込まれます。
K3sを利用して運用管理を簡略化する
5Gといった高速・大容量の通信が一般的になると、IoT機器の可能性はますます増大します。そのような環境下では、高速でアプリケーションをデプロイするCI/CD(継続的インテグレーション/継続的デリバリー)や、通信量のスパイクによるスケーリングといった機能が必要になってきます。
したがって、通常のクラウドアプリケーションと同じようなコンテナの運用環境が必要となります。しかし、K3sは先述の通りKubernetesから多くの機能をスリム化しており、インストールは約50MBで、管理ノードで約512MB、ワーカーノードで約256MBのメモリサイズで動作可能であるため、エッジ環境に最適です。また、利用のための学習コストをKubernetesよりも低くすることができます。
SUSE社公式パートナー/スタイルズによるRancher/K3sの商用保守サポートはこちら→
まとめ
クラウド環境で利用されていたKubernetesをエッジ環境で使えるように改良されたK3sは、コンテナ技術と組み合わせることでIoTやエッジコンピューティングの可能性を大幅に伸長することができる可能性を持っています。オープンソースであり、気軽に利用することができます。日本の国内での利用はまだあまり浸透していないため、利用したい場合は専門の知識を持ったベンダーに相談してみるといいでしょう。