Как настроить кластер Kubernetes на нескольких VPS для запуска масштабируемых приложений

Как настроить кластер Kubernetes на нескольких VPS для запуска масштабируемых приложений

Хотите управлять своими микросервисами как профи? Рассказали, как быстро собрать полноценный Kubernetes-кластер на нескольких VPS и запустить в нём приложения.

Kubernetes логотип

Когда проект только запускает первые сервисы, часто хватает одной виртуальной машины и пары команд, чтобы всё работало. Контейнеры запускаются, пользователи довольны, инфраструктура понятна. Но рост проекта меняет всё. Появляются новые сервисы, микросервисы, базы данных, нагрузка растёт, и один VPS перестаёт справляться. Возникает необходимость быстро наращивать мощности, распределять приложения по нескольким серверам и управлять всем этим централизованно. В этот момент на сцену выходит Kubernetes.

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

Аренда VPS/VDS от 219 руб/месяц

Преимущества VPS в AdminVPS:

✓ Бесплатное администрирование

✓ Только быстрые NVMe-диски

✓ Защита от DDoS-атак

✓ Быстрая техподдержка

Аренда VPS/VDS виртуального сервера от AdminVPS — это прозрачная и честная услуга с доступной ценой

Что такое Kubernetes и зачем он нужен

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

Kubernetes — инструмент для автоматизации запуска, работы и расширения контейнерных приложений в распределённой инфраструктуре. Он создаёт единое поле управления для десятков, сотен или даже тысяч контейнеров на разных серверах, превращая их в единую управляемую систему. Всё становится похоже на суперкомпьютер, где узлы объединены в общую инфраструктуру.

Возьмём практическую ситуацию. У интернет-магазина началась сезонная распродажа, и трафик вырос в несколько раз. Без Kubernetes команде пришлось бы вручную добавлять мощности, запускать дополнительные сервисы, перенастраивать балансировщики. С Kubernetes система сама запускает новые контейнеры, если нагрузка растёт, и отключает их, когда всплеск трафика заканчивается.

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

В итоге Kubernetes превращает сложную инфраструктуру из множества разбросанных серверов в управляемую систему, где процессы выполняются чётко и без сбоев, даже если нагрузка меняется каждую минуту.

Подготовка VPS для кластера

Прежде чем создавать кластер Kubernetes, нужно подготовить сами серверы, которые станут его основой. Обычно берут несколько VPS с предустановленной Linux-системой, чаще всего с Ubuntu 20.04 LTS. Один сервер выделяется под управляющий узел, остальные под рабочие.

Популярным выбором для развёртывания Kubernetes остаются VPS от AdminVPS. Такой вариант позволяет быстро запустить нужное количество узлов с подходящими характеристиками.

Подготовка начинается с обновления системы. Это минимизирует возможные конфликты версий и зависимостей. На каждом сервере выполняют стандартную команду:

sudo apt update && sudo apt upgrade -y

Kubernetes не работает с включённым swap, поэтому его отключают. Сначала временно:

sudo swapoff -a

А затем комментируют строку в файле /etc/fstab, чтобы swap не включился после перезагрузки:

sudo sed -i '/ swap / s/^/#/' /etc/fstab

Далее необходимо включить сетевые модули ядра, которые позволяют Kubernetes корректно передавать трафик между контейнерами:

sudo modprobe overlay
sudo modprobe br_netfilter

И задать параметры ядра, добавив их в файл /etc/sysctl.d/kubernetes.conf:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

После этого изменения применяют:

sudo sysctl --system

Только после этих шагов можно переходить к установке Kubernetes и формированию кластера.

Установка Kubernetes с помощью kubeadm

Когда серверы подготовлены, можно переходить к установке Kubernetes. Самый удобный и универсальный способ — использовать утилиту kubeadm. Она упрощает процесс и помогает быстро развернуть кластер.

