Локальный Kubernetes для практики

Все примеры этого сайта рассчитаны на то, что вы повторяете их руками. Для этого не нужны серверы и облако — достаточно локального кластера на собственном компьютере. В этом разделе мы сравним три популярных варианта — minikube, kind и k3s, — установим каждый из них на Windows, Linux и macOS и выполним первые команды kubectl.

Схема локального кластера: на одном компьютере minikube, kind или k3s поднимают одноузловой Kubernetes
Три способа поднять одноузловой кластер прямо на своём компьютере
Содержание раздела

Зачем нужен локальный кластер

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, слабое железо
Короткий ответ Если сомневаетесь — ставьте minikube: он создан именно для обучения, содержит готовые аддоны (dashboard, metrics-server, ingress) и лучше всех документирован для новичка. Все примеры этого сайта проверены на нём.

Установка 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
Про версии kubectl может отличаться от версии кластера максимум на одну минорную версию в любую сторону. Правило простое: держите kubectl примерно той же версии, что и кластер, — локальные инструменты сами ставят совместимые выпуски.

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
Как публиковать сервисы в kind У контейнеров-узлов нет внешних портов по умолчанию. Для доступа к приложению используйте 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
k3s — полноценный сервис В отличие от minikube и kind, k3s ставится как системная служба и стартует вместе с машиной. Это удобно для постоянного домашнего сервера, но на рабочем ноутбуке, где кластер нужен «на вечер», предпочтительнее minikube или kind.

Первые команды 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 для своей оболочки (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 не обязан работать постоянно
Главный источник боли — ресурсы Большинство «странных» проблем локального кластера сводится к нехватке оперативной памяти: control plane Kubernetes сам по себе потребляет заметный объём ОЗУ. Выделяйте кластеру минимум 2 ГБ, а комфортный минимум для экспериментов с мониторингом — 4 ГБ и 2 CPU.
Проверьте себя Убедитесь, что можете без подсказки: поднять кластер, запустить под, посмотреть его логи, пробросить порт и удалить кластер. Этот круг операций вы будете выполнять сотни раз — он должен доводиться до автоматизма. Дальше — раздел «Основы» со всеми манифестами на практике.