<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Managed Kubernetes — разверните готовый кластер за 5 минут →
Вход / Регистрация

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

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

Инструкция обновлена 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

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

Image3

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

Image13

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

Image25

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

Image8

Для сохранения изменений нажимаем на кнопку 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.

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

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

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

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

Image10

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

Image17

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

Image24

Заключение

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

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

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