Tweet
Logo
    minikube の driver について
    minikube の driver について

    minikube の driver について

    • はじめに
    • minikube とは
    • minikube のインストール
    • minikube の動作確認
    • minikube の driver について
    • minikube を起動してみる
    • driver = docker 時の挙動
    • driver = virtualbox 時の挙動
    • おわりに

    はじめに

    kubernetes の設定確認などで minikube で動作検証を行うという事は良くあると思いますが、 minikube に暫く触っていなかった結果、挙動が少し変わっていたのでメモがてら記事にします

    minikube とは

    minikube は mac, linux, windows 環境において local の kubernetes クラスターを作るためのツールです。基本的には開発や検証用途を目的に作られており、本番環境での利用は想定されていません

    Welcome!

    minikube quickly sets up a local Kubernetes cluster on macOS, Linux, and Windows. We proudly focus on helping application developers and new Kubernetes users.

    minikube.sigs.k8s.io

    Welcome!

    本番の kubernetes cluster は複数の node 上で動く事を想定していますが、minikube は検証用なので 1 node 上で動かす kubernetes cluster というものになります

    この記事では minikube を使って検証する際に理解しておくべきネットワークの概要についてまとめます。なお、検証につかった minikube の version は v1.22.0 になります

    $ minikube version
    minikube version: v1.22.0
    commit: a03fbcf166e6f74ef224d4a63be4277d017bb62e

    minikube のインストール

    以下の手順に沿ってインストールしていきます

    minikube start

    minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes. All you need is Docker (or similarly compatible) container or a Virtual Machine environment, and Kubernetes is a single command away: minikube start Click on the buttons that describe your target platform.

    minikube.sigs.k8s.io

    MacOS x86-64 Stable の場合は以下のようになります (ちなみに 2021年9月時点だと architecture は x86-64 と ARM64 のみだったので M1 の場合どうなるんだろう、と思いました...)

    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
    sudo install minikube-darwin-amd64 /usr/local/bin/minikube

    minikube の動作確認

    minikube がインストールできたら起動できますが、その前に driver について少し解説します

    minikube の driver について

    minikube は Docker や Virtual Machine 上で動き、動作させる環境を driver を使って指定する事が可能です。サポートされている driver は OS によって変わりますが、MaxOSX だと以下の Driver がサポートされています (2021年9月)

    Docker - VM + Container (preferred)
    Hyperkit - VM
    VirtualBox - VM
    Parallels - VM
    VMware - VM
    SSH - remote ssh

    それぞれの driver の説明に公式ページから飛べますが、正直多くの情報は記載されていない印象です

    Drivers

    Configuring various minikube drivers minikube can be deployed as a VM, a container, or bare-metal. To do so, we use the Docker Machine library to provide a consistent way to interact with different environments. Here is what's supported:

    minikube.sigs.k8s.io

    どの driver が default で使われるかは、minikube の version によって変わり、ソースコードから確認でき、docker driver はどうやら下記の PR で default となったみたいです

    Upgrade Docker driver to preferred (Linux), default on other platforms by tstromberg · Pull Request #7090 · kubernetes/minikube

    Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes.

    github.com

    Upgrade Docker driver to preferred (Linux), default on other platforms by tstromberg · Pull Request #7090 · kubernetes/minikube

    私はこの default driver が変更になった事に全く気が付いていなかったので、local での動作確認に手間取ってしまいました (具体的には minikube ip コマンドで取得できる ip に host マシンから直接接続できると思い込んでしまっていました...)

    minikube を起動してみる

    driver について少し理解した所で、minikube を実際に起動してみます

    以下のコマンドで起動ができます

    $ minikube start

    以下のように docker driver が自動的に選択された事がわかります

    😄  Darwin 10.14.6 上の minikube v1.22.0
    ✨  dockerドライバーが自動的に選択されました。他の選択肢:  hyperkit, virtualbox, ssh

    私の環境では docker の他に hyperkit や virtualbox も利用可能である事がわかります (おそらくパラレルデスクトップ等をインストールしているマシンでは Parallels なども選択可能なのではと思います)

    driver = docker 時の挙動

    こちら のチュートリアルに従って deployments と service を作って動作確認をしてみます

    kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
    kubectl expose deployment hello-minikube --type=NodePort --port=8080

    service を確認すると NodePort が node にあけた port が確認できます (ここでは 31976 です)

    $ kubectl get svc
    NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    hello-minikube   NodePort    10.99.106.111   <none>        8080:31976/TCP   9s
    kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP          55s

    <NodeのIP>:<NodePortがあけたPort> で接続できそうなので、試してみます

    Node の IP は minikube ip で確認できます

    $ minikube ip
    192.168.49.2

    この例では minikube の ip は 192.168.49.2 なので 192.168.49.2:31976 で接続できそうですが、ここで curl などで接続を試みても接続できません

    # 接続できない
    $ curl 192.168.49.2:31976

    driver が docker の場合は minikube ip で取得できる node の ip に host のネットワークから直接アクセスができないようです

    docker driver の場合は変わりに minikube service コマンド を使って host からアクセス可能な url を発行する必要があります

    これで 127.0.0.1:53845 にへのアクセスを 192.168.49.2:31976 に forward してくれるようになります

    $ curl http://127.0.0.1:53845
    CLIENT VALUES:
    client_address=172.17.0.1
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://127.0.0.1:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=127.0.0.1:53845
    user-agent=curl/7.54.0
    BODY:

    driver = virtualbox 時の挙動

    driver として virtualbox を指定すると以下のように virtual box で起動してくれます

    * ただし virtualbox の起動は非常に遅く、数分程度は余裕でかかります

    $ minikube start --driver=virtualbox --cpus=2
    😄  Darwin 10.14.6 上の minikube v1.22.0
    ✨  設定を元に、 virtualbox ドライバを使用します
    👍  コントロールプレーンのノード minikube を minikube 上で起動しています
    🔥  virtualbox VM (CPUs=2, Memory=6000MB, Disk=20000MB) を作成しています...

    起動が終わって Virtual Box の Application で確認すると、一つ仮装環境が立ち上がっている事が確認できます

    image

    この状態で docker driver の時と同様に deployments と service を作って動作確認をしてみます

    kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
    kubectl expose deployment hello-minikube --type=NodePort --port=8080

    service を確認すると以下のように NodePort があけた port (下では 30751) が確認できます

    $ kubectl get svc
    NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    hello-minikube   NodePort    10.102.139.101   <none>        8080:30751/TCP   99s
    kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP          7m17s

    ここで minikube の ip (virtual box の ip) を確認してアクセスすると接続が確認できます

    $ IP=`minikube ip`
    $ curl curl $IP:30751

    また minikube service コマンドを使うと、 minikube ip で取得できる ip と同じ ip が返される事がわかります

    $ minikube service hello-minikube
    |-----------|----------------|-------------|-----------------------------|
    | NAMESPACE |      NAME      | TARGET PORT |             URL             |
    |-----------|----------------|-------------|-----------------------------|
    | default   | hello-minikube |        8080 | http://192.168.99.101:30751 |
    |-----------|----------------|-------------|-----------------------------|

    特に tunnel を作る必要が無い場合は作らないようになっていると思われます

    おわりに

    minikube の docker と virtualbox driver それぞれで、service に host から接続しつつ、挙動を確認しました。私は minikube の driver は virtualbox だと思い込んでいたせいで service への接続に手間取ってしまいましたが、ブランクがある際は公式をチェックするのは大事だなと改めておもいました

    また、以前は virtualbox 環境の起動が非常に遅かった印象でしたが、driver が docker になったおかげか、起動や停止、削除などが非常に高速になっており、非常に使いやすくなっているなと感じました

    © 2025 DROBE All rights reserved.
    $ minikube service hello-minikube 
    |-----------|----------------|-------------|---------------------------|
    | NAMESPACE |      NAME      | TARGET PORT |            URL            |
    |-----------|----------------|-------------|---------------------------|
    | default   | hello-minikube |        8080 | http://192.168.49.2:31976 |
    |-----------|----------------|-------------|---------------------------|
    🏃  Starting tunnel for service hello-minikube.
    |-----------|----------------|-------------|------------------------|
    | NAMESPACE |      NAME      | TARGET PORT |          URL           |
    |-----------|----------------|-------------|------------------------|
    | default   | hello-minikube |             | http://127.0.0.1:53845 |
    |-----------|----------------|-------------|------------------------|