Найти тему
IT Gosha

Домашний сервер на одноплатном компьютере #2. Настройка личного Kubernetes кластера на четырех Raspberry Pi 4 с помощью k3s

Оглавление

Всем привет и хорошего настроения! В этой статье я расскажу как я исполнил свою давнюю мечту и настроил свой первый Kubernetes кластер в домашних условиях, объединив четыре Raspberry Pi 4.

С чего все началось

Как-то собрались программисты из Google и придумали приблуду для автоматизации развертывания, масштабирования и координации между контейнерами в условиях кластера. В качестве основного языка программирования выбрали свой язык Go. Разработка шла полным ходом, уже были колоссальные наработки, которые могли бы отодвинуть на задний план другие крупные компании, специализирующиеся на облачных технологиях, однако в 2014 году они решили сделать свой проект достоянием общественности, выложив исходный код в открытый доступ.

21 июля 2015 года был выпущен Kubernetes 1.0.

В 2017 году, я в первый раз прочитал про Kubernetes и нифига не понял.

-2

В 2018 я купил свой первый одноплатный компьютер Raspberry Pi 3 model B+ и в том же году увидел как Jeff Geerling поделился своим Kubernetes кластером из четырех таких же Малинок. И тогда же я для себя решил, что рано или поздно сделаю что-то похожее самостоятельно.

Так вот, суть этой статьи в том, чтобы наконец-то расставить все точки на i и понять, что Kubernetes – это не только интересно, но и не так сложно, как может показаться на первый взгляд.

Подготовительный этап

В своей предыдущей статье я показал свою Raspberry Pi 4 2020 года и рассмотрел её первоначальную настройку. Но для реализации моего плана этого было мало.

Домашний сервер на одноплатном компьютере (Часть 1)
IT Gosha28 августа 2022

Поэтому я заказал ещё три такие же одноплатных компьютера у того же продавца на знаменитой китайской торговой площадке. И вот 29 сентября 2022 года я наконец-то получил долгожданную посылку, а точнее её первую часть.

-3

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

-4

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

Настройка k3s

Так как я использую Raspberry Pi исключительно как сервер и подключаюсь к ней по протоколу удаленного доступа SSH, порядок настройки k3s выглядел следующим образом:

  1. Настройка SSH, беспроводной сети и сетевого имени при записи 64-bit образа на SD-карту.
  2. Активация cgroup как модуля ядра.
  3. Настройка межсетевого экрана iptables.
  4. Назначение статического IP адреса.
  5. Перезагрузка.
  6. Установка k3s на мастер-ноду.
  7. Установка k3s на рабочие ноды.

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

Активация cgroup как модуля ядра

cgroup – это механизм, функционирующий как расширение для ядра Linux, необходимый для реализации контейнеризации.

Для активации cgroup необходимо добавить два параметра в конец фала /boot/cmdline.txt

sudo nano /boot/cmdline.txt

-6

В конец строки (не на новую!) добавляем:

cgroup_memory=1 cgroup_enable=memory

-7

Сохраняем и выходим.

Настройка межсетевого экрана iptables

Так как взаимодействие между узлами происходит через сеть необходимо настроить межсетевой экран. В нашем случае, это iptables.

Устанавливаем его следующей командой:

sudo apt install iptables -y

-8

После установки, необходимо ввести следующую команду:

sudo iptables -F && sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

-9

Назначение статического IP адреса

Хорошей практикой является использование статических адресов на серверах, именно для этого нам понадобится файл dhcpcd.conf.

sudo nano /etc/dhcpcd.conf

-10

В конце файла добавим следующие параметры:

interface wlan0
static ip_address=192.168.0.100
static routers=192.168.0.1
static domain_name_servers=77.88.8.8

-11

Разберем по строчкам:

interface wlan0 – в моем случае wlan0 означает, что я использую интерфейс с беспроводным подключением. В Вашем случае, можно указать eth0, в качестве проводного интерфейса.

static ip_address=192.168.0.103 – собственно IP адрес, который Вы решили установить на свою машину.

static routers=192.168.0.1 – адрес шлюза по умолчанию, или проще, адрес Вашего роутера

static domain_name_servers=77.88.8.8 – адрес DNS сервера. Вы спросите, а что это за адрес такой, 77.88.8.8? Это один из адресов бесплатных DNS от Яндекс. Обычно я использовал DNS от Google 8.8.8.8 или 8.8.4.4, но не стоит забывать, что есть и наши бесплатные альтернативы.

После этого сохраняем и выходим. Перед тем, как приступить к установке самого k3s, необходимо перезагрузить Малинку:

sudo reboot

-12

И самое главное, не забудьте, что после перезагрузки, по SSH Вы должны подключаться по новому IP адресу, указанному при настройке. Так что, если Вы увидите что-то похожее, то я Вас поздравляю.

-13

Установка k3s на мастер-ноду (главный узел)

Что такое нода (узел)? Это отдельная физическая или виртуальная машина, на которой развернуты и выполняются контейнеры приложений.

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

Сама установка k3s происходит за одну команду. Если Вы сделали все правильно, то Вам достаточно ввести следующую команду:

curl -sfL https://get.k3s.io | sh -

-14

После этого, Вы можете проверить корректно ли запустилась служба

systemctl status k3s.service

-15

И если Вы видите что-то похожее, то я Вас поздравляю:

-16

Нажимаем на q и возвращаемся обратно.

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

Получить ключ можно следующей командой:

sudo cat /var/lib/rancher/k3s/server/token

-17

Скопируете его, а лучше сохраните где-нибудь.

Установка k3s на рабочие ноды

Хочу Вас обрадовать, настройка рабочих узлов происходит тоже одной командой, правда довольно не маленькой.

curl -sfL https://get.k3s.io | K3S_NODE_NAME="node-03" K3S_URL="https://192.168.0.100:6443" K3S_TOKEN="ваш ключ" sh -

-18

Разберем все параметры подробнее:

K3S_NODE_NAME – имя узла. В моем случае node-01, node-02 и node-03.

K3S_URL – адрес мастер-ноды. Обратите внимание, что он должен начинаться с https://

K3S_TOKEN – ключ, полученный в предыдущем шаге.

Если после выполнения Вы видите следующий результат, то все было сделано правильно:

-19

Всё, установка завершена. Для проверки работоспособности, переходим на мастер-ноду и вводим следующую команду:

sudo kubectl get nodes

-20

А на этом статья подходит к концу.

Оставляйте комментарии, если статья понравилась, ставьте лайки и подписывайтесь на IT Gosha сегодня!

Всем хорошего настроения и спасибо за внимание!

#linux #raspberrypi4 #kubernetes #кластер #itgosha #сисадмин