paint-brush
Як пабудаваць хатні кластар Turing Pi 2па@tomassirio
292 чытанні

Як пабудаваць хатні кластар Turing Pi 2

па Tomas Sirio11m2024/10/07
Read on Terminal Reader

Занадта доўга; Чытаць

У чэрвені 2022 года я наткнуўся на Kickstarter аб плаце, здольнай адначасова мець да 4 вылічальных модуляў Raspberry Pi 4. Я вырашыў падтрымаць праект і купіць дошку. Праз два гады мой Turing Pi 2 усё яшчэ ляжаў нераскрытым у сваёй скрынцы на паліцы. Я хацеў даведацца больш пра кластэрызацыю і ніколі раней не ствараў поўны кластар Kubernetes з нуля.
featured image - Як пабудаваць хатні кластар Turing Pi 2
Tomas Sirio HackerNoon profile picture
0-item


Змест

  • Гісторыя
  • План
    • Цьюрынг Пі 2
  • Ўстаноўка
  • Мігценне
    • Захоўванне
    • Kubernetes
  • Прыкладанні
  • Канчатковая зборка
  • Будучыня
  • Канец

Гісторыя

У чэрвені 2022 года я наткнуўся на Kickstarter аб плаце, здольнай адначасова мець да 4 вылічальных модуляў Raspberry Pi 4 .

Без асаблівых разважанняў я вырашыў падтрымаць праект і набыць дошку.


Хуткая перамотка наперад на два гады, і мой Turing Pi 2 усё яшчэ ляжаў нераскрытым у сваёй скрынцы на паліцы. Жыццё перашкодзіла, і я не быў упэўнены, навошта я яго купіў.


Плата Turing Pi

Аднак я нарэшце вырашыў паспрабаваць. Я хацеў даведацца больш пра кластэрызацыю і ніколі раней не ствараў поўны кластар Kubernetes з нуля. Такім чынам, я перайшоў у рэжым выдаткаў і набыў тры Raspberry Pi 4 (8 ГБ аператыўнай памяці, 8 ГБ унутранай памяці) і адзін Nvidia Jetson Nano (4 ГБ).


Raspberry Pi 4 CM

