k3s と MicroK8s の違いを考える

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

`タイトルは釣りです。` タイトルを見てきていただいた方には大変申し訳ありませんが、k3sとMicroK8sは簡単に言うとトラックとバイクぐらいの違いがあります。
Kubernetesとの比較も考えると以下のような感じです。

==== MicroK8sもクラスタリングできるようになりました ====

MicroK8s 1.19 - 28 August 2020 より利用可能

MicroK8s - High Availability (HA)
https://microk8s.io/docs/high-availability

データストアは、etcdではなく、dqliteを採用しているそうです。

=============================

![image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/dc894258-e250-f02a-0725-8daa280a0026.png)

バイクとトラックは用途も違いますし、特性も当然違います。違いを考えるのも変なのですが、Kubernetesライクな環境でとても特徴がある2つのプロダクトを比べてみたいと思ったので記事を書きました。

# 0. 前置き
軽量なKubernetesとして話題になっているRancher社が開発しているk3sというのがありますが、Canonical社もMicroK8sという軽量?Kubernetesを開発しています(Microとついているのだから通常のKubernetesよりは軽量であると判断しています)。どちらも、Minikubeのような仮想マシンを利用せずにKubernetesを動かすことができるものです。

どういう機能があり、どのように違うか比較してみました(検証途中であり間違いもあるかもしれませんが、お気づきの点がありましたらご指摘いただければと思います)

# 1. 用途
## k3s
k3s - Lightweight Kubernetes | k3s
https://k3s.io/

k3sは、Rancher Labs社で開発されています。IoTなどのスモールデバイス向きとRancher社はしています。バイナリーサイズは、40MBとRaspberry Piのようにリソースの少ないデバイスでも動くところがポイントだと思います。Rancher社もEgdeコンピューティングやARMバイナリーで動くところを売りにしています。様々な機能が削られていますが、MasterとNodeで稼働し、本来のKubernetesとしての分散管理というところについてはしっかり残されています。

## MicroK8s
MicroK8s - Fast, Light, Upstream Developer Kubernetes
https://microk8s.io/

microK8s は、Canonical社で開発されています。開発者の開発環境向きとCanonical社はしています。バイナリーサイズは小さくありません。k3sのようにリソースの削減というところには注力しておらず、ワンコマンドでKubernetesが実行環境を作ることができることを売りにしているようです。MasterとNodeという分散動作はせず、分散環境などの冗長性はありません。開発向けのシングルKubernetesを動かすことに特化していて、簡単にItsioやjaegerを有効にすることができます。そういう意味で、CI/CD用途であったり、簡単にデプロイできるところを狙っているようです。

| 用途  |    k3s     |    MicroK8s    |
|:-----------------|:------------------:|:------------------:|
| IoT、エッジ        |     〇          |    △            |
| 簡単インストール    |     〇          |    〇       |
| 開発環境向き        |     △          |    〇            |

# 2. 稼働プラットフォーム

## k3s
amd64とarmバイナリーが用意されています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/1319853e-e29b-4225-8989-82cd9afc9e8d.png)
https://github.com/rancher/k3s/releases/tag/v0.2.0

## MicroK8s
amd64とARMとppc64elバイナリーが用意されています。
(ただし、ppc64elはVersion 1.11.1まで)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/15176/739afa46-453a-67b5-92b3-919e9c374056.png)

https://snapcraft.io/microk8s

OSは、K3sについてはシングルバイナリーで、Ubuntu、RancherOS、CentOS等で動くことと思われます。MicroK8sは、Snapに対応しているOSであれば、Ubuntu、CentOSで動くと思います。

| 対応CPUアーキテクチャ  |    k3s     |    MicroK8s    |
|:-----------------|:------------------:|:------------------:|
| amd64             |     〇          |    〇            |
| arm64             |     〇          |    〇            |
| ppc64el           |     ✕          |    △            |

# 3. 機能

どういう機能があるかについてもリストアップしてみます。
`※注：このリストは最初に述べたとおり、そもそもk3sとMicroK8sの用途が違うもの`をリストアップしているので✕なのが良くないということではなく、`それぞれに向き不向き`があり、どの分野に適しているかということを示していると思って下さい。

