Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

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

9081
12 минут чтения
Средний рейтинг статьи: 4.5

Инструкция обновлена 29 октября 2025 г.

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

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

В данной статье мы установим Kubernetes-кластер, состоящий из трех нод (узлов), включающий в себя одну мастер-ноду (master) и две рабочие ноды (worker).

Kubernetes

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

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

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

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

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

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

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

1) Обновляем списки репозиториев, производим обновление всех пакетов в ОС, а также устанавливаем необходимые пакеты:

    

2) Далее необходимо выключить механизм SWAP. Для начала проверим, используется ли SWAP у нас в системе. Для этого можно воспользоваться командой free:

    

Image1

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

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

    

Image16

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

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

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

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

    

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

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

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

    

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

Image5

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

    

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

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

    

Image4

4) На втором этапе загружаем ранее указанные модули из ядра операционной системы при помощи команд:

    

Image23

5) Проверяем, что сетевые модули были успешно загружены и активированы. Для этого выполним команду:

    

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

Image14

6) Так как большинство сетевых плагинов (CNI) в Kubernetes используют встроенный в ядро Linux файрвол под названием netfilter, а также маршрутизируют трафик через сетевой мост (bridge), нам необходимо активировать соответствующие сетевые параметры, которые отвечают за маршрутизацию трафика через сетевой мост. Для этого выполняем команду:

    

Image18

7) Перезапускаем параметры ядра:

    

Image2

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

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

    

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

Установка CRI-O

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

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

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

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

    

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

    

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

    

4) Запускаем crio и добавляем его в автозагрузку:

    

5) Проверяем статус crio:

    

Image31

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

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

Установка Kubernetes

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

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

    

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

    

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

    

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

    

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

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

    

Image32

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

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

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

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

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

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

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

    

Image21

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

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

    

Image20

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

    

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

    

Image22

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

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

Image15

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

    

Image30

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

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

    

Image27

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

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

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

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

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

    

4) Нажимаем на сочетание клавиш Win + R и вводим:

    

Image28

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

Image3

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

Image13

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

Image25

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

Image8

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

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

    

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

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

    

10) Проверим подключение к кластеру:

    

Image29

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

11) Далее создаем файл nginx_deployment.yaml со следующим содержимым:

    

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

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

11) Создаем наш deployment (в котором описаны настройки нашего приложения) при помощи команды:

    

12) Проверяем статус созданного deployment:

    

Image26

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

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

    

Image7

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

14) Проверим доступность Nginx при помощи механизма port-forward:

    

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

Image9

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

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

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

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

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

Image10

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

Image17

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

Image24

Заключение

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

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

9081
12 минут чтения
Средний рейтинг статьи: 4.5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server