- Home »

Настройка кластера MicroK8s Kubernetes на Ubuntu 24
Тебе нужно развернуть Kubernetes кластер, но не хочется возиться с полноценным k8s? Понимаю — обычный Kubernetes может превратиться в ад для сисадмина, особенно если ты только начинаешь осваивать контейнерную оркестрацию. MicroK8s — это как раз то, что нужно: легковесный, быстрый в развертывании и достаточно функциональный для большинства задач. Особенно на Ubuntu 24, где всё работает из коробки.
Сегодня разберём, как за 15 минут поднять production-ready кластер MicroK8s, настроить его правильно и избежать типичных граблей. Покажу реальные примеры, команды и расскажу, где можно споткнуться. Если тебе нужен VPS для тестирования — есть хорошие варианты, а для серьёзных нагрузок лучше взять выделенный сервер.
Что такое MicroK8s и почему именно он?
MicroK8s — это минималистичная реализация Kubernetes от Canonical, которая работает как snap-пакет. В отличие от полноценного K8s, здесь нет головной боли с kubeadm, сложной настройкой сети и зависимостями. Всё упаковано в один snap, который можно установить одной командой.
Основные преимущества:
- Быстрая установка — буквально одна команда
- Автоматические обновления — snap сам следит за версиями
- Встроенные аддоны — DNS, ingress, storage из коробки
- Изоляция — работает в собственном namespace
- Совместимость — полноценный kubectl API
Подготовка системы
Перед установкой убедись, что система готова. Ubuntu 24 отлично подходит для MicroK8s, но есть несколько моментов:
# Обновляем систему
sudo apt update && sudo apt upgrade -y
# Устанавливаем необходимые пакеты
sudo apt install snapd curl wget -y
# Проверяем, что snap работает
sudo snap version
# Настраиваем firewall (если используешь)
sudo ufw allow in on cni0
sudo ufw allow out on cni0
sudo ufw default allow routed
Установка MicroK8s
Теперь самое интересное — установка. Процесс действительно тривиальный:
# Устанавливаем MicroK8s
sudo snap install microk8s --classic
# Добавляем пользователя в группу microk8s
sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube
# Перелогиниваемся или обновляем группы
newgrp microk8s
# Проверяем статус
microk8s status --wait-ready
Если всё прошло успешно, увидишь что-то вроде:
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
ha-cluster # (core) Configure high availability on the current node
disabled:
dashboard # (core) The Kubernetes dashboard
dns # (core) CoreDNS
helm # (core) Helm - the package manager for Kubernetes
Первоначальная настройка
Базовая установка готова, но для полноценной работы нужно включить несколько ключевых аддонов:
# Включаем DNS (обязательно!)
microk8s enable dns
# Включаем dashboard для веб-интерфейса
microk8s enable dashboard
# Включаем ingress для внешнего доступа
microk8s enable ingress
# Включаем storage для persistent volumes
microk8s enable storage
# Включаем registry для своих образов
microk8s enable registry
# Проверяем, что всё включилось
microk8s status
Настройка kubectl
Для удобства работы настрой обычный kubectl:
# Устанавливаем kubectl (если ещё не установлен)
sudo snap install kubectl --classic
# Экспортируем конфиг MicroK8s
microk8s config > ~/.kube/config
# Или используем alias (удобнее)
echo "alias kubectl='microk8s kubectl'" >> ~/.bashrc
source ~/.bashrc
# Проверяем подключение
kubectl get nodes
kubectl get pods --all-namespaces
Создание кластера из нескольких нод
Один из крутых моментов MicroK8s — простота создания кластера. Допустим, у тебя есть три сервера:
На первой ноде (master):
# Получаем токен для присоединения
microk8s add-node
# Увидишь что-то вроде:
# From the node you wish to join to this cluster, run the following:
# microk8s join 10.0.0.10:25000/92b2db237428470dc4fcfc4eb9b90055/dfd02a6b70aa
# Включаем high availability
microk8s enable ha-cluster
На второй и третьей нодах:
# Сначала устанавливаем MicroK8s
sudo snap install microk8s --classic
# Присоединяемся к кластеру
microk8s join 10.0.0.10:25000/92b2db237428470dc4fcfc4eb9b90055/dfd02a6b70aa
# Проверяем статус
microk8s status --wait-ready
Практические примеры развертывания
Пример 1: Простое веб-приложение
Создадим простой nginx deployment:
# Создаём deployment
kubectl create deployment nginx --image=nginx:latest
# Масштабируем до 3 реплик
kubectl scale deployment nginx --replicas=3
# Создаём service
kubectl expose deployment nginx --port=80 --type=NodePort
# Проверяем
kubectl get pods,svc
Пример 2: Приложение с persistent storage
# Создаём PVC
cat <
Мониторинг и troubleshooting
Несколько полезных команд для диагностики:
# Проверяем состояние кластера
microk8s inspect
# Логи системных компонентов
microk8s logs
# Проверяем конкретный pod
kubectl describe pod
kubectl logs
# Проверяем ресурсы
kubectl top nodes
kubectl top pods
Сравнение с другими решениями
Решение | Время установки | Сложность | Ресурсы | Production-ready |
---|---|---|---|---|
MicroK8s | 5-10 минут | Низкая | Средние | Да |
kubeadm | 30-60 минут | Высокая | Высокие | Да |
k3s | 5 минут | Низкая | Низкие | Да |
minikube | 10 минут | Низкая | Низкие | Нет |
Типичные проблемы и решения
Проблема: Pods не могут резолвить DNS
# Проверяем, что DNS включён
microk8s status | grep dns
# Если нет, включаем
microk8s enable dns
# Проверяем coredns pods
kubectl get pods -n kube-system | grep coredns
Проблема: Недостаток места
# Очищаем неиспользуемые образы
microk8s ctr images list | grep -v "REF" | awk '{print $1}' | xargs -I {} microk8s ctr images remove {}
# Проверяем использование
df -h
Проблема: Медленная работа
Обычно связана с нехваткой ресурсов. Рекомендую минимум 2 CPU и 4GB RAM для нормальной работы.
Автоматизация и скрипты
Создадим скрипт для автоматической установки:
#!/bin/bash
# microk8s-setup.sh
set -e
echo "=== Установка MicroK8s ==="
# Обновляем систему
sudo apt update && sudo apt upgrade -y
# Устанавливаем MicroK8s
sudo snap install microk8s --classic
# Настраиваем пользователя
sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube
echo "=== Ожидание готовности ==="
microk8s status --wait-ready
echo "=== Включение аддонов ==="
microk8s enable dns dashboard ingress storage registry
echo "=== Настройка kubectl ==="
microk8s config > ~/.kube/config
echo "=== Установка завершена ==="
microk8s kubectl get nodes
Интеграция с CI/CD
MicroK8s отлично подходит для CI/CD pipeline. Пример использования с GitLab CI:
# .gitlab-ci.yml
stages:
- deploy
deploy:
stage: deploy
script:
- microk8s kubectl apply -f k8s/
- microk8s kubectl rollout status deployment/my-app
only:
- main
Безопасность
Несколько важных моментов по безопасности:
# Включаем RBAC
microk8s enable rbac
# Создаём service account с ограниченными правами
kubectl create serviceaccount my-app
kubectl create clusterrolebinding my-app --clusterrole=view --serviceaccount=default:my-app
# Настраиваем network policies
microk8s enable cis-hardening
Мониторинг и метрики
Для production-среды нужен мониторинг:
# Включаем Prometheus
microk8s enable prometheus
# Или используем Grafana
microk8s enable grafana
# Проверяем метрики
kubectl get --raw /metrics
Бэкапы и восстановление
Не забывай про бэкапы:
# Бэкап etcd
microk8s.etcd --endpoints=https://127.0.0.1:12379 \
--cert=/var/snap/microk8s/current/certs/etcd.crt \
--key=/var/snap/microk8s/current/certs/etcd.key \
--cacert=/var/snap/microk8s/current/certs/ca.crt \
snapshot save backup.db
# Бэкап конфигурации
microk8s config > microk8s-config-backup.yaml
Интересные факты и нестандартные применения
- Edge computing — MicroK8s отлично работает на Raspberry Pi
- Development clusters — каждый разработчик может иметь свой кластер
- Testing environments — быстрое развертывание временных окружений
- IoT deployments — лёгкий вес позволяет использовать на embedded-системах
Один из моих любимых трюков — использование MicroK8s для локальной разработки microservices:
# Создаём namespace для разработки
kubectl create namespace dev
# Используем local registry
docker build -t localhost:32000/my-app:latest .
docker push localhost:32000/my-app:latest
# Развертываем в dev namespace
kubectl apply -f deployment.yaml -n dev
Масштабирование и производительность
MicroK8s показывает хорошую производительность в небольших и средних кластерах. Вот несколько цифр из моей практики:
- 1 нода: до 20-30 pods комфортно
- 3 ноды: до 100-150 pods
- 5+ нод: зависит от нагрузки и ресурсов
Для высоконагруженных систем рекомендую рассмотреть переход на полноценный Kubernetes.
Заключение и рекомендации
MicroK8s — отличный выбор для:
- Начинающих с Kubernetes — низкий порог входа
- Dev/Test окружений — быстрое развертывание
- Небольших production-систем — до 100 pods
- Edge computing — минимальные требования
- CI/CD pipeline — интеграция из коробки
Не рекомендую использовать MicroK8s для:
- Высоконагруженных систем (500+ pods)
- Критичных production-систем с жёсткими SLA
- Сложных сетевых конфигураций
- Мультитенантных окружений
В целом, MicroK8s — это золотая середина между простотой и функциональностью. Он даёт возможность быстро войти в мир Kubernetes без головной боли от сложной настройки. Идеально подходит для изучения, разработки и небольших production-систем.
Полезные ссылки для дальнейшего изучения:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.