Как установить кластер Kubernetes в Ubuntu 22.04 и 24.04

    Команда Simple-Server
    03.06.2026
    12 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Предварительные требования

    Для установки кластера Kubernetes необходимо следующее:

    • Два сервера с установленной операционной системой Ubuntu 22.04 или Ubuntu 24.04. На каждом сервере должно быть минимум 2 ГБ оперативной памяти и минимум 2 ядра процессора. Если не учесть данное требование, то инициализировать кластер не получится.

    Два сервера с установленной операционной системой Ubuntu 22.04 или Ubuntu 24.04. На каждом сервере должно быть минимум 2 ГБ оперативной памяти и минимум 2 ядра процессора. Если не учесть данное требование, то инициализировать кластер не получится.

    Настройка операционной системы

    Перед установкой и инициализацией кластера необходимо подготовить и настроить некоторые параметры на уровне операционной системы.

    Команды, которые будут использоваться в данном разделе, необходимо выполнять на обоих серверах и от имени пользователя root или пользователя с правами sudo.

    1. Обновляем списки репозиториев, производим обновление всех пакетов в ОС, а также устанавливаем необходимые пакеты:
    apt update && apt -y upgrade && apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
    1. Далее необходимо выключить механизм SWAP. Для начала проверим, используется ли SWAP у нас в системе. Для этого можно воспользоваться командой free:

    Как видно на скриншоте выше, SWAP не используется — в строке с именем Swap указаны нулевые значения.

    Также можно воспользоваться командой swapon, которая выводит подробную информацию об используемых разделах SWAP в системе:

    Если в ответ команда ничего не вернула, это говорит о том, что SWAP выключен и не используется.

    Если же SWAP включен, то его необходимо выключить. В дистрибутивах Linux SWAP можно отключить 2 способами:

    • Первый способ — отключить SWAP временно.

    Первый способ — отключить SWAP временно.

    Это означает, что SWAP будет выключен только до первой перезагрузки/выключения сервера. Чтобы выключить SWAP на время работы сервера, в терминале достаточно выполнить команду:

    Данный способ не рекомендуется использовать в связи с тем, что после перезагрузки/включения сервера узлы Kubernetes не смогут запуститься.

    • Второй способ — полное (перманентное) отключение SWAP.

    Второй способ — полное (перманентное) отключение SWAP.

    В таком случае SWAP будет полностью выключен и не будет использоваться и после перезагрузки сервера. Для полного выключения SWAP необходимо открыть на редактирование файл fstab при помощи любого текстового редактора, например, nano:

    Далее найти строку, содержащую значение swap.img, и закомментировать ее, прописав символ решетки (#):

    Сохраняем и выходим из файла. Чтобы изменения были применены, необходимо перезапустить сервер при помощи команды reboot:

    1. Следующим шагом необходимо загрузить дополнительные сетевые модули из ядра операционной системы. Делается это в два этапа.

    На первом этапе создаем конфигурационный файл с именем k8s.conf и прописываем в нем те сетевые модули, которые нам необходимы: overlay и br_netfilter. Команда будет следующей:

    cat <<EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF
    1. На втором этапе загружаем ранее указанные модули из ядра операционной системы при помощи команд:
    modprobe overlay modprobe br_netfilter
    1. Проверяем, что сетевые модули были успешно загружены и активированы. Для этого выполним команду:
    lsmod | egrep "br_netfilter|overlay"

    Если напротив значений overlay и br_netfilter во втором столбце присутствует цифра 0, то модули успешно активированы.

    1. Так как большинство сетевых плагинов (CNI) в Kubernetes используют встроенный в ядро Linux файрвол под названием netfilter, а также маршрутизируют трафик через сетевой мост (bridge), нам необходимо активировать соответствующие сетевые параметры, которые отвечают за маршрутизацию трафика через сетевой мост. Для этого выполняем команду:
    cat <<EOF | 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
    1. Перезапускаем параметры ядра:

    2. При использовании брандмауэра UFW (Uncomplicated Firewall) или любого другого firewall (например, Iptables) необходимо открыть следующие порты: 6443, 2379, 2380, 10250, 10259, 10257.

    Также UFW можно полностью выключить и убрать из автозагрузки:

    systemctl stop ufw && systemctl disable ufw

    На этом настройка операционной системы завершена. В следующих разделах мы перейдем к установке контейнерного движка CRI-O и установке Kubernetes.

    Так как Kubernetes самостоятельно не запускает контейнеры, ему необходим сторонний инструмент для таких задач — контейнерный движок. Движок для контейнеров (он же Container Runtime) предназначен для работы с контейнерами, включая инициализацию контейнеров, их запуск, остановку и т.д.

    Мы будем устанавливать CRI-O — легковесный движок, который специально разработан для Kubernetes и прост в использовании.

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

    1. Добавляем официальный репозиторий CRI-O. Сначала скачиваем GPG-ключ от репозитория и устанавливаем его:

    2. Далее прописываем адрес репозитория CRI-O:

    3. Обновляем индекс репозиториев и устанавливаем пакет cri-o:

    apt update && apt -y install cri-o
    1. Запускаем crio и добавляем его в автозагрузку:
    systemctl start crio && systemctl enable crio
    1. Проверяем статус crio:

    Если в статусе отображается Active (running), то crio успешно запущен и работает.

    На этом установка CRI-O успешно завершена.

    Переходим к установке Kubernetes. Подключение репозитория и установку пакетов Kubernetes необходимо выполнять на обоих серверах.

    1. Добавляем GPG-ключ от репозитория Kubernetes:

    2. Далее подключаем официальный репозиторий Kubernetes:

    3. Обновляем списки репозиториев, устанавливаем пакеты kubelet, kubeadm, kubectl, а также делаем для них операцию hold — таким образом при появлении новых версий данных компонентов они не будут обновляться:

    apt update && apt -y install kubelet kubeadm kubectl && apt-mark hold kubelet kubeadm kubectl

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

    systemctl enable --now kubelet
    1. Инициализируем мастер-ноду а также выделяем подсеть, адреса которой будут назначаться подам в кластере.

    Эту команду выполняем только на одном сервере, который предназначен именно для мастер-ноды.

    kubeadm init --pod-network-cidr=10.244.0.0/16

    Подсеть 10.244.0.0/16 используется для работы flannel — специального плагина, который создает виртуальную сеть, разработанную для работы с контейнерами. flannel мы установим после того, как создадим кластер.

    Процесс инициализации мастер-ноды может занимать от 5 минут и больше, в зависимости от скорости интернет-соединения. Сначала скачиваются образы необходимых компонентов Kubernetes: kube-apiserver, kube-controller-manager, kube-scheduler, kube-proxy, etcd, coredns; далее происходит первичная настройка, включающая в себя создание сертификатов безопасности, создание конфигурационных файлов и запуск подов.

    1. После того как процесс инициализации мастер-ноды будет завершен (в терминале отобразится надпись «Your Kubernetes control-plane has initialized successfully!»), необходимо выполнить шаги, перечисленные в конце вывода, а именно:
    • Создать в домашней директории скрытую папку с именем kube;

    • Скопировать конфигурационный файл, содержащий данные для подключения к кластеру в ранее созданный каталог в домашней директории;

    • Назначить пользователя и группу на созданную директорию.

    Создать в домашней директории скрытую папку с именем kube;

    Скопировать конфигурационный файл, содержащий данные для подключения к кластеру в ранее созданный каталог в домашней директории;

    Назначить пользователя и группу на созданную директорию.

    Сами команды приведены ниже. Также они всегда отображаются в конце вывода при успешной инициализации мастер-ноды:

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

    Обратите внимание на самую последнюю строку в выводе (kubeadm join) — там будет сгенерирована команда, предназначенная для присоединения рабочих нод. Сохраните эту команду отдельно, мы будем использовать ее далее.

    1. Далее проверим статус кластера при помощи команды:

    Как можно увидеть на скриншоте выше, мастер-нода находится в статусе NotReady. Это возникает из-за того, что мы не установили CNI-плагин, который используется для организации сетевого взаимодействия. Ранее на этапе инициализации кластера мы выделили подсеть 10.244.0.0/16 для плагина flannel. Установим его при помощи команды:

    kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

    Проверим статус кластера еще раз:

    Статус поменялся на Ready.

    1. На втором сервере, который будет выступать в роли рабочей ноды, выполняем команду kubeadm join.

    2. После того как рабочая нода была успешно присоединена, возвращаемся на мастер-ноду и выводим список всех нод кластера при помощи команды:

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

    1. Также выведем список всех подов в кластере, используя команду:

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

    Проверим работоспособность кластера путем запуска веб-сервера Nginx.

    1. Рассмотрим, как сделать это локально — при помощи командной строки и графического клиента Lens. Для начала нам нужно получить файл config, который содержит всю необходимую информацию для подключения и аутентификации. По умолчанию файл находится в /etc/kubernetes/admin.conf. Копируем данный файл себе на компьютер. Для этого можно использовать стороннее программное обеспечение, например MobaXterm, Termius, PSFTP и т.д.

    2. Далее нам необходимо установить утилиту kubectl. Поддерживаются все основные операционные системы, включая Windows, macOS и Linux.

    3. На примере Windows произведем подключение к кластеру Kubernetes. Можно сразу скачать исполняемый файл kubectl. Для этого в командной строке (cmd) выполняем команду:

    curl -LO https://dl.k8s.io/release/v1.34.0/bin/windows/amd64/kubectl.exe
    1. Нажимаем на сочетание клавиш Win + R и вводим:

    2. В появившемся меню нажимаем на кнопку «Переменные среды»:

    3. В разделе «Переменные среды пользователя» выбираем «Path» и нажимаем на кнопку «Изменить»:

    4. Нажимаем на кнопку «Создать»:

    5. Прописываем полный путь до исполняемого файла kubectl.exe:

    Для сохранения изменений нажимаем на кнопку OK.

    1. Возвращаемся в командную строку. Задаем временную переменную с именем KUBECONFIG, которая будет действительна на время текущей сессии. В переменной пропишем полный путь до файла admin.conf:
    set KUBECONFIG=D:\admin.conf

    В данном примере файл находится на диске D.

    Если переменная нужна на постоянной основе, то команда будет следующей:

    setx KUBECONFIG “D:\admin.conf”
    1. Проверим подключение к кластеру:

    Если подключение прошло успешно, то команда выведет список нод кластера.

    1. Далее создаем файл nginx_deployment.yaml со следующим содержимым:
    apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.16.1 ports: - containerPort: 80

    Обратите внимание что в языке разметки YAML необходимо соблюдать отступы строк, иначе файл станет невалидным.

    Сохраняем изменения и выходим из файла.

    1. Создаем наш deployment (в котором описаны настройки нашего приложения) при помощи команды:
    kubectl apply -f nginx_deployment.yaml
    1. Проверяем статус созданного deployment:
    kubectl get po -n default

    Так как мы ранее задали две реплики приложения (параметр replicas: 2), то у нас запущено два пода с приложением.

    1. Далее необходимо проверить, может ли Nginx отвечать на запросы. Для начала необходимо получить IP-адрес пода. Для этого воспользуемся командой kubectl describe, передав в качестве параметра имя одного из запущенных подов:
    kubectl describe pod nginx-deployment-8d94c585f-n8nzs

    IP-адрес всегда отображается в параметре IP. В нашем примере — 10.244.1.3.

    1. Проверим доступность Nginx при помощи механизма port-forward:
    kubectl port-forward deployment/nginx-deployment 8080:80

    Далее открываем браузер по адресу localhost:8080.

    Мы успешно получили ответ от Nginx.

    Чтобы получить доступ к кластеру Kubernetes через Lens, после установки необходимо:

    1. Запустить программу и в главном окне раскрыть параметр «KUBERNETES CLUSTER».

    2. Нажать правой кнопкой мыши по «Local Kubeconfigs».

    3. В выпадающем меню выбрать «Add Kubeconfigs» → «From Filesystem»:

    Запустить программу и в главном окне раскрыть параметр «KUBERNETES CLUSTER».

    Нажать правой кнопкой мыши по «Local Kubeconfigs».

    В выпадающем меню выбрать «Add Kubeconfigs» → «From Filesystem»:

    1. Перейти в директорию, где находится конфиг кластера, и нажать на кнопку «Sync»:

    Перейти в директорию, где находится конфиг кластера, и нажать на кнопку «Sync»:

    При успешном подключении кластер отобразит свои объекты:

    В этом материале мы рассмотрели установку одного из самых популярных оркестраторов для управления и автоматизации контейнерных приложений под названием Kubernetes.

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


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны