Подготовка системы
Перед установкой Kubernetes нужна чистая, правильно настроенная операционная система. Эта инструкция проведёт вас от пустого диска до готового сервера: установим Debian 12 или Ubuntu Server, настроим SSH с ключами, статический IP и отключим swap.
Запись образа на флешку
Шаг 1. Скачайте образ
Нужен установочный образ одной из двух систем (выберите одну — обе подходят):
- Debian 12 (bookworm) — файл
debian-12.x.x-amd64-netinst.isoс официального сайта debian.org. Небольшой образ, всё остальное докачается при установке. - Ubuntu Server 24.04 LTS — файл
ubuntu-24.04.x-live-server-amd64.isoс сайта ubuntu.com.
Берите 64-битную версию (amd64) — она подходит для любого современного сервера и ПК, даже с процессором Intel (amd64 — историческое название архитектуры x86-64).
Шаг 2. Запишите образ на флешку
Флешка от 4 ГБ. Два удобных инструмента под Windows:
- Rufus — простой вариант: выбираете флешку, выбираете ISO, нажимаете «Старт». Если Rufus спросит режим записи — выбирайте «DD-образ» (для Ubuntu можно и обычный ISO-режим).
- Ventoy — удобнее для экспериментов: один раз устанавливаете Ventoy на флешку, а дальше просто копируете ISO-файлы на неё как обычные файлы. При загрузке Ventoy покажет меню и позволит выбрать, с какого образа стартовать. Удобно держать на одной флешке и Debian, и Ubuntu.
Шаг 3. Загрузитесь с флешки
Вставьте флешку в будущий сервер, включите его и откройте загрузочное меню (обычно клавиши F8, F11, F12 или Esc при старте — зависит от платы). Выберите флешку. Если сервер отказывается грузиться с флешки, проверьте в BIOS/UEFI, что включён режим UEFI и отключён Secure Boot (китайские платы на X99 иногда капризничают с Secure Boot).
Установка системы
Шаг 4. Пройдите установщик
Установщики Debian и Ubuntu Server различаются внешне, но спрашивают одно и то же. Вот рекомендуемые ответы для сервера под кластер:
- Язык установки: английский — на сервере это удобнее: все сообщения об ошибках легко гуглятся. Локаль и раскладку можно оставить русские, но имя хоста и пользователя — только латиницей.
- Имя хоста (hostname): осмысленное и короткое, например
k8s-node1,k8s-master,homeserver. Это имя будет видно в кластере. - Разметка диска: для новичка — автоматическая разметка всего диска (Guided — use entire disk), LVM можно не включать. Отдельный раздел под данные сделаем позже на уровне Kubernetes.
- Пользователь: создайте обычного пользователя, например
ivan. В Debian установщик отдельно спросит пароль root — задайте, но пользоваться будем обычным пользователем с sudo. - ПО при установке: в Debian отметьте только «SSH server» и «standard system utilities», графическое окружение не нужно. В Ubuntu Server SSH-сервер предложат галочкой — включите.
Шаг 5. Перезагрузитесь и войдите
После установки вытащите флешку, сервер перезагрузится, и вы увидите приглашение входа в текстовой консоли. Войдите под созданным пользователем. Дальше вся работа ведётся через SSH с вашего основного компьютера — серверу больше не нужны ни монитор, ни клавиатура.
Первичная настройка
Шаг 6. Обновите систему
Первым делом приводим систему в актуальное состояние. Команды одинаковы для Debian и Ubuntu:
# обновить списки пакетов и сами пакеты
sudo apt update
sudo apt upgrade -y
Если обновилось ядро (в списке был linux-image), перезагрузите сервер:
sudo reboot
Шаг 7. Убедитесь, что sudo работает
В Ubuntu пользователь, созданный при установке, уже входит в группу sudo. В Debian — не всегда. Проверьте:
sudo whoami
# ожидаемый ответ: root
Если sudo ругается, что пользователя нет в sudoers, войдите под root (в Debian: su - с паролем root) и добавьте пользователя в группу:
# выполняется под root; ivan — замените на своё имя пользователя
usermod -aG sudo ivan
Перелогиньтесь, чтобы группа применилась.
Создание пользователя
Если пользователь уже создан при установке — этот раздел можно пропустить. Но полезно знать, как добавить ещё одного, например отдельного для кластера или для члена семьи:
Шаг 8. Создайте пользователя (при необходимости)
# создать пользователя с домашним каталогом и bash
sudo adduser ivan
# дать права sudo
sudo usermod -aG sudo ivan
adduser интерактивно спросит пароль и необязательные данные (их можно пропустить Enter'ом).
SSH-ключи
Ходить на сервер по паролю — и неудобно, и небезопасно. Настроим вход по ключу: у вас на компьютере будет закрытый ключ, а на сервере — открытая часть.
Шаг 9. Создайте ключ на вашем компьютере
На вашем рабочем компьютере (Windows с PowerShell, Linux или macOS — команда одна и та же):
# создать пару ключей ed25519
ssh-keygen -t ed25519 -C "ivan@home"
На все вопросы можно отвечать Enter — ключ сохранится в стандартное место (~/.ssh/id_ed25519, в Windows — C:\Users\Имя\.ssh\id_ed25519). Парольную фразу (passphrase) для домашнего использования можно оставить пустой, хотя с ней безопаснее.
Шаг 10. Скопируйте открытый ключ на сервер
Из Linux/macOS это делается одной командой:
# ivan — пользователь на сервере, 192.168.1.50 — адрес сервера
ssh-copy-id ivan@192.168.1.50
В Windows в PowerShell ssh-copy-id обычно нет, поэтому копируем вручную одной строкой:
# Windows PowerShell: показать открытый ключ и передать его на сервер
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh ivan@192.168.1.50 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
Команда спросит пароль пользователя на сервере (в последний раз!).
Шаг 11. Проверьте вход по ключу
ssh ivan@192.168.1.50
# должно пустить без пароля
/etc/ssh/sshd_config выставить PasswordAuthentication no и перезапустить службу командой sudo systemctl restart ssh.
Статический IP-адрес
Узлы кластера должны жить на постоянных адресах. Есть два способа этого добиться: привязка адреса в настройках роутера (по MAC-адресу, обычно называется «резервирование DHCP») или статическая настройка на самом сервере. Разберём второй путь — он не зависит от роутера.
Сначала узнайте имя сетевого интерфейса и текущий адрес:
ip -4 addr show
# типичные имена интерфейсов: enp3s0, eth0, eno1
ip route | grep default
# покажет адрес роутера (шлюз), например 192.168.1.1
Вариант А: Debian 12 (/etc/network/interfaces)
Шаг 12а. Настройте статический IP в Debian
Откройте файл конфигурации сети:
sudo nano /etc/network/interfaces
Найдите блок вашего интерфейса с dhcp и замените на статический (пример для сети 192.168.1.0/24, сервер получит 192.168.1.50):
# было: allow-hotplug enp3s0 / iface enp3s0 inet dhcp
auto enp3s0
iface enp3s0 inet static
address 192.168.1.50/24
gateway 192.168.1.1
dns-nameservers 192.168.1.1 1.1.1.1
Примените настройки перезапуском сети:
sudo systemctl restart networking
Вариант Б: Ubuntu Server (netplan)
Шаг 12б. Настройте статический IP в Ubuntu
Конфигурация сети в Ubuntu Server живёт в YAML-файлах каталога /etc/netplan/. Посмотрите, какой файл там есть:
ls /etc/netplan/
# например: 00-installer-config.yaml
sudo nano /etc/netplan/00-installer-config.yaml
Приведите его к такому виду (отступы в YAML делаются пробелами, будьте аккуратны):
network:
version: 2
ethernets:
enp3s0:
dhcp4: false
addresses: [192.168.1.50/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [192.168.1.1, 1.1.1.1]
Примените:
sudo netplan apply
Шаг 13. Пропишите hostname в /etc/hosts
Чтобы сервер знал своё имя локально (Kubernetes это любит):
sudo nano /etc/hosts
Должна быть строка с адресом сервера и его именем:
127.0.0.1 localhost
192.168.1.50 k8s-node1
Отключение swap
Kubernetes не работает со включённым файлом подкачки: kubelet при старте проверяет swap и отказывается запускаться. Это осознанное требование — планировщик должен точно знать, сколько реальной памяти есть на узле. Отключаем swap полностью.
Шаг 14. Отключите swap сейчас
# отключить немедленно
sudo swapoff -a
# проверить: строка Swap должна быть с нулями
free -h
Шаг 15. Отключите swap навсегда
Swap прописан в файле /etc/fstab — его строка начнётся снова после перезагрузки. Закомментируйте её:
sudo nano /etc/fstab
Найдите строку, где в третьей колонке стоит swap, и поставьте в её начало символ #:
# было:
# /dev/mapper/debian--vg-swap_1 none swap sw 0 0
# стало (строка закомментирована):
#/dev/mapper/debian--vg-swap_1 none swap sw 0 0
Проверка после перезагрузки (можно выполнить позже):
swapon --show
# пустой вывод — swap отключён
Часовой пояс и синхронизация времени
Точное время на всех узлах — не формальность: TLS-сертификаты кластера имеют сроки действия, etcd чувствительна к расхождению часов, а логи с разным временем на разных узлах отлаживать мучительно.
Шаг 15. Настройте часовой пояс
# список часовых поясов: timedatectl list-timezones | grep Europe
sudo timedatectl set-timezone Europe/Moscow
# проверка
timedatectl
Шаг 16. Включите синхронизацию времени
В Debian 12 и Ubuntu 24.04 служба systemd-timesyncd обычно уже активна. Проверьте:
timedatectl status
# ищем: System clock synchronized: yes
# если нет — включить:
sudo timedatectl set-ntp true
Если сервер за строгим файрволом и NTP наружу закрыт, укажите локальный источник времени (многие роутеры умеют быть NTP-сервером) в /etc/systemd/timesyncd.conf.
Нужные пакеты
Шаг 17. Установите базовый набор
Эти утилиты пригодятся и при установке кластера, и в повседневной работе:
sudo apt install -y curl wget git htop iotop net-tools dnsutils \
apt-transport-https ca-certificates gnupg lsb-release
Что здесь зачем:
curl,wget— скачивание установочных скриптов и манифестов;git— хранить манифесты кластера в репозитории;htop,iotop— смотреть нагрузку на процессор и диски;net-tools,dnsutils— привычныеifconfig,netstat,nslookup,dig;apt-transport-https,ca-certificates,gnupg— нужны для добавления сторонних репозиториев (пригодится в пути kubeadm).
Шаг 18. Включите нужные модули ядра
Контейнерной сети нужны модули overlay и br_netfilter. Включим их и сделаем загружаемыми при старте:
# загрузить модули сейчас
sudo modprobe overlay
sudo modprobe br_netfilter
# прописать в автозагрузку
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
И настроим параметры ядра, необходимые для маршрутизации трафика подов:
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
Шаг 19. Финальная проверка
Убедитесь, что всё готово к установке кластера:
# статический IP на месте?
ip -4 addr show
# интернет доступен?
ping -c 3 debian.org
# swap выключен?
swapon --show
# модули загружены?
lsmod | grep -E "overlay|br_netfilter"
k8s-node2, k8s-node3…) и свой статический IP (192.168.1.51, 192.168.1.52…). Удобно прописать имена всех узлов в /etc/hosts на каждой машине.