Найти в Дзене
WebHOST1.ru

Как установить Kubernetes в Ubuntu 22.04

Kubernetes уже почти десять лет остаётся лидером среди инструментов для управления контейнерами. Проект, созданный компанией Google в 2014 году, быстро стал востребованным и получил поддержку сообщества. Kubernetes обеспечивает полный цикл управления контейнерными приложениями: от загрузки образа из хранилища до полноценного запуска контейнера. В этом материале мы создадим Kubernetes-кластер, состоящий из трёх узлов: одного главного узла (master) и двух рабочих узлов (worker). Прежде чем приступить к установке Kubernetes, необходимо выполнить ряд подготовительных действий: Подготовить три сервера или виртуальные машины с операционной системой Ubuntu 22.04. На каждом сервере должно быть не менее 2 ГБ оперативной памяти и не менее 2 ядер процессора. В противном случае инициализация кластера станет невозможной. Подготовка операционной системы Прежде чем развернуть и настроить кластер, нужно выполнить подготовительные шаги на уровне операционной системы. Все команды из этого раздела нужно

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

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

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

Прежде чем приступить к установке Kubernetes, необходимо выполнить ряд подготовительных действий:

Подготовить три сервера или виртуальные машины с операционной системой Ubuntu 22.04.

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

Подготовка операционной системы Прежде чем развернуть и настроить кластер, нужно выполнить подготовительные шаги на уровне операционной системы. Все команды из этого раздела нужно выполнить на всех трех серверах от имени пользователя root.

Сначала обновите списки репозиториев, установите все необходимые программные компоненты и обновите уже установленные пакеты операционной системы.

apt update && apt -y upgrade && apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Далее необходимо выключить механизм SWAP

nano /etc/fstab

Обнаружить в тексте строку, в которой есть слово swap.img, и добавить в её начало символ решётки (#).

-2

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

reboot

Теперь нужно установить дополнительные сетевые модули из ядра операционной системы. Это делается в два шага.

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

cat <

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

modprobe overlay modprobe br_netfilter
-3

Чтобы убедиться, что сетевые модули были успешно установлены и запущены, нужно выполнить следующую команду:

lsmod | egrep "br_netfilter|overlay"
-4

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

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

-5

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

sysctl --system

При использовании UFW (Uncomplicated 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 — лёгкий движок, который поддерживает полноценную работу с контейнерами и прост в использовании.

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

Для начала нужно задать переменные, которые понадобятся нам для скачивания нужной версии Crio для конкретной операционной системы. В переменной OS указывается имя и версия используемого дистрибутива, а в переменной CRIO_VERSION — версия CRIO, которую мы будем скачивать.

export OS=xUbuntu_22.04 export CRIO_VERSION=1.25

Пакет crio присутствует в официальных репозиториях от дистрибутива openSUSE. Добавляем данные репозитории в систему:

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"| tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"| tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list

Импортируем GPG-ключи от репозиториев:

curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -
-6

Актуализируем перечни хранилищ и устанавливаем CRIO, а также дополнительные инструменты.

apt update && apt -y install cri-o cri-o-runc cri-tools

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

systemctl start crio && systemctl enable crio
-7

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

systemctl status crio
-8

Если в статусе отображается «Active» или «running», это означает, что CRI-O успешно запущен и функционирует.

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

Переходим к установке Kubernetes.

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

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

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

Актуализируем перечень репозиториев, устанавливаем пакеты kubelet, kubeadm и kubectl, а также применяем к ним операцию hold. Это позволит избежать автоматического обновления этих компонентов при появлении новых версий.

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

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

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

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

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

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

Когда процесс инициализации главной управляющей машины будет завершён (в терминале появится сообщение «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
-9

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