Home » Настройка кластера MicroK8s Kubernetes на Ubuntu 24
Настройка кластера MicroK8s Kubernetes на Ubuntu 24

Настройка кластера 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-систем.

Полезные ссылки для дальнейшего изучения:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked