Поддержите нашу команду в рейтинге работодателей на hh.ru
Вход/ Регистрация

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

Александр Бархатов
Александр Бархатов
Технический писатель
16 февраля 2024 г., обновлено 14 октября 2026
12012
11 минут чтения

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

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

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

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

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

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

  • Два сервера с установленной операционной системой 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

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

    
free -h

Image1

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

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

    
swapon -s

Image16

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

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

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

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

    
swapoff -a

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

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

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

    
nano /etc/fstab

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

Image5

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

    
reboot

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

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

    
cat <<EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF

Image4

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

    
modprobe overlay modprobe br_netfilter

Image23

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

    
lsmod | egrep "br_netfilter|overlay"

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

Image14

6) Так как большинство сетевых плагинов (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

Image18

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

    
sysctl --system

Image2

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

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

    
systemctl stop ufw && systemctl disable ufw

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

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

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

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

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

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

    
curl -fsSL https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.32/deb/Release.key |  gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg

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

    
echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.32/deb/ /" | tee /etc/apt/sources.list.d/cri-o.list

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

    
apt update && apt -y install cri-o

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

    
systemctl start crio && systemctl enable crio

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

    
systemctl status crio

Image31

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

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

Установка Kubernetes

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

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

    
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

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

    
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

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

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

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

    
systemctl enable --now kubelet

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

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

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

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;

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

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

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

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

Image21

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

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

    
kubectl get nodes

Image20

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

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

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

    
kubectl get nodes

Image22

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

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

Image15

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

    
kubectl get nodes

Image30

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

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

    
kubectl get po -A

Image27

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

Проверим работоспособность кластера путем запуска веб-сервера 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

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

    
systempropertiesadvanced

Image28

Окно «Выполнить» в интерфейсе ОС Windows

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

Image3

Окно «Свойства системы» в интерфейсе ОС Windows

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

Image13

Настройка переменных среды пользователя в интерфейсе ОС Windows

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

Image25

Настройка переменных среды пользователя в интерфейсе ОС Windows

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

Image8

Настройка переменных среды пользователя в интерфейсе ОС Windows

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

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

    
set KUBECONFIG=D:\admin.conf

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

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

    
setx KUBECONFIG “D:\admin.conf”

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

    
kubectl get nodes

Image29

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

11) Далее создаем файл 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 необходимо соблюдать отступы строк, иначе файл станет невалидным.

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

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

    
kubectl apply -f nginx_deployment.yaml

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

    
kubectl get po -n default

Image26

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

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

    
kubectl describe pod nginx-deployment-8d94c585f-n8nzs

Image7

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

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

    
kubectl port-forward deployment/nginx-deployment 8080:80

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

Image9

Приветственная страница Nginx в браузере

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

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

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

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

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

Image10

Подключение к кластеру через Lens

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

Image17

Выбор файла конфигурации кластера в интерфейсе ОС Windows

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

Image24

Подключение к кластеру через Lens

Заключение

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

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

16 февраля 2024 г., обновлено 14 октября 2026
12012
11 минут чтения
Средний рейтинг статьи: 4.6
Предыдущая статья
Следующая статья
Михаил Новак
Эту статью проверил  Михаил Новак
Инженер поддержки
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
Пока нет комментариев