Перед тим як почати писати про Kubernetes, необхідно мати “живий” кластер, на якому я міг би демонструвати різні функції і можливості цієї системи. В основному ця стаття буде частково переробленою статтею з мого першого блогу, про налаштування Kubernetes на Raspberry PI. На жаль інструкції звідти вже не є актуальними. Протягом останнього року вийшло кілька нових версій Kubernetes i нова версія Debian.
Розпочнемо із списку речей, які необхідні для налаштування:
- Плата Raspberry PI 3B+. Мінімум 2 штуки, хоча я особисто не бачу великого сенсу в цьому. Щоб на повну вивчити можливості Kubernetes моя рекомендація це мінімум 4 плати. Також теоретично можна використати Raspberry PI 3B, все би мало працювати і там. Також звертаю увагу, що цього разу я використав Raspberry Pi 4 з 2GB оперативної пам’яті для мастера.
- Ethernet Switch. Головна вимога кількість портів має бути більшою за кількість плат у вашому кластері. Я використав TP Link SF1008D.
- USB power hub. Тут слід звернути увагу, що загальна потужність повинна бути хоча б 60W в іншому випадку через мале живлення малини просто не запустяться. Я взяв Unitek Y-P535.
- MicroSD cards 8GB мінімум. Необхідно по одній на кожну плату. Зверніть увагу щоб клас швидкості був хоча б .U1
- Мережеві кабелі – по одному на кожну плату.
- Usb micro B кабелі – по одному на кожну плату (для зарядки).
Для початку стягуємо образ операційної системи, яку запишемо на карти пам’яті. Для цього на офіційній сторінці вибираємо Raspbian Buster Lite (в моєму випадку версія від 2020-02-13). Можна звичайно вибрати повну версію з графічним інтерфейсом, але не бачу в цьому жодної потреби – всю конфігурацію ми і так будемо здійснювати через консоль, а UI це додаткові ресурси, яких в на малині і так не дуже багато.
Завантаживши архів, необхідно його розархівувати:
unzip 2020-02-13-raspbian-buster-lite.zip
Тепер можна записати образ на одну з MicroSD карт. Я би рекомендував скористуватися програмкою Etcher (є версії для всіх операційних систем) або через консоль. Ця процедура повинна зайняти не більше кількох хвилин:
Також я рекомендую почати лише з двох карт (одну для master, інша для node). Після того як все буде сконфігуровано і працюватиме з двома, можна легко записати образи на інші.
Якщо у вас є додатковий монітор і клавіатура то можна їх підключити до Raspberry PI і тим самим уникнути розблокування доступу до малини через SSH (в останніх версіях системи, цей дозвіл є відключений по замовчуванню). Якщо ж ви бажаєте підключатися до всіх вузлів за допомогою свого комп’ютера то вам необхідно створити пустий файл з назвою “ssh” в boot розділі карти. У моєму випадку набір команд виглядав наступним чином:
sudo mkdir /media/sdcard
sudo mount /dev/sdc1 /media/sdcard
sudo touch /media/sdcard/ssh
За допомогою перших двох команд я підключив карту до комп’ютера, далі створюю необхідний файл. Також окремо рекомендую створити одразу конфігурацію для WiFi. В іншому випадку буде необхідно підключати мастера до своєї мережі через кабель і після цього проводити конфігурацію. Але це все можна зробити набагато простіше, якщо прописати наступну конфігурацію в файлі /media/sdcard/wpa_supplicant.conf:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=UA
network={
ssid="«your_SSID»"
psk="«your_PSK»"
}
Не забуваємо відключити карту за допомогою команди sudo umount /media/sdcard. Наступне підключаємо карту до однієї з плат, подаємо живлення і чекаємо. Якщо все було зроблено правильно, то через кілька хвилин малина має підключитися до вашого WiFi. IP адресу можна знайти зайшовши в налаштування вашого роутера або з допомогою наступної команди:
nmap -sP 192.168.0.1/24
Єдине необхідно буде визначити, яка з адрес належить нашій малині. Після того як IP адреса буде визначена, можна залогінитися. Логін і пароль, за замовчуванням це pi та raspberry.
sudo ssh pi@192.168.0.1
pi – це назва користувача по замовчуванню, а IP адреса взята з попереднього кроку. Далі буде необхідно ввести пароль (raspberry). Якщо ви все зробите правильно то повинні побачити в консолі приблизно наступний вміст:

Розпочнемо ми зі загальних налаштувань, вводимо:
sudo raspi-config
Перед вами появиться наступне меню, яке дозволяє поміняти базові налаштування:
Я би рекомендував пройтися по наступним пунктам:
- Change User Password. Заради вашої ж безпеки, варто змінити пароль за замовчуванням.
- Network Options > Hostname змінюємо на master (не обов’язково, але полегшить роботу).
- Localisation Options > Change Timezone. Виберіть свій часовий пояс.
Після цього вибираємо Finish і перезавантажуємо. Якщо ви були підключені через SSH то потрібно буде знову відновити з’єднання (використовуючи новий пароль).
Наступний крок – встановлення редактора, яким вам найбільш до вподоби. В моєму випадку це був vim:
sudo apt-get install vim
Тепер можна приступити до налаштувань мережі. Нижче зображено фінальна структура мережі, яку ми повинні отримати після налаштування:

