Введение / Зачем это нужно
Установка Kubernetes на Linux позволяет вам создать мощную среду для оркестрации контейнеров. После завершения этого руководства вы сможете развернуть работоспособный кластер Kubernetes, добавлять рабочие узлы и проверять его работоспособность.
Требования / Подготовка
- Операционные системы: Ubuntu 22.04 LTS, Ubuntu 20.04 LTS, Debian 11 Bullseye, CentOS Stream 9 (64-битные версии).
- Аппаратные ресурсы: не менее 2 CPU, 4 GB RAM, 10 GB свободного места на разделе
/. - Сеть: статический IP на каждом хосте, отключенный брандмауэр (
ufw disable/iptables -F), включенное IPv4-переадресация (sysctl net.ipv4.ip_forward=1). - Docker (для установок с помощью kubeadm) — последняя стабильная версия.
- Права root / sudo для выполнения команд.
💡 Совет: Убедитесь, что у вас есть SSH-доступ для управления удалёнными хостами.
Пошаговая инструкция
Шаг 1: Подготовка системы
Отключите подкачку, удалите её из fstab, загрузите необходимые ядреные модули и настройте sysctl параметры.
# Выключение подкачки
sudo swapoff -a
# Удаление записи подкачки из fstab (если есть)
sudo sed -i '/swap/d' /etc/fstab
# Загрузка модулей
sudo modprobe br_netfilter
# Создание файлов модулей
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# Настройка sysctl для поддержки bridge и IP-форвардинга
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
Шаг 2: Установка компонентов Kubernetes
Добавьте официальный репозиторий Kubernetes и установите основные утилиты (kubelet, kubeadm, kubectl). Пример для Ubuntu/Debian:
# Обновление пакетов и установка curl
sudo apt-get update
sudo apt-get install -y curl
# Добавление ключа репозитория
curl -fsSL https://pkgs.k8s.io/repositories.releases.k8s.io/deb/release.key | sudo gpg --dearmor -o /etc/apt/keyrings/k8s-apt-keyring.gpg
# Добавление репозитория
echo 'deb [signed-by=/etc/apt/keyrings/k8s-apt-keyring.gpg] https://pkgs.k8s.io/repositories.releases.k8s.io/deb/ /' | sudo tee /etc/apt/sources.list.d/k8s.list
# Установка компонентов
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo systemctl enable --now kubelet
Для CentOS/RHEL используйте yum/yum-utils. После установки убедитесь, что версии соответствуют выбранной (например, v1.28.x).
Шаг 3: Инициализация master-узла
Инициализируйте master-узел с помощью kubeadm init, сохраните команду для подключения worker-узлов и настройте kubectl для текущего пользователя.
# Инициализация master-узла (замените CIDR при необходимости)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 > kubeadm-init.log
# Сохранение join-команды
sudo kubeadm token create --print-join-command > /tmp/join-command.sh
chmod +x /tmp/join-command.sh
# Копирование конфигурации admin.conf в домашнюю директорию
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Разверните сетевую политику (Calico — пример):
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26/manifests/calico.yaml
Шаг 4: Подготовка worker-узлов
На каждом дополнительном узле выполните команду, сохранённую в /tmp/join-command.sh.
# На worker-узле выполните следующее:
sudo bash /tmp/join-command.sh
После успешного подключения проверьте ноды:
kubectl get nodes
Ожидаемый результат: оба узла с состоянием Ready.
Шаг 5: Проверка работоспособности
Убедитесь, что кластер работает, запустите тестовый pod и при желании откройте Kubernetes Dashboard.
# Проверка нод
kubectl get nodes
# Проверка подов во всех неймспейсах
kubectl get pods -A
# Создание простого тестового pod'а
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: hello-pod
spec:
containers:
- name: hello
image: nginx
ports:
- containerPort: 80
EOF
kubectl get pod hello-pod
Для доступа к панели управления:
# Запустите прокси (в отдельном терминале)
kubectl proxy &
# Откройте http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
Проверка результата
- Оба узла отображаются как
Ready. - Поды kube-system (сеть, контроллер менеджер и т.д.) находятся в состоянии
Running. - Тестовый pod
hello-podработает и может быть достигнут по имени.
Если все пункты выполнены, кластер Kubernetes готов к использованию.
Возможные проблемы
| Проблема | Решение |
|---|---|
/etc/modules-load.d/k8s.conf: Нет такого файла или каталога | Убедитесь, что параметры sysctl записаны в файл, перезапустите систему или вручную выполните modprobe overlay и modprobe br_netfilter. |
kubeadm: ошибка: не удалось проверить конфигурацию: 'не удалось загрузить пакеты для требуемого 'kubelet' | Обновите пакеты: sudo apt-get upgrade kubelet kubeadm kubectl (Debian/Ubuntu) или переустановите их. |
kubectl: невозможно связаться с сервером: получено недоступное для подключения | Проверьте, что master-узел запущен (sudo systemctl status kubelet), и что /etc/kubernetes/admin.conf доступен. |
| Calico не устанавливает pod-сеть | Проверьте, что CIDR (--pod-network-cidr) совпадает с конфигурацией Calico, убедитесь, что сетевые интерфейсы не имеют конфликтов IP, и что IP-форвардинг включён. |
⚠️ Важно: После любых изменений в сети или конфигурации перезапустите сервисы (
sudo systemctl restart kubelet), чтобы изменения вступили в силу.