Эта инструкция поможет вам развернуть минимальный кластер Kubernetes (1 мастер-нода, 2 воркер-ноды) с использованием Kubespray. Подходит для начинающих администраторов, знакомых с основами Linux и Ansible.
Для начала создаем одну машину, из шаблона Ubuntu 24.04, на основе которой будет построен кластер.
Выключаем на ВМ своп с помощью команды:
swapoff -a
для того, чтобы swap был выключен после перезагрузки виртуальной машины, внесем изменения в конфиг /etc/fstab, закоментируем строку с swap:
nano /etc/fstab
включаем форвардинг с помощью команды:
grep "net.ipv4.ip_forward" /etc/sysctl.conf || echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
После изменения /etc/sysctl.conf нужно применить настройки командой
sysctl -p
Теперь генерируем SSH ключи без пароля, для работы ansible
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
Публичный ключ вставляем в authorized_keys
cat .ssh/id_rsa.pub >> .ssh/ authorized_keys
Теперь эту машину нужно настроить исходя из требуемых характеристик (hdd/ssd, ram, cpu), и потом расклонировать на нужное количество мастер и воркер нод,
через интерфейс VCloud Director.
После этого на управляющую машине клонируем kubespray.
Устанавливаем venv и pip на машине.
apt update && apt install python3-pip python3-venv -y
переходим в директорию склонированного репозитория и создаем виртуальное окружение для python
cd kubespray
git checkout tags/v2.26.0
python3 -m venv .venv
активируем его
source .venv/bin/activate
устанавливаем зависимости из директории kubespray.
python3 -m pip install -r requirements.txtpip install ruamel.yaml
Теперь скопируем шаблон инвентори для настройки плэйбука
cp -rfp inventory/sample inventory/k8s
Для того, чтобы указать ансибл на каких ВМ мы будем разворачивать кластер, создадим переменную окружения, в которой укажем IP адреса наших нод:
declare -a IPS=(172.19.0.10 172.19.0.20 172.19.0.30)
Теперь запускаем создание конфигурационного файла:
CONFIG_FILE=inventory/k8s/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
Откроем получившийся конфиг для редактирования и изменим согласно нашим требованиям:
nano inventory/k8s/hosts.yaml
В пункте kube_control_plane.hosts: перечислены мастер ноды, в пункте kube_node.hosts: перечислены воркер ноды
Сохраняем конфигурацию ctrl-o ctrl-x
Включим в кластере поддержку helm чартов, для этого отредактируем файл inventory/k8s/group_vars/k8s_cluster/addons.yml:
nano inventory/k8s/group_vars/k8s_cluster/addons.yml
Изменим значение директивы helm_enabled: на true
Добавим в ansible.cfg пользователя, с которого ансибл будет подключаться:
nano ansible.cfg
Подготовка закончена, запускаем плейбук:
ansible-playbook -i inventory/k8s/hosts.yaml cluster.yml
и ждем когда всё развернется. В среднем это может занять до 40 минут.
Если playbook завершится с ошибкой, проверьте логи в терминале. Убедитесь, что SSH-доступ работает, а файлы конфигурации (hosts.yaml, ansible.cfg) корректны. Для подробного вывода используйте:
ansible-playbook -i inventory/k8s/hosts.yaml cluster.yml -vvv
Когда установка будет закончена, можно проверить работу кластера с помощью команды:
kubectl get nodes