Улічваючы ўніверсальнасць платы, я мог бы змяшаць розныя вылічальныя модулі. Я вырашыў уключыць Jetson Nano, думаючы, што гэта можа дазволіць мне эксперыментаваць з драйверамі CUDA ў будучыні і паглыбіцца ў машыннае навучанне. Хто ведае? Я мог бы нават размясціць свайго памочніка GPT на гэтым кластары Kubernetes.
Джэтсан Нана
(Spoilers: It didn't happen)

План

Мой першапачатковы план уключаў 3 Pi 4 CM і Jetson Nano, размешчаныя на дошцы. Акрамя таго, я планаваў выкарыстоўваць цвёрдацельны назапашвальнік на 1 ТБ для захоўвання і карту Wi-Fi для доступу ў Інтэрнэт. Аднак, сутыкнуўшыся са шматлікімі цяжкасцямі з працэсам наладкі Jetson Nano і дрэннай дакументацыяй, я вырашыў вярнуць яго. Замест гэтага я абраў чацвёрты Raspberry Pi 4.


Акрамя таго, у мяне быў стары Raspberry Pi 4 з 4 ГБ аператыўнай памяці, таму я вырашыў уключыць яго ў якасці пятага вузла.
Старая маліна

Цьюрынг Пі 2

Turing Pi 2 - гэта плата ў фармаце Mini ITX, якая можа змясціць да чатырох вылічальных модуляў Raspberry Pi (таксама сумяшчальных з Jetson Nanos і вылічальным модулем Turing). Ён мае порт PCI Express, два порта NVME, два порта SATA і порт USB для прашыўкі вылічальных модуляў.
План 0

  • Вузел 1 :

    • Порт USB 2.0 (для прашыўкі вылічальных модуляў)

    • Порт HDMI (для адладкі)

    • Порт PCI Express (для карты Wi-Fi)


  • Вузел 2 :

    • Я б выкарыстаў гэты для захоўвання NVME, але ён несумяшчальны з Raspberry Pi 4s.


  • Вузел 3 :

    • Парты SATA, аднак, могуць быць выкарыстаны тут. Такім чынам, гэты вузел будзе мець агульны дыск NFS.


  • Вузел 4 :

    • Парты USB 3.0 (калі яны мне калі-небудзь спатрэбяцца).


  • Мая старая маліна :

    • Гэта будзе галоўны вузел Kubernetes. Асаблівай прычыны няма; Я магу лепш падумаць пра сваю ўстаноўку такім чынам


    План 2

У рэшце рэшт, ідэя складаецца ў тым, каб размясціць медыясервер з некаторымі дапаўненнямі.
Блок-схема

Ўстаноўка

Прайшло шмат часу з таго часу, як я сабраў камп'ютар, і гэта быў першы раз, калі я пагуляў з вылічальнымі модулямі і іх адаптарамі, так што гэта было шмат задавальнення на выходных. Паколькі мой кашалёк быў гарачы, але ўсё яшчэ не гарэў, я падумаў, чаму б, чорт вазьмі, не дадаць для яго прыгожы чахол?
Распакаванне 1

Улічваючы формаў-фактар платы Mini ITX, я мог бы змясціць яе ў любы шыкоўны чахол ITX, які змог знайсці на Amazon. Qube 500 правёў мяне наскрозь. Я ўжо рабіў кластар "зрабі сам", лепшы варыянт для такой рэчы таксама быў "зрабі сам".
Qube 500

Я таксама дадаў блок харчавання на 650 Вт (поўнае лішак), адну невялікую карту Wi-Fi Mini PCI Express і 1 ТБ SSD SSD.


Сабраць «рэч» было даволі проста. Трохі тэрмічнай пасты паміж вылічальнымі модулямі і іх радыятарамі і сціскаючы іх разам з адаптарамі, перш чым усталяваць іх у парадак на плаце Turing;
Плата Turing Pi 1

Я згадаў пра заказ, таму што ён быў значнай часткай праекта. Turing Pi 2 прапануе кіраванне сваімі партамі, размеркаванымі па вылічальных модулях. У гэтым выпадку PCI Express 1 кіраваўся першым вузлом, а SSD-назапашвальнікам кіраваў трэці. 2-гі мог працаваць з портам NVME, а 4-ы - з іншым цвёрдацельным назапашвальнікам IIRC, але цяпер яны мне не патрэбныя.

Мігценне

Я ўсталёўваў Raspberry Pis раней, але ніколі не ўсталёўваў Compute Modules. У Turing Pi 2 ззаду ёсць порт USB, які выкарыстоўваецца для прашыўкі вылічальных модуляў.


На жаль, я паспрабаваў выкарыстаць кабель USB A да USB A, які не быў кабелем для перадачы даных, таму пакуль я чакаў, пакуль Amazon даставіць кабель, я знайшоў іншы спосаб прашыўкі вылічальных модуляў.


У Turing Pi 2 ёсць інструмент CLI, які можна выкарыстоўваць не толькі для прашыўкі вылічальных модуляў, але і для кіравання іх магутнасцю, скіду іх, праверкі некаторай статыстыкі і гэтак далей.


Каманда, якая выкарыстоўвалася для ўстаноўкі вылічальных модуляў:


 tpi flash -i /path/to/image -n {nodes 1 to 4}


Даволі просты працэс, я думаў пра сябе, перш чым зразумеў, што вобраз Raspbian не пастаўляецца з уключаным SSH па змаўчанні.

Гэта, вядома, не ўваходзіць у абавязкі Цьюрынга. Я павінен быў пачакаць гэтага кабеля, але добра.


Каб выправіць гэта, мне прыйшлося змантаваць вобраз на сваёй лакальнай машыне і дадаць пусты файл з імем ssh у раздзел загрузкі. Гэта ўключыць SSH па змаўчанні.


 sudo mkdir /mnt/pi-boot sudo mount /dev/sdX1 /mnt/pi-boot sudo touch /mnt/pi-boot/ssh sudo umount /mnt/pi-boot


Цяпер увесь мой піж быў гатовы да выкарыстання. Я падключыў іх да сеткі і пачаў наладжваць. Не было чаго наладжваць, бо я збіраўся выкарыстоўваць іх у якасці вузлоў Kubernetes.


Але такія рэчы, як vim і абнаўленне сістэмы, былі неабходныя.


Цьюрынг 1

Гэта таксама дало мне магчымасць навучыцца карыстацца Tmux . Лепшы інструмент, якому я навучыўся за апошні час.

Захоўванне

Калі вы памятаеце некалькі абзацаў вышэй, я згадваў, што 3-ці вузел будзе выкарыстоўвацца для агульнага дыска NFS. У мяне быў цвёрдацельны назапашвальнік на 1 ТБ, які я збіраўся выкарыстоўваць для гэтай мэты. Я павінен быў адфарматаваць яго і змантаваць яго ў 3-м вузле.


Але мне таксама трэба было ўсталяваць сервер NFS у гэтым вузле і наладзіць яго ў іншых вузлах. Гэта рэкамендуецца для вытворчага асяроддзя? Чорт вазьмі, не, але гэта хатні кластар, так што я не надта пра гэта хвалююся.
Tmux1

Вось крокі, якія я зрабіў, каб наладзіць сервер NFS:

 pi@turing-03:/mnt/ssd/data $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 953.9G 0 disk /mnt/ssd mmcblk0 179:0 0 7.3G 0 disk ├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware └─mmcblk0p2 179:2 0 6.8G 0 part / mmcblk0boot0 179:32 0 4M 1 disk mmcblk0boot1 179:64 0 4M 1 disk


Спачатку я праверыў, ці правільна ўсталяваны дыск. Затым я ўсталяваў сервер NFS:

 sudo mkdir /mnt/nfs_share sudo mount /dev/sda /mnt/nfs_share


Дадаў яго ў файл fstab, каб пераканацца, што ён быў усталяваны пры загрузцы:

(даданне наступнага радка ў файл /etc/fstab )

 echo '/dev/sda /mnt/ssd ext4 defaults 0 0' | sudo tee -a /etc/fstab


Цяпер усталяванне nfs-kernel-server:

 sudo apt update sudo apt install nfs-kernel-server


І даданне майго дыска ў файл /etc/exports :

 echo '/mnt/ssd *(rw,sync,no_subtree_check,no_root_squash)' | sudo tee -a /etc/exports


Цяпер, на іншых вузлах, я павінен быў усталяваць nfs-common:

 sudo apt update sudo apt install nfs-common


І падключэнне дыска да кожнага вузла:

 sudo mount -t nfs {IP-for-the-drives-node}:/mnt/ssd /mnt

Tmux 0

Neofetch усталяваны ва ўсіх вузлах, таму што я мудрагелісты.

Кластар Kubernetes

Я ніколі раней не ствараў кластар Kubernetes з нуля, але я глядзеў шмат відэа Джэфа Гірлінга на гэтую тэму... Гэтага вопыту дастаткова, так?


Джэф прывёў мяне да K3s з дапамогай Ansible , лёгкага дыстрыбутыва Kubernetes, які ідэальна падыходзіць для майго хатняга кластара і загадзя вызначанага спосабу яго ўстаноўкі, таму што ў мяне няма папярэдніх патрабаванняў і ідэі, як наладзіць яго інакш.


Ўстаноўка была даволі простай. Я павінен быў усталяваць яго ва ўсіх вузлах, але я павінен быў пераканацца, што галоўны вузел быў усталяваны першым.


Такім чынам, спачатку я кланаваў рэпазітар k3s-ansible:

 git clone https://github.com/k3s-io/k3s-ansible.git


Затым мне прыйшлося наладзіць файл інвентарызацыі. Маім галоўным вузлом, як я ўжо згадваў раней, быў мой стары Raspberry Pi 4. Таму я павінен быў пераканацца, што ён першы ў файле інвентара. Мне таксама трэба было пераканацца, што іншыя вузлы знаходзяцца ў правільных групах:

 k3s_cluster: children: server: hosts: 192.168.2.105: agent: hosts: 192.168.2.101: 192.168.2.102: 192.168.2.103: 192.168.2.104:


У тым самым файле мне прыйшлося ўсталяваць маркер шыфравання. Файл паказвае, як гэта зрабіць, таму я не буду ўдавацца ў падрабязнасці.


Затым мне прыйшлося запусціць п'есу:

 cd k3s-ansible ansible-playbook playbooks/site.yml -i inventory.yml


Вось і ўсё. Што тычыцца ўстаноўкі, у мяне быў запушчаны і запушчаны кластар Kubernetes. Мне прыйшлося ўсталяваць K9s на маім лакальным кампутары, каб кіраваць кластарам і прывязаць кластар да файла ./kube/config .

Прыкладанні

Нарэшце, мне прыйшлося ўсталяваць прыкладанні, якія я хацеў запускаць у кластары. У мяне былі некаторыя ідэі, чаго я хацеў.

  • Я хацеў мець медыясервер з запланаванымі загрузкамі.


  • Экземпляр Pi-hole для DNS маёй сеткі і блакіроўка ўсёй рэкламы на ўсіх прыладах дома.


  • Экземпляр Retroarch , каб гуляць у некаторыя старыя гульні і дзяліцца захаванымі гульнямі ў сетцы маёй хаты (гляджу на вас, Megaman Battle Network 6 на ўсіх маіх прыладах)


Вось тут і ўваходзіць маё сховішча .
Рэпазітар 0

Для медыя-сервера я вырашыў выкарыстаць:


У якасці прыкладу я пакажу вам, як я ўсталяваў Sonarr з дапамогай kubectl . Астатнія прыкладанні ўсталёўваліся аналагічным чынам.


Для кожнага прыкладання я стварыў 3 файла:

  • deployment.yaml - гэта канфігурацыя для кожнага з падаў, на якіх працуе прыкладанне

     apiVersion: apps/v1 kind: Deployment metadata: name: sonarr spec: replicas: 1 selector: matchLabels: app: sonarr template: metadata: labels: app: sonarr spec: containers: - name: sonarr image: linuxserver/sonarr ports: - containerPort: 8989 env: - name: PUID value: "911" - name: PGID value: "911" - name: TZ value: "Europe/Amsterdam" volumeMounts: - mountPath: /data name: data - name: config mountPath: /config volumes: - name: data persistentVolumeClaim: claimName: nfs-pvc - name: config persistentVolumeClaim: claimName: nfs-config-pvc


  • service.yaml - гэта канфігурацыя для службы, якая будзе адкрываць прыкладанне для кластара

     apiVersion: v1 kind: Service metadata: name: sonarr spec: selector: app: sonarr ports: - port: 80 targetPort: 8989 type: ClusterIP
  • ingress.yaml і гэта канфігурацыя для ingress, якая адкрые прыкладанне для маёй сеткі


Затым мы разгортваем іх усе з дапамогай kubectl :

 kubectl apply -f sonarr/deployment.yaml kubectl apply -f sonarr/service.yaml kubectl apply -f sonarr/ingress.yaml


Як бачыце, я выкарыстоўваю пастаяннае сховішча з падтрымкай NFS для дадзеных і канфігурацыі прыкладанняў.


У рэпазітары вы можаце знайсці файлы nfs-pv.yaml і nfs-pvc.yaml , якія я выкарыстаў для стварэння сховішча NFS.


Акрамя таго, я стварыў яшчэ адно патрабаванне пастаяннага аб'ёму для канфігурацыі прыкладанняў.
K9s 0

Канчатковая зборка

Нягледзячы на тое, што корпус выглядае дзіўна, ён занадта вялікі для кластара Raspberry Pi. Чахол Mini ITX таксама адпавядаў бы маім патрэбам, але я павінен прызнаць, што я не люблю самаробныя рэчы.
Поўная зборка 0


Акрамя таго, прысоска для святлодыёдаў у цэлым. Я больш не дадаваў ніякіх свяцілень у корпус, але я думаю, што дошка ўжо добра спраўляецца са сваёй працай. На жаль, кантакты вентылятара былі несумяшчальныя з платай, і я не купіў кантролер вентылятара або штыфт для мацярынскай платы. Я мог бы ў будучыні.
Працуе 0

Часам трэба проста сядзець і атрымліваць асалоду ад выгляду.
Поўная зборка 1

І, нарэшце, хатні кластар Turing Pi 2 запушчаны, і ў маім доме больш няма беспарадку.
Поўная зборка 2

Будучыня

Толькі час пакажа, што я буду рабіць з гэтым кластарам.


Тым не менш, я думаў дадаць Prometheus і Grafana , каб мець некаторыя паказчыкі і прыгожыя графікі для праверкі кластара.


Перанос усіх маіх файлаў Kubernetes у Helm таксама будзе добрай ідэяй.


Нарэшце, асобнік Retroarch усё яшчэ знаходзіцца ў распрацоўцы. Магчыма, гэта занадта аптымістычна, улічваючы, што стручок знаходзіцца ў стане CrashLoopBackOff. Але я дабяруся.

Канец

Калі вы дайшлі да канца гэтага паведамлення, я дзякую вам за ваш час. Я спадзяюся, вам гэта спадабалася гэтак жа, як і мне, калі я ствараў кластар і пісаў пра яго.