Як бачимо до інтернету підключений тільки мастер (через WiFi), всі інші вузли використовують мастер як проміжну ланку для зв’язку зі зовнішнім світом. Такий підхід має як недоліки так і переваги. Головний недолік – велике навантаження на головний вузол, якщо вам колись прийдеться вручну піднімати Kubernetes кластер, то в ніякому випадку цього не робіть, я зробив такий вибір тільки з навчальної точки зору. Першою перевагою цього методу є зручність налаштування окремих вузлів, вам необхідно тільки під’єднати їх до Switch і вони автоматично отримають внутрішній IP адрес. Друга перевага – зручність в транспортуванні. Всі частини кластеру можна легко взяти з собою в подорож, а на місці буде необхідно лише підключити мастер по WiFi.
Почнемо з налаштування IP адрес для WiFi та Ethernet. Як я вже зазначив вище, зі зовнішнім світом мастер буде контактувати через WiFi, а з іншими вузлами через Ethernet порт. Для обидвох інтерфейсів ми встановимо статичні адреси, для цього добавимо наступну конфігурацію до файлу /etc/dhcpcd.conf:
interface wlan0
static ip_address=192.168.0.46/24
static domain_name_servers=8.8.8.8
static routers=192.168.0.1
interface eth0
static ip_address=10.0.0.1
static domain_name_servers=8.8.8.8
static routers=10.0.0.1
nogateway
В цій конфігурації ми маємо два блоки даних, перший для WiFi, другий для Ethernet. В кожному з них ми задаємо статичну IP адресу, адрес DNS сервера та IP адрес роутера, в другому випадку це нам мастер і буде виступати як роутер. Також зверніть увагу на останній рядок, без нього dhcp сервер, автоматично буде додавати ip route, який блокуватиме прямий вихід до інтернету з вашого вузла (потрібно буде при кожному запиті вказувати з якого інтерфейсу ми користуємося).
Наступний крок – встановлення DHCP сервера на мастері. Загалом без цього можна обійтися, але тоді прийдеться вручну прописувати IP адреси всіх вузлів, а так це все буде здійснюватися автоматично.
sudo apt-get install isc-dhcp-server
На кінці процедури буде написано, що не вдалося запустити DHCP server, не переживайте так і має бути, оскільки ще нічого не було сконфігуровано. Для цього відкриваємо файл/etc/dhcp/dhcpd.conf. Перш за все розкоментовуємо стрічку # authorative, і додаємо наступний блок:
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.1 10.0.0.10;
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
option routers 10.0.0.1;
option domain-name "local-network";
option domain-name-servers 8.8.8.8, 8.8.4.4;
}
І останній крок вказуємо для якого інтерфейсу буде працювати наш DHCP сервер. У файлі /etc/default/isc-dhcp-server необхідно задати значення:
INTERFACEv4=”eth0”
Давайте тепер перезавантажемо комп’ютер, тепер якщо ми під’єднаємо до нашого switch іншу малину мастер повинен автоматично надати їй IP адресу. Щоб її визначити необхідно знайти запис з client-hostname “raspberrypi” у файлі /var/lib/dhcp/dhcpd.leases:
Якщо ви хочете залогінитися через SSH на новий вузол, то потрібно з мастера виконати наступну команду:
sudo ssh pi@10.0.0.4
Єдина проблема з цим вузлом – відсутність доступу до інтернету. З цієї малини доступ буде лише до мастера:
Тобто нам потрібно налаштувати мастер подібно до роутера: всі пакети що приходять через один інтерфейс відправляються через інший в зовнішній світ. В нашому випадку всі пакети, що приходять через Ethernet порт, будуть запаковані і відправлені через WiFi. Для цього необхідно додати наступну конфігурацію до файлу /etc/rc.local (перед exit 0):
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
Також необхідно розкоментувати наступну лінійку в файлі /etc/sysctl.conf:
net.ipv4.ip_forward=1
На цьому конфігурація мережі мастера завершена. Перезавантажуємо його, логінимося на довільний нод і перевіряємо чи є у нас доступ до інтернету:
Як ви мабуть помітили, основна робота полягала в правильній конфігурації мастера, а на всіх нодах все повинно працювати автоматично при підключенні їх до switch. В наступній частині ми встановимо Docker і необхідні компоненти для Kubernetes кластера на мастері і нодах.
PS Я не є спеціалістом з налаштування мереж, тому ця на перший погляд проста інструкція, зайняла в мене кілька днів роботи. Якщо у Вас є ідеї, як це можна покращити, пишіть в коментарях, можливо в наступних статтях я спробую реалізувати найкращі побажання.
Залишити відповідь