Minikube には kvm2 ドライバがあり、VM を立ち上げて Kubernetes クラスタを動かすことができます。このドライバを手元の NixOS 25.11 で動かそうとしたところ色々とハマったので、その解決策を並べます。なお NixOS Wiki の virt-manager の項に書いてある内容(特に dnsmasq の追加、extraGroups への libvirtd の追加、trustedInterfaces への virbr0 の追加)は既に実施済みとします。また Minikube のバージョンは v1.37.0 が対象ですが、v1.38.1 の場合も確認したので後述します。
#virbr1 の trustedInterfaces への追加
まず素直に minikube start --driver=kvm2 と打つと、以下のようなエラーが出てクラスタが起動しません:
🤦 StartHost failed, but will try again: creating host: create: Error creating machine: Error in driver during machine creation: starting domain: waiting for IP: domain minikube didn't return IP after 1m30s
これは Minikube が使用する virbr1 にアクセスできないことが原因です。以下のように trustedInterfaces に virbr1 を追加すると解決します。
networking.firewall.trustedInterfaces = [
"virbr0" # これは virt-manager 用
"virbr1" # これを追加する
];
上記の変更を入れて再び minikube start --driver=kvm2 と打つと正しく起動します。
#複数ノード間の通信
Minikube では --nodes オプションを使うことで複数のノードを立てて(真の)Kubernetes クラスタを起動することができます。ただ、NixOS 25.11 のデフォルトの設定ではこの仕組みが正しく動作しません。具体的にはノード間をまたがる Pod 間通信が正常に機能しません:
$ minikube start --driver=kvm2 --nodes=2
$ minikube kubectl -- get node
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 108s v1.35.1
minikube-m02 NotReady <none> 14s v1.35.1
$ minikube kubectl -- run server --image=nginx --overrides='{"spec": {"nodeName": "minikube"}}'
pod/server created
$ minikube kubectl -- run client --image=curlimages/curl --overrides='{"spec": {"nodeName": "minikube-m02"}}' -- sleep infinity
pod/client created
$ minikube kubectl -- get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
client 1/1 Running 0 88s 10.244.1.3 minikube-m02 <none> <none>
server 1/1 Running 0 2m33s 10.244.0.3 minikube <none> <none>
$ minikube kubectl -- exec client -- curl -v 10.244.0.3
* Trying 10.244.0.3:80...
^C # 繋がらない
これは reverse path filter が有効化されているためのようです。networking.firewall.checkReversePath = "loose"; に設定すると正しく動作するようになりました。
#Minikube v1.38.1
さて nixos-unstable には Minikube v1.38.1 が入っています。実はこのバージョンで kvm2 ドライバを使おうとすると、以下のようなエラーが出て失敗します:
Exiting due to GUEST_PROVISION: error provisioning guest: Failed to start host: recreate: creating host: create: creating: creating network: failed opening libvirt connection: failed connecting to libvirt socket: virError(Code=1, Domain=0, Message='Failed to open libvirt.so.0')
これは libvirt.so.0 が LD_LIBRARY_PATH に入っていないのが原因です。nixpkgs 側でこれを解決してもらうために PR を立ててあるのですが執筆時点ではまだマージされていないので、手動で LD_LIBRARY_PATH を指定するか、あるいはこの PR の変更が入った package.nix を手元にダウンロードし pkgs.callPackage を使って読み込む必要があります。