Цією публікацією я б хотів розпочати цикл статей по Kubernetes. Очевидно, що найкраще розказувати про цю технологію за допомогою прикладів на справжньому кластері. У вас до вибору є велика кількість хмарних провайдерів, які дозволять вам створити кластер (GKE, AKS, EKS тощо). Також можна зпустити певну імітацію кластера за допомогою Minikube, але це лише симуляція справжнього кластера. Я вибрав трохи інший підхід, який дозволить мені повністю контролювати все що відбувається у кластері, а саме зліпив його сам з кількох плат Raspberry PI. І перші дві статті я присвячую конфігурації цього кластера.
Розпочнемо, мабуть, зі списку необхідного оснащення:
- Плата Raspberry PI 3B+. Мінімум 2 штуки, хоча я особисто не бачу великого сенсу в цьому. Щоб на повну вивчити можливості Kubernetes моя рекомендація це мінімум 4 плати. Також теоретично можна використати Raspberry PI 3B, все би мало працювати і там.
- Ethernet Switch. Головна вимога кількість портів має бути більшою за кількість плат у вашому кластері. Я використав TP Link SF1008D.
- USB power hub. Тут слід звернути увагу, що загальна потужність повинна бути хоча б 60W в іншому випадку через мале живлення малини просто не запустяться. Я взяв Unitek Y-P535.
- MicroSD cards 8GB мінімум. Ніобхідно по одній на кожну плату. Зверніть увагу щоб клас швидкості був хоча б .U1
- Мережеві кабелі - по одному на кожну клату.
- Usb micro B кабелі - по одному на кожну плату (для зарядки).
Також звертаю увагу, що я користуюся лінуксом, тому деякі кроки, особливо на початку статті, можуть відрізнятися.
Для початку скачаємо образ операційної системи, яку запишемо на карти пам'яті. Для цього на офіційній сторінці вибираємо Raspbian Stretch Lite (в моєму випадку версія від 2018-10-09). Можна звичайно вибрати повну версію з графічним інтерфейсом, але не бачу в цьому жодної потреби - всю конфігурацю ми і так будемо здійснювати через консоль, а UI це додаткові ресурси, яких в нас і так малувато на нашому міні-комп'ютері.
Завантаживши архів, необхідно його розархівувати:
$ unzip 2018-06-27-raspbian-stretch-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
$ sudo umount /media/sdcard
За допомогою перших двох команд я підключив карту до комп'ютера, далі створюю пустий файл і в кінці від'єднюю карту.
На цьому приготування системи для малини завершено. Виймаємо карту з вашого комп'ютера і запихаємо в одну з плат. Невеличка рекомендація від мене - позначити плату мастера (наприклад приклеїти радіатори іншим чином, використовувати кабелі інших кольорів, тощо) На даному етапі ми можемо забути на певний час про наш головний комп'ютер, надалі будемо працювати з малиною. Тут є два варіанти:
- Підключити до Raspberry PI клавіатуру та монітор.
- Підключити Raspberry PI до вашого роутера і залогінитися з допомогою SSH.
В обох випадках необхідно буде ввести логін і пароль, за замовчуванням це pi та raspberry.
Якщо ви вибрали другий варіант, то необхідно підключити switch до вашого основного роутера і знайти IP-адрес малини. Для цього рекомендую зкористатися утилітою nmap. В моєму випадку команда виглядала наступним чином:
$ nmap -sP 192.168.1.0/24 | grep raspberrypi
Ця команда повинна вивести вам IP-адрес який ми використаємо для з'єднання:
$ sudo ssh pi@192.168.1.185
pi - це назва користувача по замовчуванню, а IP адреса взята з попереднього кроку. Далі буде необхідно ввести пароль (raspberry). Якщо ви все зробите правильно то повинні побачити в консолі приблизно наступний вміст:
Розпочнемо ми зі загальних налаштувань, вводимо:
$ sudo raspi-config
Перед вами появиться наступне меню, яке дозволяє поміняти базові налаштування:
Я би рекомендував пройтися по наступним пунктам:
1. Change User Password. Заради вашої ж безпеки, варто змінити пароль за замовчуванням.
2. Network Options > Hostname змінюємо на master (не обов'язково, але полегшить роботу).
3. Network Options > WiFi вибираємо країну, назву мережі і пароль. Теж бажано це зробити, щоб мастер міг комунікувати зі зовнішнім світом через інший канал зв'язку.
4. Localisation Options > Change Timezone. Виберіть свій часовий пояс.
Після цього вибираємо Finish і перезавантажуємо. Якщо ви були підключені через SSH то потрібно буде знову відновити з'єднання (використовуючи новий пароль).
Для перевірки WiFi можна скористатися командою iwconfig. Якщо ви побачите назву вашої точки доступу то значить все працює.
Наступний крок - встановлення редактора, яким вам найбільш до вподоби. В моєму випадку це був vim:
$ sudo apt-get install vim
Тепер можна приступити до налаштувань мережі. Перш за все я б виділив окрему статичну IP адресу для WiFi інтерфейсу. Цей крок загалом необовязковий якщо у вас буде постійний доступ до додаткової клавіатури та екрану, але якщо в майбутньому буде потреба залогінитися на master через SSH то ви зекономити собі час для пошуку IP адреси яку роутер надав йому. Отже відкриваємо файл /etc/dhcpcd.conf та додаємо до нього:
interface wlan0
static ip_address=192.168.1.151/24
static routers=192.168.1.1
static domain_name_servers=8.8.8.8
В цій конфігурації я "прошу" роутера за адресою 192.168.1.1 надати комп'ютеру IP адресу 192.168.1.151 через інтерфейс wlan0 (тобто WiFi). В останній лінійці я вписав IP адрес DNS сервера (стандартний від Google).
Наступний крок - встановлення DHCP сервера на мастері. Загалом без цього можна обійтися, але тоді прийдеться вручну прописувати IP адреси всіх нодів, а так це буде все здійснюватися автоматично.
$ sudo apt-get install isc-dhcp-server
На кінці процедури буде написано, що не вдалося запустити DHCP server, не переживайте так і має бути, оскільки ще нічого не було сконфігуровано. Для початку пропишемо статичну IP адресу для Ethernet порту, для цього додаємо до /etc/network/interfaces.d/eth0 (цілком можливо, що цей файл треба буде створити):
allow-hotplug eth0
iface eth0 inet static
address 10.0.0.1
netmask 255.255.255.0
broadcast 10.0.0.255
gateway 10.0.0.1
Наступне задаємо конфігурацію для dhcp сервера. Для цього відкриваємо файл /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 адреси. Для під'єднання через SSH до мастера ми тепер можемо використати IP адресу, яку ми задали для інтерфейсу wlan0.
Тепер якщо ми під'єднаємо до нашого switch іншу малину мастер повинен автоматично надати їй IP адресу. Щоб її визначити необхідно знайти запис з client-hostname "raspberrypi" у файлі /var/lib/dhcp/dhcpd.leases:
Тепер якщо ми під'єднаємо до нашого 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 кластера на мастері і нодах.
Немає коментарів:
Дописати коментар