Гид по технологиям

Установка NGINX и балансировщик нагрузки в Kubernetes на Ubuntu 18.04

• 5 min read • DevOps • Обновлено 28 Nov 2025
NGINX в Kubernetes на Ubuntu 18.04 — пошагово
NGINX в Kubernetes на Ubuntu 18.04 — пошагово

Схема кластера: мастер и воркер с развернутым NGINX

Kubernetes — это оркестратор контейнеров для автоматического развёртывания и масштабирования. В этом пошаговом руководстве показано, как подготовить два сервера Ubuntu 18.04, установить Docker и Kubernetes, присоединить воркер-узел и развернуть NGINX с NodePort-сервисом для тестирования балансировки нагрузки.

Краткое определение

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

Что вам понадобится

  • Два сервера с Ubuntu 18.04.04 LTS (или совместимая версия).
  • Как минимум 2 ГБ оперативной памяти на каждом сервере.
  • Доступ root или права sudo на обоих серверах.
  • Статические IP-адреса или надёжное DNS/hosts, чтобы узлы видели друг друга.

Важные замечания

Внимание: Kubernetes не работает при включённом swap. Перед установкой обязательно отключите swap и, при необходимости, удалите запись в /etc/fstab.

Примечание: в примерах используется сеть подсети Pod 192.168.0.0/16 и IP мастер-узла 192.168.0.103. Подставьте свои значения при необходимости.

Подготовка серверов — быстрое обновление и отключение swap

Обновите пакеты на обоих серверах:

apt-get update -y  
apt-get upgrade -y

Перезагрузите серверы, чтобы применять обновления. Затем временно отключите swap:

swapoff -a

Чтобы отключить swap постоянно, отредактируйте /etc/fstab и закомментируйте строку swap, затем примените изменения:

nano /etc/fstab