| 機能  |    k3s     |    MicroK8s    |
|:-----------------|:------------------:|:------------------:|
| Docker組み込み(※1)         |     〇          |    〇            |
| Kubernetes Master-Node分散 |      〇         |   ✕         |
| traefik組み込み             |     〇          |    ✕       |
| GPU対応                    |      ✕          |    〇            |
| Kubernetesバージョン切り替え機能 |     ✕          |    〇            |
| ダッシュボード               |     ✕          |    〇            |
| Itsio組み込み               |     ✕          |    〇            |
| jaeger組み込み              |     ✕          |    〇            |
| fluentd組み込み             |     ✕          |    〇            |
| storage組み込み             |     ✕          |    〇            |
| registry組み込み            |     ✕          |    〇            |
| ingress組み込み             |     ✕          |    〇            |
| dns組み込み                 |     ✕          |    〇            |
| metrics-server組み込み      |     ✕          |    〇            |
| prometheus組み込み          |     ✕          |    〇            |
| データストア                | sqlite3(etcdも可) | etcd(シングル) | 

※1
この記述はあまり正確ではありません。k3sについてはDockerが組み込まれているというよりは、containerdが利用されているとした方がよいでしょう。MicroK8sは挙動を見ているとDockerが動いているように見えます。

★両方の組み込みDockerコマンドでどういうことまでできるか(例えばビルドする等)については追って調査したいと思っています

# 4. まとめ

k3sとMicroK8sは全く違うコンセプトであることがよく分かりました。
k3sは、現時点ではIoTやエッジコンピューティングの用途に向いていると思います。また、Rancherと連携が今後のキーポイントです。
MicroK8sは、様々なオプションをコマンド一つでオンオフできるので開発者環境として使うのに向いていると思います。Raspberry Piでも動くことは動くと思いますが、単体で動いてもあまり面白みはなさそうです。

# 5. 感想

Rancher Labs社もCanonical社もどちらも好きな会社です。
どちらのプロダクトにもDockerが組み込んであり、DockerのインストールやVirtualboxを必要としないなどコンテナーシステムにおける新しい地平線を見せてくれているように思います。

k3sは非常に面白いコンセプトで楽しいですが、MicroK8sも盛り上がってほしいですね。

# 6. リンク集
k3s も MicroK8sもあまり日本語の情報がないのでリンク集を作っておきます。
こんなところにも取り上げられているとか、こういう記述がある、等ありましたらお教え下さい。

## k3s

Kubernetesをわずか40MBのシングルバイナリとして軽量かつシンプルにした新ディストリビューション「k3s」登場。Rancher Labsがオープンソースで公開 － Publickey
https://www.publickey1.jp/blog/19/kubernetes40mbk3srancher_labs.html

Rancher Labs、エッジ向けKubernetes軽量ディストリビューションOSSプロジェクト「k3s」を開始：「サイズ約40MBの単一バイナリ」 - ＠IT
https://www.atmarkit.co.jp/ait/articles/1902/27/news062.html

k3s カテゴリーの記事一覧 - 仮想化通信
https://tech.virtualtech.jp/archive/category/k3s

「k3s」の検索結果 - Qiita
https://qiita.com/search?q=k3s

IoT向けの軽量なKubernetes(?) k3sとはなにか - Qiita
https://qiita.com/inductor/items/1463cefb72296369b49f

k3s動かしてみた (1台構成) - Qiita
https://qiita.com/tukiyo3/items/2ba865042f270dd2b945

## MicroK8s

MicroK8sを使ってみる - Qiita
https://qiita.com/niiku-y/items/e5285af4f12b1318cf4e

Kubernetes道場 2日目 - Kubernetesのローカル環境について - Toku's Blog
https://cstoku.io/posts/2018/k8sdojo-02/

microk8s を使って3分でローカル Kubernetes 環境を構築する – mhiro2 – Medium
https://medium.com/mhiro2/try-k8s-in-3minutes-with-microk8s-921d1e3ec6dc

第560回　microk8sでお手軽Kubernetes環境構築：Ubuntu Weekly Recipe｜gihyo.jp … 技術評論社
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0560?page=1