Локальный Kubernetes для практики
Все примеры этого сайта рассчитаны на то, что вы повторяете их руками. Для этого не нужны серверы и облако — достаточно локального кластера на собственном компьютере. В этом разделе мы сравним три популярных варианта — minikube, kind и k3s, — установим каждый из них на Windows, Linux и macOS и выполним первые команды kubectl.
Зачем нужен локальный кластер
Kubernetes невозможно освоить только чтением: понимание приходит, когда вы создаёте поды, ломаете их, читаете события и чините. Локальный кластер решает эту задачу без затрат:
- Бесплатно. Ни аренды серверов, ни облачных счетов — всё работает на вашем ноутбуке.
- Быстро. Кластер создаётся за одну-две минуты и так же быстро пересоздаётся, если вы что-то сломали.
- Безопасно. Эксперименты не затрагивают ничьи данные: это ваша личная песочница.
- Достоверно. API и поведение объектов идентичны «боевому» Kubernetes — перенос знаний прямой.
Сравнение minikube, kind и k3s
Все три инструмента поднимают настоящий Kubernetes на одной машине, но устроены по-разному. Сводная таблица поможет выбрать:
| Критерий | minikube | kind | k3s |
|---|---|---|---|
| Что это | Локальный кластер в ВМ или контейнере, официальный учебный инструмент | Кластер, где каждый узел — Docker-контейнер (Kubernetes IN Docker) | Облегчённый дистрибутив k8s одним бинарным файлом |
| Минимальные требования | 2 CPU, 2 ГБ ОЗУ, ~20 ГБ диска, Docker или VirtualBox | 2 CPU, 2–4 ГБ ОЗУ, обязателен Docker | 1 CPU, от 512 МБ ОЗУ, ~1 ГБ диска |
| Скорость старта | 1–3 минуты (зависит от драйвера) | около минуты | 30–60 секунд |
| Близость к боевому k8s | Высокая: полный набор компонентов, аддоны | Высокая: используется для тестирования самого Kubernetes | Средняя: containerd, Traefik и SQLite вместо части «ванильных» компонентов |
| Многоузловой кластер | Есть (--nodes) |
Есть, самый удобный синтаксис | Возможен, но обычно один узел |
| Платформы | Windows, Linux, macOS | Windows, Linux, macOS (везде через Docker) | Linux нативно; на Windows/macOS — внутри ВМ или WSL2 |
| Типичное применение | Обучение, первая практика | CI-тесты, эксперименты с топологиями | Домашние серверы, edge, слабое железо |
Установка kubectl
kubectl — утилита командной строки, через которую вы разговариваете с любым кластером. Она ставится отдельно и до всего остального.
Windows
# через winget (встроенный пакетный менеджер Windows 10/11)
winget install -e --id Kubernetes.kubectl
# или через Chocolatey
choco install kubernetes-cli
Linux
# скачать бинарный файл и положить его в PATH
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# проверка
kubectl version --client
macOS
# через Homebrew
brew install kubectl
# проверка
kubectl version --client
minikube: установка и запуск
minikube поднимает одноузловый (или многоузловый) кластер в виртуальной машине или контейнере. Рекомендуемый драйвер — Docker: он работает на всех трёх ОС и не требует отдельного гипервизора.
Установка
# Windows (winget)
winget install -e --id Kubernetes.minikube
# Windows (Chocolatey)
choco install minikube
# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# macOS (Homebrew)
brew install minikube
Первый запуск
# запуск кластера (драйвер выберется автоматически; можно указать явно)
minikube start --driver=docker
# состояние кластера
minikube status
# kubectl сам настроился на этот кластер — проверяем
kubectl get nodes
Полезные возможности minikube — готовые аддоны и встроенный доступ к сервисам:
# список доступных аддонов
minikube addons list
# включить metrics-server и ingress-контроллер
minikube addons enable metrics-server
minikube addons enable ingress
# открыть сервис типа NodePort в браузере (проброс портов)
minikube service имя-сервиса
# веб-панель кластера
minikube dashboard
# остановить и полностью удалить кластер
minikube stop
minikube delete
kind: установка и запуск
kind (Kubernetes IN Docker) запускает каждый узел кластера как Docker-контейнер. Благодаря этому кластер стартует быстро, а конфигурации с несколькими узлами описываются декларативно — именно поэтому kind используют для тестирования самого Kubernetes.
Установка
# Windows (winget)
winget install -e --id Kubernetes.kind
# Linux
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# macOS (Homebrew)
brew install kind
Создание кластера
# простейший одноузловой кластер
kind create cluster
# kubectl настроен автоматически
kubectl get nodes
# удалить кластер
kind delete cluster
Сильная сторона kind — многоузловые конфигурации из одного YAML-файла:
kind: Cluster # файл kind-config.yaml
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
# кластер из трёх узлов: один управляющий и два рабочих
kind create cluster --config kind-config.yaml
# убеждаемся, что узлов три
kubectl get nodes
kubectl port-forward или задайте extraPortMappings в конфиге кластера при создании.
Установка и запуск k3s
k3s — облегчённый дистрибутив Kubernetes, упакованный в один бинарный файл. Из него убрали устаревшие и облачно-специфичные компоненты, etcd заменён на SQLite в одиночной установке, а в комплекте уже идут containerd, Traefik и локальное хранилище. Благодаря этому k3s работает там, где обычный кластер не поместится: на домашних серверах, одноплатниках и в edge-сценариях.
Установка на Linux
# официальный установочный сценарий: ставит и сразу запускает кластер
curl -sfL https://get.k3s.io | sh -
# kubeconfig лежит в /etc/rancher/k3s/k3s.yaml — подкладываем его kubectl
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER ~/.kube/config
# проверка
kubectl get nodes
На Windows и macOS k3s нативно не работает (это Linux-дистрибутив), но его можно запустить внутри WSL2 или небольшой виртуальной машины — для домашней лаборатории это даже ближе к реальности: вы получаете опыт администрирования «настоящего» сервера.
# остановить и удалить k3s вместе со всеми данными
/usr/local/bin/k3s-uninstall.sh
Первые команды kubectl
Кластер поднят — пройдём короткий круг «создал → посмотрел → сломал → удалил». Эти команды одинаково работают в minikube, kind и k3s.
# информация о кластере и узлах
kubectl cluster-info
kubectl get nodes -o wide
# создать первый под из образа nginx
kubectl run web --image=nginx:1.27
# посмотреть поды; флаг -w — следить за изменениями
kubectl get pods -o wide
# подробности: события, состояние контейнера
kubectl describe pod web
# логи приложения
kubectl logs web
# выполнить команду внутри контейнера
kubectl exec -it web -- /bin/sh
# проброс порта: приложение доступно на http://localhost:8080
kubectl port-forward pod/web 8080:80
# удалить под — кластер снова чист
kubectl delete pod web
Теперь то же самое декларативно, как принято в реальной работе, — через манифест:
# применить любой YAML-манифест из примеров сайта
kubectl apply -f pod.yaml
# что изменилось в кластере
kubectl get pods
# убрать за собой
kubectl delete -f pod.yaml
kubectl completion bash / zsh / powershell) и добавьте короткий псевдоним k. Практически все инженеры, работающие с k8s ежедневно, так и делают.
Что выбрать
| Ситуация | Рекомендация |
|---|---|
| Первое знакомство с Kubernetes, обучение по этому сайту | minikube — аддоны, dashboard, дружелюбные команды |
| Нужно несколько узлов, эксперименты с планировщиком и NetworkPolicy | kind — многоузловая топология из одного файла |
| Слабая машина или постоянный домашний сервер | k3s — минимальное потребление ресурсов |
| Автоматические тесты манифестов и Helm-чартов в CI | kind — быстрый старт, контейнерная природа |
| Подготовка к сертификации CKA | kubeadm на виртуальных машинах — ближе всего к экзамену |
Ничто не мешает держать два инструмента сразу: они не конфликтуют, а kubectl переключается между кластерами через контексты (kubectl config get-contexts / use-context).
Типовые проблемы
Ситуации, в которых оказывается почти каждый новичок, и способы из них выбраться:
| Симптом | Причина | Решение |
|---|---|---|
minikube start зависает или падает с ошибкой про драйвер |
Не запущен Docker Desktop или нет прав на Docker-демон | Запустить Docker Desktop; на Linux — добавить пользователя в группу docker и перелогиниться |
| Ошибка вида «VirtualBox not found» или конфликт с Hyper-V | Выбран драйвер VirtualBox, а он не установлен или конфликтует с Hyper-V/WSL2 в Windows | Перейти на драйвер Docker: minikube delete, затем minikube start --driver=docker |
Кластер стартует, но поды вечно в Pending |
Нехватка ОЗУ/CPU: кластеру выделено меньше 2 ГБ | Пересоздать с явными ресурсами: minikube start --memory=4096 --cpus=2; закрыть лишние приложения |
ImagePullBackOff у подов |
Нет доступа к реестру образов из кластера (ограничения сети, недоступность реестра) | Проверить сеть; в minikube образ можно загрузить локально: minikube image load nginx:1.27 |
kubectl не видит кластер: «connection refused» |
Неверный текущий контекст или кластер остановлен | kubectl config get-contexts, выбрать нужный через use-context; проверить minikube status |
| kind создаёт кластер, но порты приложений недоступны с хоста | У контейнеров-узлов нет проброса портов | Использовать kubectl port-forward или пересоздать кластер с extraPortMappings |
| После перезагрузки Linux k3s «пропал» для kubectl | kubeconfig ссылается на недоступный файл или служба не стартовала | Проверить systemctl status k3s и путь в переменной KUBECONFIG |
| Всё работает медленно, вентиляторы шумят | Кластер + Docker + IDE превысили возможности машины | Остановить кластер, когда он не нужен (minikube stop, kind delete cluster); локальный k8s не обязан работать постоянно |