Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Предварительные требования
Для установки кластера Kubernetes необходимо следующее:
- Два сервера с установленной операционной системой Ubuntu 22.04 или Ubuntu 24.04. На каждом сервере должно быть минимум 2 ГБ оперативной памяти и минимум 2 ядра процессора. Если не учесть данное требование, то инициализировать кластер не получится.
Два сервера с установленной операционной системой Ubuntu 22.04 или Ubuntu 24.04. На каждом сервере должно быть минимум 2 ГБ оперативной памяти и минимум 2 ядра процессора. Если не учесть данное требование, то инициализировать кластер не получится.
Настройка операционной системы
Перед установкой и инициализацией кластера необходимо подготовить и настроить некоторые параметры на уровне операционной системы.
Команды, которые будут использоваться в данном разделе, необходимо выполнять на обоих серверах и от имени пользователя root или пользователя с правами sudo.
- Обновляем списки репозиториев, производим обновление всех пакетов в ОС, а также устанавливаем необходимые пакеты:
apt update && apt -y upgrade && apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common- Далее необходимо выключить механизм 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:
- Следующим шагом необходимо загрузить дополнительные сетевые модули из ядра операционной системы. Делается это в два этапа.
На первом этапе создаем конфигурационный файл с именем k8s.conf и прописываем в нем те сетевые модули, которые нам необходимы: overlay и br_netfilter. Команда будет следующей:
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF- На втором этапе загружаем ранее указанные модули из ядра операционной системы при помощи команд:
modprobe overlay
modprobe br_netfilter- Проверяем, что сетевые модули были успешно загружены и активированы. Для этого выполним команду:
lsmod | egrep "br_netfilter|overlay"Если напротив значений overlay и br_netfilter во втором столбце присутствует цифра 0, то модули успешно активированы.
- Так как большинство сетевых плагинов (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-
Перезапускаем параметры ядра:
-
При использовании брандмауэра 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 и прост в использовании.
Как и в предыдущем разделе, все команды, используемые ниже, необходимо выполнять на обоих серверах.
-
Добавляем официальный репозиторий CRI-O. Сначала скачиваем GPG-ключ от репозитория и устанавливаем его:
-
Далее прописываем адрес репозитория CRI-O:
-
Обновляем индекс репозиториев и устанавливаем пакет
cri-o:
apt update && apt -y install cri-o- Запускаем
crioи добавляем его в автозагрузку:
systemctl start crio && systemctl enable crio- Проверяем статус
crio:
Если в статусе отображается Active (running), то crio успешно запущен и работает.
На этом установка CRI-O успешно завершена.
Переходим к установке Kubernetes. Подключение репозитория и установку пакетов Kubernetes необходимо выполнять на обоих серверах.
-
Добавляем GPG-ключ от репозитория Kubernetes:
-
Далее подключаем официальный репозиторий Kubernetes:
-
Обновляем списки репозиториев, устанавливаем пакеты
kubelet,kubeadm,kubectl, а также делаем для них операциюhold— таким образом при появлении новых версий данных компонентов они не будут обновляться:
apt update && apt -y install kubelet kubeadm kubectl && apt-mark hold kubelet kubeadm kubectlДополнительно добавляем сервис kubelet в автозагрузку:
systemctl enable --now kubelet- Инициализируем мастер-ноду а также выделяем подсеть, адреса которой будут назначаться подам в кластере.
Эту команду выполняем только на одном сервере, который предназначен именно для мастер-ноды.
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; далее происходит первичная настройка, включающая в себя создание сертификатов безопасности, создание конфигурационных файлов и запуск подов.
- После того как процесс инициализации мастер-ноды будет завершен (в терминале отобразится надпись «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) — там будет сгенерирована команда, предназначенная для присоединения рабочих нод. Сохраните эту команду отдельно, мы будем использовать ее далее.
- Далее проверим статус кластера при помощи команды:
Как можно увидеть на скриншоте выше, мастер-нода находится в статусе NotReady. Это возникает из-за того, что мы не установили CNI-плагин, который используется для организации сетевого взаимодействия. Ранее на этапе инициализации кластера мы выделили подсеть 10.244.0.0/16 для плагина flannel. Установим его при помощи команды:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.ymlПроверим статус кластера еще раз:
Статус поменялся на Ready.
-
На втором сервере, который будет выступать в роли рабочей ноды, выполняем команду
kubeadm join. -
После того как рабочая нода была успешно присоединена, возвращаемся на мастер-ноду и выводим список всех нод кластера при помощи команды:
Как можно увидеть на скриншоте выше, наш кластер состоит из двух нод: одной мастер-ноды и одной рабочей ноды.
- Также выведем список всех подов в кластере, используя команду:
Проверка работоспособности кластера
Проверим работоспособность кластера путем запуска веб-сервера Nginx.
-
Рассмотрим, как сделать это локально — при помощи командной строки и графического клиента Lens. Для начала нам нужно получить файл
config, который содержит всю необходимую информацию для подключения и аутентификации. По умолчанию файл находится в/etc/kubernetes/admin.conf. Копируем данный файл себе на компьютер. Для этого можно использовать стороннее программное обеспечение, например MobaXterm, Termius, PSFTP и т.д. -
Далее нам необходимо установить утилиту kubectl. Поддерживаются все основные операционные системы, включая Windows, macOS и Linux.
-
На примере Windows произведем подключение к кластеру Kubernetes. Можно сразу скачать исполняемый файл
kubectl. Для этого в командной строке (cmd) выполняем команду:
curl -LO https://dl.k8s.io/release/v1.34.0/bin/windows/amd64/kubectl.exe-
Нажимаем на сочетание клавиш Win + R и вводим:
-
В появившемся меню нажимаем на кнопку «Переменные среды»:
-
В разделе «Переменные среды пользователя» выбираем «Path» и нажимаем на кнопку «Изменить»:
-
Нажимаем на кнопку «Создать»:
-
Прописываем полный путь до исполняемого файла
kubectl.exe:
Для сохранения изменений нажимаем на кнопку OK.
- Возвращаемся в командную строку. Задаем временную переменную с именем
KUBECONFIG, которая будет действительна на время текущей сессии. В переменной пропишем полный путь до файлаadmin.conf:
set KUBECONFIG=D:\admin.confВ данном примере файл находится на диске D.
Если переменная нужна на постоянной основе, то команда будет следующей:
setx KUBECONFIG “D:\admin.conf”- Проверим подключение к кластеру:
Если подключение прошло успешно, то команда выведет список нод кластера.
- Далее создаем файл
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 необходимо соблюдать отступы строк, иначе файл станет невалидным.
Сохраняем изменения и выходим из файла.
- Создаем наш deployment (в котором описаны настройки нашего приложения) при помощи команды:
kubectl apply -f nginx_deployment.yaml- Проверяем статус созданного deployment:
kubectl get po -n defaultТак как мы ранее задали две реплики приложения (параметр replicas: 2), то у нас запущено два пода с приложением.
- Далее необходимо проверить, может ли Nginx отвечать на запросы. Для начала необходимо получить IP-адрес пода. Для этого воспользуемся командой
kubectl describe, передав в качестве параметра имя одного из запущенных подов:
kubectl describe pod nginx-deployment-8d94c585f-n8nzsIP-адрес всегда отображается в параметре IP. В нашем примере — 10.244.1.3.
- Проверим доступность Nginx при помощи механизма
port-forward:
kubectl port-forward deployment/nginx-deployment 8080:80Далее открываем браузер по адресу localhost:8080.
Мы успешно получили ответ от Nginx.
Чтобы получить доступ к кластеру Kubernetes через Lens, после установки необходимо:
-
Запустить программу и в главном окне раскрыть параметр «KUBERNETES CLUSTER».
-
Нажать правой кнопкой мыши по «Local Kubeconfigs».
-
В выпадающем меню выбрать «Add Kubeconfigs» → «From Filesystem»:
Запустить программу и в главном окне раскрыть параметр «KUBERNETES CLUSTER».
Нажать правой кнопкой мыши по «Local Kubeconfigs».
В выпадающем меню выбрать «Add Kubeconfigs» → «From Filesystem»:
- Перейти в директорию, где находится конфиг кластера, и нажать на кнопку «Sync»:
Перейти в директорию, где находится конфиг кластера, и нажать на кнопку «Sync»:
При успешном подключении кластер отобразит свои объекты:
В этом материале мы рассмотрели установку одного из самых популярных оркестраторов для управления и автоматизации контейнерных приложений под названием Kubernetes.
Чтобы не тратить время на ручную установку и настройку Kubernetes , можно выбрать готовое облачное решение, которое автоматически разворачивает кластер Kubernetes и выполняет все необходимые настройки, включая обновление кластера, его резервное копирование и балансировку трафика.****
Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.