6.20 Деплоймент Kubernetes на примере мастер-узла на Ubuntu-22

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

Для тестирования и развертывания приложений нам нужен настроенный кластер Kubernetes. В статье мы рассмотрим развертывание кластера на одном сервере (single-node cluster) и на нескольких узлах (multi-node cluster), объясним нюансы установки и настройки, а также покажем, как запустить тестовое приложение.

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

Требования к серверу

Перед началом работы необходимо убедиться, что ваш сервер соответствует минимальным требованиям:

  • ОС: Ubuntu 22.04 или CentOS 8 (Ubuntu предпочтительнее, т.к. у него лучше поддержка Kubernetes);
  • Процессор: 4 ядра и выше;
  • ОЗУ: минимум 8 ГБ (для многонодовых кластеров рекомендуется 16 ГБ и выше);
  • Диск: минимум 50 ГБ свободного места;
  • Сетевое подключение: статический IP и открытые порты (6443, 10250, 10255, 30000-32767 и другие).
  • Kubernetes требует, чтобы swap был отключен, иначе kubelet работать не будет.

Для стабильной работы Kubernetes мы рекомендуем сервера на тарифе не менее Cloud-8. Для

Пошаговая инструкция

Kubernetes использует контейнерный движок Docker для запуска контейнеров.

Совет: у нас существует отдельный, более детальный материал по установке и использованию Docker. Ознакомиться с ним можно по [ссылке](а где).

Установка Docker:

  • Обновляем пакеты и ставим Docker:
sudo apt update && sudo apt install -y docker.io
  • Проверяем версию Docker:
docker --version
  • Добавляем Docker в автозагрузку:
sudo systemctl enable --now docker
  • Добавляем текущего пользователя в группу Docker (чтобы не использовать sudo при запуске контейнеров):
sudo usermod -aG docker $USER
newgrp docker
  • Проверяем работу Docker:
docker run hello-world

Если выводит сообщение о корректной установке — значит работает.

Установка Kubernetes

  • Добавляем репозиторий Kubernetes:
sudo apt update && sudo apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  • Устанавливаем компоненты Kubernetes:
sudo apt update && sudo apt install -y kubelet kubeadm kubectl
  • Добавляем в автозагрузку:
sudo systemctl enable --now kubelet
  • Проверяем версию Kubernetes:
kubectl version --client

Настройка кластера

  • Инициализация кластера (только для мастер-узла):
sudo kubeadm init --pod-network-cidr=192.168.0.0/16

Учтите: параметр --pod-network-cidr указывает диапазон IP-адресов для будущих подов. Разные сетевые плагины (Flannel, Calico и др.) могут требовать разные значения.

После успешной инициализации появится команда для подключения рабочих узлов (kubeadm join). Сохраняем ее.

  • Чтобы работать с кластером, настраиваем kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • Проверяем работоспособность:
kubectl get nodes

Должен появиться мастер-узел (Ready появится после установки сетевого плагина).

Установка сетевого плагина

Чтобы поды могли обмениваться данными, устанавливаем сетевой плагин. Например, Flannel:

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

Через минуту проверяем узлы:

kubectl get nodes

Теперь мастер-узел должен быть в состоянии Ready.

Добавление рабочих узлов

На каждом рабочем узле устанавливаем Docker и Kubernetes, затем выполняем команду kubeadm join, полученную при инициализации мастер-узла:

sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>

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

kubectl get nodes

Развертывание тестового приложения

Создаем файл deployment.yaml:

<span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> apps/v1
<span class="token key atrule">kind</span><span class="token punctuation">:</span> Deployment
<span class="token key atrule">metadata</span><span class="token punctuation">:</span>
  <span class="token key atrule">name</span><span class="token punctuation">:</span> nginx<span class="token punctuation">-</span>deployment
<span class="token key atrule">spec</span><span class="token punctuation">:</span>
  <span class="token key atrule">replicas</span><span class="token punctuation">:</span> <span class="token number">2</span>
  <span class="token key atrule">selector</span><span class="token punctuation">:</span>
    <span class="token key atrule">matchLabels</span><span class="token punctuation">:</span>
      <span class="token key atrule">app</span><span class="token punctuation">:</span> nginx
  <span class="token key atrule">template</span><span class="token punctuation">:</span>
    <span class="token key atrule">metadata</span><span class="token punctuation">:</span>
      <span class="token key atrule">labels</span><span class="token punctuation">:</span>
        <span class="token key atrule">app</span><span class="token punctuation">:</span> nginx
    <span class="token key atrule">spec</span><span class="token punctuation">:</span>
      <span class="token key atrule">containers</span><span class="token punctuation">:</span>
      <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> nginx
        <span class="token key atrule">image</span><span class="token punctuation">:</span> nginx<span class="token punctuation">:</span>latest
        <span class="token key atrule">ports</span><span class="token punctuation">:</span>
        <span class="token punctuation">-</span> <span class="token key atrule">containerPort</span><span class="token punctuation">:</span> <span class="token number">80</span>

Применяем манифест:

kubectl apply -f deployment.yaml

Проверяем:

kubectl get pods

Если видим работающие поды, значит, все настроено правильно.

Заключение

Теперь у вас есть готовый сервер для тестирования и развертывания приложений на Kubernetes. Мы рассмотрели установку, настройку и запуск тестового приложения.

Дальнейшие шаги могут включать:

  • Настроить балансировщик нагрузки (ingress-nginx).
  • Добавить мониторинг (Prometheus, Grafana).
  • Изучить управление конфигурациями (ConfigMaps, Secrets).
  • Настроить CI/CD для автоматического развертывания.