Edited at

IoT向けの軽量なKubernnetes(?) k3sとはなにか


はじめに

こちらは、2/26付けでRancher Labs社より発表のあった軽量なKubernetes distributionであるk3sに関する解説の記事です。


k3sとは

k3sは、Rancher Labs社が発表した軽量なCertified Kubernetes distribution(CNCF公式の認証付き)の1つで、40MB未満のバイナリと、わずか512MBのメモリ使用量を特徴としています。

その軽さから、以下の環境において強さを発揮するとしています。


  • CI

  • IoT

  • ARM環境

  • エッジコンピューティング

もともとは、RancherのエンジニアであるDarren Shepherd(@ibuildthecloud)が個人で始めたものが、最近になってRancher社のプロダクト傘下に入ったようです。

rioというコンテナをもっと気軽に使えるようにしようぜ!というプロジェクトがRancherにはあって、そのベースとなるコンテナオーケストレーションエンジンとして始まったのがk3sだったのですが、「あれ、これ軽量なエンジンとして単体で出したら需要あるんじゃね?」と思って独立したプロジェクトにしたんだそうです。


なんでk3s?読み方は?

Kubernetesと比べて5つの変更があるから、らしいです。(k8s-5)

読み方は確認中だけどkatesだったようなそうじゃなかったような


Rancher Labsって何の会社?

Rancher Labs(以下、Rancher社)は、Kubernetesをベースとしたコンテナ環境の構築や管理をGUIベースで可能とするOSS、Rancherの開発元です。

オンプレ、パブリッククラウドなどの環境を跨いでクラスタの管理ができることが大きな特徴で、Kubernetes環境をマルチクラウドで構築する際に非常に便利なソリューションの1つとなります。


k3sの最低動作環境

項目
条件

Linuxカーネル
3.10以上

各サーバーのRAM
512MB以上

各ノードのRAM
75MB以上

ディスク容量
200MB以上

対応アーキテクチャ
x86_64, ARMv7, ARM64

参考までに、Kubernetes単体の要件としては、API Serverを動かすのには1GB以上のRAMがあって、x86_64のCPUを使っているのが「望ましい」とドキュメントにはそれとなく書かれていたりします。ですが、実際にはもっと高スペックなマシンを利用するケースが多いはずです(無論、規模によります)。

それと比べ、k3sは非常に小さな環境でも動作します。どうしてなのでしょうか?

いくつか、特徴的な部分をピックアップしてみることにします。


Kubernetesの中で利用シーンの少ない機能を削っている

Kubernetesには、後方互換性のために残しているレガシーな機能やAPIや、新たに追加されようとしているAlphaやBetaの機能が多数存在します。

k3sでは、軽量化のためにそれらの機能を削っています。


デフォルトのetcdをsqlite3にしている

etcdは非常に高い信頼性を誇るGo言語製のKVSで、Kubernetesにおいてもデフォルトのステート管理に使われています。

k3sでは、より軽量でファイルベースのsqlite3をデフォルトのストレージ機構に用いていますが、こちらはetcdを選ぶことも可能です(※発表時点では、etcdはまだ動作しないみたいです)。


デフォルトのランタイムをcontainerdにしている

Kubernetes自身は、管理者からの指定がない限りはDockerをデフォルトのコンテナランタイムとして利用しようとします。

k3sでは、Dockerが内部的に利用しているCRI、containerdを利用するため、より軽量な動作が可能なようです。


バイナリ1つで全部入り


k3s is packaged as a single binary which is about 40 megabytes in size. Bundled in that single binary is everything needed to run Kubernetes, including the container runtime and any important host utilities like iptables, socat, and du. The only OS dependencies are the Linux kernel itself and a proper dev, proc, and sysfs mounts (this is done automatically on all modern distros).


と公式の発表であるように、40MBのバイナリに必要なもの全て(ランタイム、ネットワーク周り含む)が入っています。そのため、kubeadmと違ってCNIやCRIを自前で入れる必要もありません。便利。


プロセスの統合化

Kubernetesの管理ノードで使われるコンポーネント(kube-apiserver, kube-controller-manager, kube-scheduler, kubelet, kube-proxy)のプロセスを統合化することで、消費メモリの節約を行っているようです。ようやったな。


インストールオプションの簡素化

Kubernnetesにおいてはkubeadmなどがインストールオプションを大幅に簡素化してくれますが、k3sでもそれに近い開発者体験が得られるようになっています。CNIやCRIのインストールが要らない分、かなりセットアップ時間は短そうです。


所感

うーん、どうなんでしょうね。わかんないけど面白いことになってほしいです。

Kubernetesは機能が豊富ゆえ、それ自体が重くなりがちなのは間違いないと思っていて、こいつがKubernetesの利用シーンを広げてくれるといいですね。

Rancher社は、他のビッグネームなベンダたちにに真っ向から向かっていく感じがあってとても面白いので、今後も大きな動きに期待しています。

Moby Projectが出てきたときに「コンテナの標準化」という動きが始まり、その中でIoTやエッジコンピューティングにおけるコンテナ技術もそのうち何か出てくるんだろうなあとぼんやり考えていたところ、今回このk3sがRancherの公式なプロジェクトとして入るとの知らせが入って、いよいよ来たかという感じはしています。

情報がまだまだ少ないので分かり次第追記していく所存です。