開発用 Kubernetes 環境構築ツールの比較

Kubernetes は GKE / EKS / AKS などで提供されているマネージドなサービスを使うのが楽ですが、課金もありますし開発時はローカルの環境が欲しくなります。

シングルノード構成のツールはオートスケーリングなどの機能が使えないという制約はあるものの、アプリの開発・動作確認環境としては十分使えます。マルチノード構成可能なツールもあります。

メジャーと思われるツールを比較してみました。

Docker Desktop

Docker Desktop for Mac and Windows | Docker

macOS と Windows で提供されている Docker を GUI で導入可能なソフトウェア。Docker が主で Kubernetes はオプションで有効化することで利用可能です。

macOS の場合は HyperKit が、Windows の場合は Hyper-V がノード用の仮想マシンとして使われます。Windows では VirtualBox との共存ができないという問題がありましたが、VirtualBox 6.0 以降 Hyper-V 対応されたので解消されていくものと思われます。

リリースごとに Kubernetes バージョンも上がっていきます。

Minikube

GitHub - kubernetes/minikube: Run Kubernetes locally

定番のローカル Kubernetes 環境です。ノードの仮想マシンとして HyperVisor を利用可能な他、VirtualBox や Docker を指定することもできます。

blog.kondoumh.com

kubeadm を内部的に利用しているため、Kubernetes バージョンの設定も可能です。

Dashboard や EFK など多くの機能がアドオンとして有効化可能です。

Addons | minikube

Windows / macOS / Linux 全てのプラットフォームをサポートしています。

MicroK8s

MicroK8s - Fast, Light, Upstream Developer Kubernetes

Ubuntu の Canonical が提供する Kubernetes パッケージ。APT ではなく Snap パッケージとして、Ubuntu 以外の Linux ディストリビューションでも利用可能です。

KVM などの HpyerVisor は利用していません。

microk8s.kubectl などコマンドにプレフィクスが付いていますが、snap alias microk8s.kubectl kubectl と snap コマンドで alias 指定すれば標準コマンドと同じように使えます。

アドオンで多くのパッケージが簡単に利用できるようになっています。

MicroK8s Addons | MicroK8s

macOS / Windows では Multipass で仮想マシンを使って動かす方法がガイドされています。

Multipass - Orchestrates virtual Ubuntu instances

インストールオプションで kubernetes バージョンを指定可能です。Minikube のようにクラスター作成時に指定はできないのですが、インストール・アンインストールが簡単なので、あまり環境を切り替える必要がないのであれば十分でしょう。

マルチノードにも対応しています(自前で MicroK8s をインストールしたマシンか VM を用意する必要があります)。

Multi-node MicroK8s | MicroK8s

Ubuntu 19.10 では MicroK8s のサポートが厚くなり、セキュア環境構築が楽になる他エッジ環境でも動作するようになるようです。

Ubuntu 19.10 delivers Kubernetes at the edge, multi-cloud infrastructure economics and an integrated AI/ML developer experience | Ubuntu

開発環境だけでなく実行環境としても普及を目指しているようです。当然 WSL2 でもサポートされると思われるので、今後ユーザーが増えていくかもしれません。

kind

GitHub - kubernetes-sigs/kind: Kubernetes IN Docker - local clusters for testing Kubernetes

Docker コンテナをノードとして利用し、マルチノードの環境を簡単に構築できることが特徴です。この特性を活かして CI 環境でマルチノードでしかできないテストケースを実行することもできます。マルチノードの指定は起動オプションで簡単にできます。

内部的に kubeadm を利用しているので、Kubernetes バージョンの指定も可能です。

blog.kondoumh.com

Windows / macOS / Linux 全てサポートしているのに加え、kind は積極的に WSL2 対応をしています。

まとめ

以上、各ツールの特徴でした。最後に比較表です。

Docker Desktop Minikube MicroK8s kind
Use HyperVisor
Select K8s version △※1
Multi node △※2
Support addons
Linux
Windows △※3
macOS △※3
  • ※1:インストール時のみ可能
  • ※2:Worker ノードの事前準備が必要
  • ※3:Multipass で利用可能

個人的には Docker Desktop と Minikube を併用し、Docker Desktop の Kubernetes は無効化しておくのが使いやすいかなと思っています。