На каждом сервере сначала устанавливают контейнерный runtime. В большинстве случаев это Docker. На Ubuntu достаточно выполнить:

sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker

Далее добавляют официальный репозиторий Kubernetes и устанавливают его компоненты. Это делается на всех узлах кластера:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb http://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

Команды kubelet, kubeadm и kubectl лучше сразу заблокировать от случайных обновлений:

sudo apt-mark hold kubelet kubeadm kubectl

Инициализация управляющего узла

Когда все компоненты установлены, первым запускается управляющий узел — он станет ядром будущего кластера Kubernetes. Этот сервер отвечает за планирование контейнеров, контроль состояния узлов, распределение ресурсов и другие ключевые задачи. Без управляющего узла кластер существовать не может.

На управляющем сервере выполняют команду инициализации кластера. Обычно её выполняют с указанием диапазона IP-адресов для сети подов. Для небольших кластеров на VPS часто используют CIDR 10.244.0.0/16, который совместим с популярным сетевым плагином Flannel:

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

Далее устанавливается сетевой плагин, который отвечает за взаимодействие между контейнерами на разных серверах. Один из самых часто используемых вариантов — Flannel:

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

После настройки сети кластер можно подключать к рабочим серверам.

Присоединение рабочих узлов

Когда управляющий узел готов, настал момент собрать остальные серверы в единый кластер. Рабочие узлы выполняют основную нагрузку — на них запускаются контейнеры с приложениями.

Сам управляющий узел после инициализации выдаёт специальную команду, которая используется для подключения рабочих серверов. Её можно получить в любой момент, выполнив на управляющем сервере:

kubeadm token create --print-join-command

Эта команда выглядит примерно так:

kubeadm join 192.168.0.10:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:1234567890abcdef...

Внимание! IP-адрес, токен и хэш будут уникальными для вашего кластера. Они подставляются автоматически после выполнения команды. Её копируют и выполняют на каждом рабочем сервере. После выполнения узел автоматически присоединится к кластеру и станет доступен для размещения контейнеров.

Когда все рабочие узлы успешно подключены, можно проверить их статус с управляющего сервера командой:

kubectl get nodes

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

Проверка состояния кластера

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

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

kubectl get nodes

Выводится список всех серверов, подключённых к кластеру. У каждого должно стоять состояние Ready. Если статус другой, например, NotReady, это сигнал о проблемах с сетью, настройками kubelet или подкачкой (swap), которая не была отключена.

Проверка состояния кластера — это обязательный шаг перед тем, как приступить к развёртыванию реальных приложений. Только после этого можно быть уверенным, что кластер стабильно функционирует и готов к работе.

Развёртывание приложений в кластере

Когда кластер готов и все узлы находятся в статусе Ready, можно переходить к самой важной части — запуску приложений. Kubernetes использует манифесты, описанные в формате YAML, чтобы задать параметры запуска контейнеров: образ, количество реплик, используемые порты и другие настройки.

Для примера можно создать простое приложение на основе веб-сервера Nginx. На управляющем узле создают файл nginx-deployment.yaml с описанием будущего развёртывания:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Для тестового запуска можно оставить значения как есть. Для использования собственного образа достаточно изменить параметры image и name. Здесь Kubernetes поднимает три контейнера Nginx и перезапускает их при сбое без участия администратора.

Примените манифест и разверните приложение в кластере командой:

kubectl apply -f nginx-deployment.yaml

После запуска приложения тестируют, все ли поды развернулись:

kubectl get pods

При правильной настройке в списке отобразятся три работающих контейнера.

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

Итоги

Создание собственного Kubernetes-кластера на VPS — это переход от ручного управления к системному подходу, когда приложения запускаются, перезапускаются и масштабируются автоматически. Такой кластер даёт разработчикам возможность управлять инфраструктурой чётко, по заранее заданным сценариям, без хаоса и спешки.

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

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

VPN на VPS-сервере

Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях