Зарегистрируйтесь, чтобы продолжить обучение

Обзор инструментов: minikube, kind, k3s Kubernetes

Локальные кластеры для разработки

Представьте ситуацию: вы изучили основы Kubernetes, хотите попрактиковаться, но покупать кластер в облаке дорого, а настраивать собственную инфраструктуру долго и сложно. Хорошая новость — существуют инструменты, которые позволяют поднять настоящий Kubernetes на вашем ноутбуке за несколько минут.

В этом уроке мы разберем три популярных инструмента для локальной разработки: minikube, kind и k3s. Вы научитесь разворачивать кластеры, работать с ними и поймете, какой инструмент выбрать для ваших задач.

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

Облачные кластеры отлично подходят для production, но для локальной разработки, тестирования и изучения у них есть недостатки. Каждый запуск стоит денег, настройка занимает время, а случайная ошибка может привести к неожиданному счету. Локальный кластер решает эти проблемы.

На локальном кластере вы можете экспериментировать без риска и затрат. Хотите посмотреть, что произойдет, если удалить все Pod? Пожалуйста. Нужно протестировать новую версию приложения перед деплоем? Без проблем. Кластер работает на вашем компьютере и ничего не стоит.

Локальные кластеры предоставляют те же возможности, что и облачные. У вас будет настоящий Kubernetes с теми же командами kubectl, теми же объектами API и той же логикой работы. Разница только в масштабе — вместо десятков узлов у вас будет один или несколько, но для разработки и тестирования это не имеет значения.

Minikube: первый кластер за минуты

Представьте, что вам нужно развернуть Kubernetes, но покупать кластер в облаке — дорого и долго. Minikube позволяет поднять настоящий Kubernetes на вашем ноутбуке за несколько минут.

Minikube создает однонодовый кластер — все компоненты Kubernetes работают на одной машине. Это идеально для разработки, тестирования и изучения. Вы получаете полноценный Kubernetes с Dashboard, аддонами и всеми возможностями, просто в меньшем масштабе.

Задание: установите и запустите minikube

Начнем с установки. Выберите команду для вашей операционной системы:

# macOS
brew install minikube

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

# Windows (PowerShell как администратор)
choco install minikube

После установки запустите кластер:

minikube start

Эта команда скачает образ Kubernetes, создаст виртуальное окружение и запустит кластер. Первый запуск займет пару минут — minikube скачивает образы и настраивает компоненты. Вы увидите прогресс в терминале.

Когда команда завершится, проверьте, что кластер работает:

minikube status

Вы должны увидеть, что minikube, kubelet и apiserver работают. Теперь попробуйте обычные команды kubectl:

kubectl get nodes
kubectl get pods -A

Поздравляю! Ваш первый локальный кластер готов. Вы видите один узел и системные Pod в namespace kube-system.

Задание: разверните приложение

Теперь давайте развернем простое приложение, чтобы убедиться, что все работает:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

Подождите несколько секунд, пока Pod запустится:

kubectl get pods -w

Когда Pod перейдет в состояние Running, получите URL для доступа:

minikube service nginx --url

Скопируйте URL и откройте его в браузере. Вы увидите стандартную страницу nginx. Это ваше приложение, работающее в Kubernetes на вашем компьютере!

Задание: откройте Dashboard

Minikube включает графический интерфейс — Kubernetes Dashboard. Запустите его:

minikube dashboard

Эта команда откроет Dashboard в браузере. Здесь вы можете видеть все Pod, Service, Deployment и другие объекты, просматривать логи и управлять ресурсами через интерфейс. Попробуйте найти ваш nginx Deployment и посмотреть его детали.

Задание: включите metrics-server

Чтобы использовать команду kubectl top, нужен metrics-server. Включите его как аддон:

minikube addons enable metrics-server

Подождите минуту, пока аддон установится, затем проверьте метрики:

kubectl top nodes
kubectl top pods

Теперь вы видите использование CPU и памяти. Это полезно для мониторинга приложений.

Посмотреть все доступные аддоны можно командой:

minikube addons list

Здесь вы найдете множество полезных компонентов: registry для хранения образов, систему логирования, метрики и другие инструменты.

Остановка и запуск кластера

Когда закончите работу, остановите кластер:

minikube stop

Это освободит ресурсы компьютера, но сохранит состояние кластера. При следующем minikube start все ваши Deployment и Service останутся на месте.

Если нужно полностью удалить кластер:

minikube delete

Это удалит все данные и освободит место на диске.

Kind: быстрые кластеры для тестов

Иногда нужен кластер еще быстрее. Например, вы пишете тесты и хотите создавать новый кластер для каждого теста. Kind (Kubernetes in Docker) запускает узлы кластера как обычные Docker контейнеры, что делает его очень быстрым.

Kind изначально создавался для тестирования самого Kubernetes, поэтому он отлично подходит для автоматизированного тестирования и CI/CD. Если вам нужно часто создавать и удалять кластеры, kind — хороший выбор.

Задание: создайте кластер в kind

Установите kind:

brew install kind  # macOS
# или
go install sigs.k8s.io/kind@latest  # любая ОС с Go

Создайте кластер:

kind create cluster

Это займет секунды. Kind автоматически настроит kubectl для работы с новым кластером. Проверьте узлы:

kubectl get nodes

Вы увидите один узел с именем вроде kind-control-plane. Это обычный Docker контейнер — проверьте:

docker ps | grep kind

Задание: создайте многоузловой кластер

Kind позволяет легко создать кластер из нескольких узлов. Создайте файл kind-config.yaml:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: worker
  - role: worker

Теперь создайте кластер с этой конфигурацией:

kind create cluster --config kind-config.yaml --name multi-node

У вас появится кластер с одним control-plane узлом и двумя worker узлами. Разверните приложение и посмотрите, как Pod распределяются по узлам:

kubectl create deployment nginx --image=nginx --replicas=3
kubectl get pods -o wide

Вы увидите, что Pod размещены на разных узлах. Это полезно для тестирования распределения нагрузки и отказоустойчивости.

Задание: загрузите локальный образ

Одна из сильных сторон kind — простая работа с Docker образами. Создайте простой Dockerfile:

FROM nginx
RUN echo "Hello from local image" > /usr/share/nginx/html/index.html

Соберите образ:

docker build -t my-app:latest .

Теперь загрузите образ напрямую в кластер:

kind load docker-image my-app:latest

Создайте Deployment с этим образом:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: my-app:latest
          imagePullPolicy: Never
          ports:
            - containerPort: 80

Сохраните в my-app.yaml и примените:

kubectl apply -f my-app.yaml

Проверьте, что Pod запустился:

kubectl get pods
kubectl logs deployment/my-app

Вы увидите, что образ загрузился без необходимости пушить его в registry. Это значительно ускоряет цикл разработки.

K3s: легкий кластер для слабых машин

Если у вас слабый компьютер или нужно что-то совсем легкое, попробуйте k3s. Это облегченный дистрибутив Kubernetes — весь Kubernetes упакован в один файл размером меньше 100 МБ. При этом k3s полностью совместим с обычным Kubernetes.

K3s убрал необязательные компоненты и упростил архитектуру. Вместо etcd по умолчанию используется SQLite, legacy API удалены, Docker заменен на containerd. Это позволило сильно уменьшить размер и требования к ресурсам.

Задание: установите k3s

На Linux k3s устанавливается одной командой:

curl -sfL https://get.k3s.io | sh -

Через несколько секунд кластер готов. Проверьте:

sudo k3s kubectl get nodes

K3s создает свой 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
kubectl create deployment nginx --image=nginx

Задание: используйте k3d

Если вы предпочитаете Docker, используйте k3d — обертку, которая запускает k3s в контейнерах:

brew install k3d
k3d cluster create my-cluster

Кластер запустится за несколько секунд. Проверьте:

kubectl get nodes

Вы получили легкий кластер с минимальными требованиями к ресурсам.

Какой инструмент выбрать

Каждый инструмент хорош для своих задач. Вот простые рекомендации:

Выбирайте minikube, если:

  • Нужен кластер для локальной разработки с удобными инструментами
  • Хотите графический Dashboard и готовые аддоны
  • Нужна максимальная совместимость с облачными кластерами

Выбирайте kind, если:

  • Пишете тесты для CI/CD
  • Часто создаете и удаляете кластеры
  • Нужна максимальная скорость запуска

Выбирайте k3s/k3d, если:

  • У вас слабый компьютер с ограниченными ресурсами
  • Нужен минимальный кластер без лишнего
  • Разрабатываете для edge-устройств

На практике многие используют несколько инструментов. Minikube для разработки и экспериментов, kind для тестов, k3d для быстрой проверки идей. Попробуйте все три и выберите тот, что удобнее для вас.

Управление несколькими кластерами

Когда у вас несколько кластеров, нужно уметь переключаться между ними. Kubectl работает с кластерами через kubeconfig — файл конфигурации в ~/.kube/config. Этот файл содержит информацию о кластерах, пользователях и контекстах.

Когда вы создаете кластер в minikube, kind или k3d, инструмент автоматически добавляет новый контекст в kubeconfig. Контекст — это комбинация кластера, пользователя и namespace. Переключаясь между контекстами, вы переключаетесь между кластерами.

Задание: работа с несколькими кластерами

Создайте несколько кластеров:

minikube start -p dev-cluster
kind create cluster --name test-cluster
k3d cluster create prod-like

Посмотрите все контексты:

kubectl config get-contexts

Вы увидите список всех кластеров. Звездочка показывает текущий активный контекст.

Теперь разверните приложение в каждом кластере:

# В minikube
kubectl config use-context dev-cluster
kubectl create deployment app --image=nginx
kubectl get pods

# В kind
kubectl config use-context kind-test-cluster
kubectl create deployment app --image=nginx
kubectl get pods

# В k3d
kubectl config use-context k3d-prod-like
kubectl create deployment app --image=nginx
kubectl get pods

Проверьте, что в каждом кластере есть свой Pod. Так вы можете одновременно работать с разными кластерами для разных целей — dev, test, production-подобным окружением.

Упростите переключение

Вместо длинной команды kubectl config use-context можно использовать утилиту kubectx:

brew install kubectx
kubectx minikube

А утилита kubens быстро переключает namespace:

kubens kube-system
kubectl get pods  # Pod в kube-system

Попробуйте k9s

K9s — это терминальный интерфейс для Kubernetes. Он показывает все ресурсы кластера в удобном виде:

brew install k9s
k9s

Запустите k9s и попробуйте навигироваться стрелками, просматривать логи и управлять Pod без набора команд. Это значительно упрощает работу с кластером.

Что дальше

Теперь у вас есть все инструменты для практики с Kubernetes. Вы можете поднять кластер за минуту, развернуть приложение, поэкспериментировать и удалить кластер. Все это без затрат на облако.

Используйте локальные кластеры для отработки команд kubectl из уроков, тестирования манифестов перед деплоем, экспериментов с новыми возможностями Kubernetes и разработки приложений локально.

В следующих проектах вы примените эти инструменты для развертывания реальных приложений.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff