Kubernetes для homelab: пошаговое освоение контейнеров

Отличное руководство по освоению Kubernetes в домашних условиях. От сложной теории до практического развертывания приложений в вашем self-hosting окружении.

Не указано
Алексей Кузнецов
Алексей Кузнецов
Системный администратор2 мая 2026 г.

Введение в Kubernetes

Kubernetes (K8s) — система для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Может использоваться не только в корпоративной среде, но и дома для обучения и развертывания проектов.

Подготовка системы

Обновляем систему и устанавливаем необходимые пакеты, добавляем репозиторий Docker и устанавливаем Docker.

sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USER

Отключение swap

Kubernetes не работает с включенным swap, поэтому необходимо его отключить.

sudo swapoff -a
sudo sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab

Установка компонентов Kubernetes

Добавляем репозиторий Kubernetes и устанавливаем kubeadm, kubelet и kubectl.

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Инициализация кластера

Запускаем инициализацию управляющей ноды и настраиваем доступ для kubectl.

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Установка сетевого плагина

Устанавливаем сетевой плагин Flannel, без которого поды не смогут общаться друг с другом.

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Проверка кластера

Проверяем, что все поды в пространстве имен kube-system перешли в состояние Running, и статус ноды.

kubectl get pods -n kube-system
kubectl get nodes

Развертывание первого приложения

Создаем деплоймент с NGINX и сервис для доступа к нему извне.

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

Масштабирование приложения

Увеличиваем количество подов NGINX до трех для демонстрации горизонтального масштабирования.

kubectl scale deployment nginx --replicas=3
kubectl get pods

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

Основные команды для просмотра ресурсов, логов pod'ов и входа внутрь pod.

kubectl get all
kubectl describe deployment nginx
kubectl logs <имя_пода>
kubectl logs -f <имя_пода>
kubectl exec -it <имя_пода> -- /bin/bash

Мониторинг кластера

Устанавливаем метрический сервер для просмотра использования ресурсов подами.

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl top pods

Kubernetes - это зверь для изучения, но когда он запущен, это действительно приятно

Kubernetes (часто сокращенно K8s) — это мощная система для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. На первый взгляд может показаться, что это что-то из разряда корпоративных решений, требующих целых отделов специалистов. Но на самом деле, при правильном подходе, Kubernetes можно запустить и у себя дома, чтобы получить опыт работы с этой технологией, а также удобно развёртывать свои проекты.

Что нам понадобится

Прежде чем начать, определим минимальные требования для домашнего кластера Kubernetes:

  1. Достаточно мощная машина: Рекомендуется минимум 2 ядра процессора и 4 ГБ оперативной памяти для управляющей ноды. Если планируете развёртывать рабочие нагрузки, лучше 4 ядра и 8 ГБ RAM.
  2. Операционная система: Ubuntu 20.04 LTS или Debian 11 — наиболее проверенные варианты. Можно использовать CentOS/RHEL, но они потребуют дополнительных действий с SELinux.
  3. Контейнерный рантайм: Docker — самый распространённый вариант, но Kubernetes работает с различными рантаймами.
  4. Интернет: Для загрузки образов и пакетов.

Для начала достаточно одного компьютера, где будет управляющая нода. Позже можно добавить рабочие ноды, когда разберётесь с основами.

Выбор способа установки

Существует несколько популярных способов установки Kubernetes в домашних условиях:

  1. kubeadm — официальный инструмент от Kubernetes для создания кластеров "с нуля". Требует больше ручной настройки, но даёт полное понимание того, как устроен кластер.
  2. k3s — облегчённая версия Kubernetes от Rancher, оптимизированная для работы на ресурсах. Идеально для домашнего использования.
  3. minikube — инструмент для запуска однонодочного кластера Kubernetes на вашем локальном компьютере. Отлично подходит для обучения.

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

Установка через kubeadm

Шаг 1: Подготовка системы

Сначала обновим систему и установим необходимые пакеты:

sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg

Добавим репозиторий Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Установим Docker:

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

Добавляем текущего пользователя в группу docker:

sudo usermod -aG docker $USER

Выйдите и войдите снова, чтобы изменения вступили в силу.

Шаг 2: Отключение swap

Kubernetes не работает с включённым swap. Отключим его:

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

Шаг 3: Установка kubeadm, kubelet и kubectl

Добавляем репозиторий Kubernetes:

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

Устанавливаем компоненты:

sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Шаг 4: Инициализация кластера

Запускаем инициализацию управляющей ноды:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

После завершения команды вы увидите сообщение с командой для подключения рабочих нод (нам она пока не нужна, но сохраните её). Также будет показан токен для добавления новых нод.

Настройка доступа для kubectl:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Шаг 5: Установка сетевого плагина

Без сетевого плагина поды не смогут общаться друг с другом. Установим Flannel — один из самых простых вариантов:

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Шаг 6: Проверка кластера

Дождитесь, пока все поды в пространстве имён kube-system перейдут в состояние Running:

kubectl get pods -n kube-system

Проверим статус нод:

kubectl get nodes

Должна быть одна нода со статусом Ready.

Первые шаги в Kubernetes

Теперь, когда кластер запущен, давайте развёрнем наше первое приложение.

Развёртывание NGINX

Создадим простой деплоймент с NGINX:

kubectl create deployment nginx --image=nginx

Проверим, что под запущен:

kubectl get pods

Создадим сервис для доступа к NGINX извне:

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

Проверим созданный сервис:

kubectl get svc

Теперь можно получить доступ к NGINX, используя IP-адрес управляющей ноды и порт из поля NodePort.

Масштабирование приложения

Увеличим количество подов NGINX до трёх:

kubectl scale deployment nginx --replicas=3

Проверим результат:

kubectl get pods

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

Просмотр ресурсов

Для просмотра всех ресурсов в кластере используйте:

kubectl get all

Для получения более подробной информации о конкретном ресурсе:

kubectl describe deployment nginx

Логи подов

Для просмотра логов конкретного пода:

kubectl logs <имя_пода>

Для просмотра логов в реальном времени:

kubectl logs -f <имя_пода>

Вход в под

Для интерактивного доступа внутрь пода:

kubectl exec -it <имя_пода> -- /bin/bash

Мониторинг кластера

Для базового мониторинга можно установить метрический сервер:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

После установки метрического сервера можно посмотреть использование ресурсов подами:

kubectl top pods

Более продвинутый вариант — установка Prometheus с Grafana, но это уже отдельная большая тема.

Заключение

Запуск Kubernetes дома — это отличный способ получить практический опыт работы с этой системой, не тратя деньги на облачные сервисы. Конечно, этот гид охватывает только основы, но он даёт прочную базу для дальнейшего изучения.

Следующие шаги могут включать:

  • Добавление рабочих нод для создания настоящего кластера
  • Изучение контроллеров входа для доступа к приложениям
  • Работа с PersistentVolume для сохранения данных
  • Использование операторов Helm для управления приложениями
  • Настройка непрерывной интеграции и развёртывания

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

Поделиться:TelegramX / TwitterVK