Введение / Зачем это нужно
Kubernetes стал отраслевым стандартом оркестрации контейнеров. Понимание его архитектуры и умение управлять кластером открывает прямой путь к DevOps-инженерии и современным практикам CI/CD. В этом руководстве вы развернёте полностью рабочий локальный кластер на Linux, познакомитесь с утилитой kubectl и запустите своё первое приложение. После прохождения гайда вы сможете безопасно экспериментировать с деплоями, сервисами и масштабированием, не затрагивая рабочие среды.
Требования / Подготовка
Перед началом убедитесь, что ваша система соответствует минимальным параметрам:
- Linux-дистрибутив на базе Debian или Ubuntu (22.04/24.04)
- Минимум 2 ГБ ОЗУ и 2 ядра процессора
- 20 ГБ свободного дискового пространства
- Стабильное подключение к интернету
- Права
sudoили прямой root-доступ
Шаг 1: Обновление системы и отключение swap
Kubernetes не поддерживает работу с активным файлом подкачки. Сначала обновите списки пакетов и установите базовые утилиты:
sudo apt update && sudo apt install -y curl apt-transport-https
Отключите swap для текущей сессии и закомментируйте соответствующую строку в /etc/fstab, чтобы отключение сохранялось после перезагрузки:
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
💡 Совет: При использовании виртуальных машин выделяйте под гостевую ОС минимум 4 ГБ ОЗУ. Это предотвратит падение
etcdи обеспечит стабильную работу API-сервера.
Шаг 2: Установка и настройка containerd
Современные версии Kubernetes работают с CRI-совместимыми средами выполнения. Установим containerd и подготовим конфигурацию:
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
Включите поддержку systemd cgroup драйвера. Это рекомендуемый способ управления ресурсами, который гарантирует корректное взаимодействие с планировщиком:
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
Шаг 3: Развёртывание локального кластера
Minikube предоставляет быструю изолированную среду, идеально подходящую для обучения. Скачайте актуальный бинарник и сделайте его исполняемым:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
Инициализируйте кластер, явно указав ресурсы и драйвер запуска:
minikube start --driver=none --cpus=2 --memory=2048
Процесс инициализации займёт 2–4 минуты. Успешное завершение сопровождается сообщением kubectl configured to use "minikube" cluster and "default" namespace.
Шаг 4: Настройка kubectl и проверка статуса
Minikube автоматически настраивает контекст. Проверьте, что kubectl видит кластер и узел перешёл в рабочее состояние:
kubectl cluster-info
kubectl get nodes
В выводе вы должны увидеть строку с именем узла minikube и статусом Ready. Если статус отличается, подождите ещё минуту или проверьте логи компонента через journalctl -u kubelet.
Шаг 5: Запуск тестового приложения
Создайте деплоймент с веб-сервером Nginx и откройте к нему доступ через Service типа NodePort:
kubectl create deployment nginx-test --image=nginx:stable
kubectl expose deployment nginx-test --type=NodePort --port=80
Получите внешний URL для прямого доступа к приложению:
minikube service nginx-test --url
Откройте полученную ссылку в браузере или выполните curl <URL> в терминале. Вы увидите стандартную приветственную страницу Nginx.
Проверка результата
Убедитесь, что все компоненты работают штатно, выполнив комплексную диагностику:
kubectl get pods,svc,deployments
kubectl get events --sort-by='.lastTimestamp'
Здоровый кластер покажет статус Running для пода, NodePort для сервиса и отсутствие критических событий в последних строках вывода. Попробуйте масштабировать деплоймент командой kubectl scale deployment nginx-test --replicas=3 и наблюдайте, как оркестратор автоматически создаёт новые контейнеры.
Возможные проблемы
- Ошибка
ErrImagePullилиImagePullBackOff: Проверьте подключение к интернету и корректность имени образа. Если используете приватный реестр, настройтеimagePullSecretsили выполнитеminikube image pull <image>перед деплоем. - Узел в статусе
NotReady: Чаще всего проблема в драйвере сети или оставшемся активным swap. Выполнитеsudo cat /proc/swaps. Если вы видите файлы подкачки, отключите их повторно и перезапуститеkubeletчерезsudo systemctl restart kubelet. - Порты заняты: Minikube требует свободных портов 8443, 10250 и ряда других. Используйте
ss -tulnp | grep -E '8443|10250'для поиска конфликтов и остановите мешающий сервис перед повторным запуском.