(закомментируйте строку с swap, например добавив # в начале)

mount -a

Настройка разрешения имён (hosts)

Добавьте в /etc/hosts сопоставления IP и имён на каждом сервере, чтобы узлы могли обращаться друг к другу по именам:

nano /etc/hosts

Добавьте строки, например:

192.168.0.103 master
192.168.0.100 slave

Сохраните и закройте файл.

Установка Docker и Kubernetes (kubelet, kubeadm, kubectl)

Установите необходимые пакеты и добавьте GPG-ключ Docker:

apt-get install apt-transport-https ca-certificates curl software-properties-common -y  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

Добавьте репозиторий Docker CE:

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Установите Docker CE:

apt-get update -y  
apt-get install docker-ce -y

Проверьте статус Docker:

systemctl status docker

Если демон запущен — продолжайте. Если есть предупреждения о cgroup или swap, проверьте конфигурацию ядра и параметры контейнера.

Добавьте репозиторий Kubernetes и установите пакеты kubelet, kubeadm, kubectl:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -  
echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | tee /etc/apt/sources.list.d/kubernetes.list

apt-get update -y
apt-get install kubelet kubeadm kubectl -y

После установки можно перейти к настройке мастер-узла.

Инициализация Master-узла

На Master выполните инициализацию кластера, указав свой частный IP и CIDR для Pod-сети:

kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.0.103

После успешной инициализации команда выдаст инструкции по настройке kubectl и пример команды kubeadm join для воркеров. Настройте kubectl для обычного пользователя:

mkdir -p $HOME/.kube  
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  
chown $(id -u):$(id -g) $HOME/.kube/config

Развёртывание сетевого плагина (CNI)

Кластер без CNI не позволит подам общаться между собой. В примере используется Calico (совместимая версия по ссылке в примере):

kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml

Проверьте namespaces и состояние системных подов:

kubectl get namespaces
kubectl get pods -n kube-system

Дождитесь, пока системные поды перейдут в состояние Ready.

Подключение Slave (воркер) к кластеру

На воркере выполните команду, которую kubeadm init показал при инициализации, например:

kubeadm join 192.168.0.103:6443 --token zsyq2w.c676bxzjul3upd7u --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c

На мастере проверьте список узлов:

kubectl get nodes

Ожидаемый пример вывода:

NAME    STATUS   ROLES    AGE   VERSION
master  Ready    master   25m   v1.15.3
slave   Ready             2m    v1.15.3

Если воркер не в Ready, проверьте логи kubelet и состояние CNI.

Развёртывание NGINX и создание сервиса NodePort

Создайте деплоймент NGINX на мастере:

kubectl create deployment nginx --image=nginx

Проверьте деплоймент:

kubectl get deployments

Ожидаемый вывод:

NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           99s

Создайте сервис типа NodePort, чтобы получить доступ к приложению извне через порт узла:

kubectl create service nodeport nginx --tcp=80:80

Посмотрите сервисы и назначенный ClusterIP и порт NodePort:

kubectl get svc

Пример вывода:

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.152.183.1                  443/TCP        15m
nginx        ClusterIP   10.152.183.199                80:32456/TCP   60s

Теперь можно обратиться к приложению по любому узлу кластера на порту NodePort (в примере 32456): http://:32456

Критерии приёмки

  • kubeadm init успешно завершён на мастере.
  • CNI задеплоен и pod’ы kube-system находятся в Ready.
  • Воркеры добавлены и имеют статус Ready.
  • Деплоймент nginx доступен и сервис NodePort возвращает страницу NGINX.

Чек-лист по ролям

  • Администратор инфраструктуры: проверить сетевые правила, IP-адреса, отключение swap и доступ по SSH.
  • DevOps-инженер: установить Docker, kubeadm, настроить kubelet, применить CNI.
  • Разработчик/QA: задеплоить приложение и проверить доступность через NodePort, собрать логи при ошибках.

Альтернативные подходы и CNI

  • Flannel: проще в установке, подходит для базовых сценариев.
  • Calico: продвинутая политика сетевой безопасности и маршрутизация.
  • Weave Net: удобен для простых сетевых конфигураций и шифрования.

Выбор зависит от требований к политике безопасности, фрагментации сети и производительности.

Когда это может не сработать (контрпримеры)

  • Swap включён на узле — kubelet может перейти в ошибку.
  • Неправильная настройка /etc/hosts или межузловые firewall-правила блокируют порты Kubernetes (6443, 2379-2380, 10250, 10251, 10252 и др.).
  • Несовместимые версии Docker и kubelet/kubeadm приводят к проблемам запуска подов.

Мини-методология проверки и устранения проблем

  1. Проверить статус узлов: kubectl get nodes.
  2. Проверить системные поды: kubectl get pods -n kube-system.
  3. Проверить логи kubelet: journalctl -u kubelet -xe.
  4. Проверить, что CNI установлена и её DaemonSet/Pod’ы работают.
  5. При сетевых проблемах проверить iptables/ufw и межсерверные правила.

Быстрый план отката/rollback

  • Если после установки Kubernetes что-то идёт критично не так, можно выполнить на каждом узле:
kubeadm reset -f
systemctl restart docker
  • Очистите /etc/kubernetes и, при необходимости, пересоздайте кластер с другими параметрами.

Безопасность и дополнительные рекомендации

  • Отключайте открытые NodePort в продуктиве; используйте Ingress-контроллеры и LoadBalancer при наличии облачной сети.
  • Настройте RBAC и ограничьте права сервиса, используемого приложением.
  • Регулярно обновляйте версии Kubernetes и Docker, тестируя обновление на стенде прежде, чем применять в продакшн.

Частые проблемы и отладка

  • Pod остаётся в состоянии CrashLoopBackOff: kubectl describe pod и kubectl logs укажут причину.
  • Node в статусе NotReady: проверьте kubelet, сетевой плагин и доступ к API-серверу.
  • Проблемы с DNS в кластере: проверьте CoreDNS/ kube-dns поды и их логи.

Ресурсы и ссылки

Итог

Вы подготовили два сервера Ubuntu, установили Docker и Kubernetes, присоединили воркер к кластеру, развернули Calico как CNI и развернули NGINX с доступом через NodePort. На следующем этапе можно настроить Ingress-контроллер и автоматическое масштабирование для продуктивных нагрузок.

Ключевые команды сохраните в заметке или репозитории конфигураций. Если нужно, помогу адаптировать инструкции под вашу сеть или заменить NodePort на Ingress/LoadBalancer.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро