minikube: драйверы, порты и аддоны
Чем minikube отличается от kind и k3d, какую версию Kubernetes он даёт на самом деле и почему порты тут отдельная тема.
minikube - старейший из живых инструментов для локального Kubernetes, и устроен он иначе, чем kind или k3d. Те умеют ровно одно: запускать ноды как контейнеры. minikube выбирает, где поднять ноду, из целого списка вариантов. Контейнер Docker, виртуальная машина KVM, виртуальная машина через нативный гипервизор macOS или Windows.
Это выбирается флагом --driver. Дальше по тексту такие варианты
называются драйверами.
Виртуальная машина стоит дороже по ресурсам, зато даёт настоящее ядро и настоящую изоляцию от хоста. Контейнерная нода запускается быстрее, но делит ядро с хостом со всеми вытекающими ограничениями. В официальном бенчмарке time-to-k8s (v1.36.0, linux/amd64) minikube поднимается за 50,8 секунды против 33,0 у kind и 19,9 у k3d.
Версия и ловушка с документацией
Актуальный релиз - v1.38.1 от 19 февраля 2026. Релизов с тех пор не было, но коммиты в репозиторий идут: последний датирован 31 августа 2026.
Дальше внимательно. Сайт документации minikube собирается из ветки master и пишет, что версия Kubernetes по умолчанию - v1.37.0. В релизном бинаре v1.38.1 по умолчанию поднимается v1.35.1. Поддерживаемый диапазон в этом бинаре - от v1.28.0 до v1.35.1.
Расхождение появилось потому, что дефолт в master уже подняли, а релиза с этим изменением ещё не выпустили. Документация опережает то, что реально скачивается.
Проверить, что получилось у себя, проще всего по самому кластеру:
minikube start
minikube kubectl -- get nodes
В колонке VERSION будет версия, с которой запустился kubelet. На неё и ориентируются, а не на цифру с сайта.
Драйверы
Фактический дефолт на всех системах - docker. Если Docker установлен,
minikube возьмёт его.
Когда Docker ставить не хочется, есть варианты с виртуальной машиной:
kvm2на Linux;vfkitна macOS;hypervна Windows.
Два ограничения стоит знать заранее. Драйвер hyperkit объявлен устаревшим
и отключён в brew с 21 июня 2025, полагаться на него больше нельзя.
VirtualBox не поддерживается на darwin/arm64, то есть на Apple Silicon его
нет.
Отдельно про Windows: связка WSL2 с драйвером docker помечена в проекте
как экспериментальная.
Минимум для запуска - 2 CPU, 2 GB свободной памяти, 20 GB диска. Память
кластеру minikube выделяет сам: примерно 25% от памяти хоста, зажатые в
границы 3072-6144 MB. При --nodes N этот объём делится между нодами.
Флаг --memory может молча ничего не сделать. Если на хосте нет нужных
cgroup-контроллеров, ошибки не будет: лимит просто не применится, а кластер
возьмёт столько памяти, сколько сможет.
Установка
brew install minikube
curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
winget install Kubernetes.minikube
На Apple Silicon нужен именно arm64-бинарь, minikube-darwin-arm64. Причина
конкретная: amd64-бинарь запустится под Rosetta и будет работать, но
драйвер docker при этом уходит в состояние Unhealthy. Homebrew
подбирает правильную сборку сам, вручную скачанный файл - нет.
Запуск и жизненный цикл
minikube start
minikube start --kubernetes-version=v1.34.0 --driver=docker
minikube start --nodes 2 -p multinode-demo
minikube stop; minikube delete
Флаг -p задаёт имя профиля. Профиль - это отдельный кластер со своим
состоянием, их может быть несколько параллельно.
Отдельный kubectl ставить не обязательно, minikube носит свой:
minikube kubectl -- get po -A
Двойной дефис отделяет аргументы minikube от аргументов kubectl. Всё, что после него, уходит внутрь как есть.
Порты
Это самый нагруженный раздел, и разбираться в нём приходится сразу.
С драйвером docker нода живёт внутри контейнера. На Linux сеть Docker
доступна с хоста напрямую, и IP ноды пингуется. На macOS, Windows и в WSL2
Docker работает поверх виртуальной машины, поэтому IP ноды с хоста
недостижим. Команда minikube ip выдаёт адрес, curl по нему висит, и
причина не в кластере.
Для Service типа NodePort есть готовый обход:
minikube service web --url
Команда печатает адрес вида http://127.0.0.1:<порт> и держит проброс,
пока процесс запущен. Закрыли терминал - проброс исчез.
Для Service типа LoadBalancer нужен туннель:
minikube tunnel
minikube tunnel --cleanup
Без него EXTERNAL-IP так и останется в <pending>. Туннель настраивает
маршрутизацию на хосте, поэтому запрашивает права root. На Windows порты
ниже 1024 тоже требуют повышенных прав. На macOS у туннеля с драйвером
docker есть ограничение: он не резолвит Kubernetes DNS.
Третий вариант - зафиксировать проброс при создании кластера:
minikube start --driver=docker --ports=127.0.0.1:8080:30080
Это ближе всего к тому, как порты открывают в kind. Работает без дополнительных процессов, но задаётся один раз при старте.
| Способ | Для какого Service | Сколько живёт | Права root |
|---|---|---|---|
minikube service web --url | NodePort | пока запущен процесс | нет |
minikube tunnel | LoadBalancer | пока запущен процесс | да |
--ports=127.0.0.1:8080:30080 | NodePort | всё время жизни кластера | нет |
Аддоны
Дополнительные компоненты в minikube включаются одной командой.
minikube addons enable ingress
minikube addons enable metrics-server
С ingress есть неприятная деталь, о которой лучше знать до того, как
привыкнешь к команде. Аддон ставит ingress-nginx версии 1.14.3. Репозиторий
kubernetes/ingress-nginx архивирован 24 марта 2026 и переведён в
read-only: релизов, багфиксов и патчей безопасности больше не будет. Даже
последняя выпущенная версия 1.15.1 в аддон не попала. Issue об этом
(kubernetes/minikube#22030) открыт с 3 декабря 2025, решения нет.
Для локального обучения это терпимо: кластер стоит на ноутбуке и наружу не смотрит. Переносить такую же схему куда-то дальше не стоит, официальная рекомендация Kubernetes - выбирать реализацию Gateway API.
Документация аддона пишет «Linux only», но код v1.38.1 новее документации:
на macOS и Windows аддон включается и советует запустить minikube tunnel.
С metrics-server проще. В kind его после установки приходится патчить
флагом для работы с самоподписанным сертификатом kubelet, а в minikube
аддон собран с нужными флагами сразу. Заработает kubectl top, ничего
править не надо.
Хранилище
StorageClass называется standard и помечен дефолтным. Провижнер -
k8s.io/minikube-hostpath, это не CSI-драйвер, а собственная реализация
minikube.
Два ограничения:
В multi-node кластере host-path провижнер не работает. Том создаётся на одной ноде, а под может уехать на другую. Для нескольких нод нужен отдельный аддон CSI Hostpath Driver.
Перезагрузку кластера переживают только данные в каталогах /data,
/var/lib/minikube, /var/lib/docker и /tmp/hostpath_pv. Всё, что
записано мимо них, исчезнет.
Что обычно ломается
Rosetta на Apple Silicon. В версии v1.38.0 была регрессия: эмуляция
x86_64 ломалась с ошибкой exec format error. В v1.38.1 есть изменение
«mask systemd-binfmt», которое похоже на исправление, но прямая связь этого
изменения с issue не подтверждена. Если запускаете x86-образы на Apple
Silicon, версию v1.38.0 стоит обойти стороной.
IPv6. Не поддерживается. Сценарии с dual-stack на minikube не разобрать.
Коротко
- minikube умеет поднимать ноду и в контейнере, и в виртуальной машине;
выбор задаётся флагом
--driver, фактический дефолт везде -docker. - Сайт документации обещает Kubernetes v1.37.0, релизный бинарь v1.38.1
даёт v1.35.1; проверять по колонке VERSION в
minikube kubectl -- get nodes. - На Apple Silicon ставится
minikube-darwin-arm64, иначе драйверdockerуходит вUnhealthy. - IP ноды с хоста недостижим на macOS, Windows и в WSL2: NodePort через
minikube service --url, LoadBalancer черезminikube tunnelс правами root, либо--portsпри старте. - Аддон ingress ставит заархивированный ingress-nginx 1.14.3 без патчей безопасности; metrics-server, наоборот, приезжает уже настроенным.
- StorageClass
standardесть сразу, но host-path провижнер не работает в multi-node.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс