paint-brush
Kako napraviti Turing Pi 2 kućni klasterby@tomassirio
747 čitanja
747 čitanja

Kako napraviti Turing Pi 2 kućni klaster

by Tomas Sirio11m2024/10/07
Read on Terminal Reader

Predugo; Citati

U junu 2022. naišao sam na Kickstarter o ploči koja može imati do 4 Raspberry Pi 4 Compute Modula odjednom. Odlučio sam podržati projekat i kupiti ploču. Dvije godine kasnije, moj Turing Pi 2 je još uvijek sjedio neotvoren u kutiji na polici. Želeo sam da naučim više o grupisanju i nikada ranije nisam napravio kompletan Kubernetes klaster od nule.
featured image - Kako napraviti Turing Pi 2 kućni klaster
Tomas Sirio HackerNoon profile picture
0-item


Sadržaj

  • Priča
  • Plan
    • Turing Pi 2
  • The Setup
  • The Flashing
    • The Storage
    • Kubernetes
  • The Applications
  • Konačna izgradnja
  • Budućnost
  • Kraj

Priča

U junu 2022. naišao sam na Kickstarter o ploči koja može imati do 4 Raspberry Pi 4 računarska modula odjednom.

Bez mnogo razmišljanja, odlučio sam da podržim projekat i kupim ploču.


Premotamo dvije godine unaprijed, a moj Turing Pi 2 je još uvijek stajao neotvoren u kutiji na polici koja mi je život stao na put, i nisam bio siguran zašto sam ga uopće kupio.


Turing Pi ploča

Međutim, konačno sam odlučio da pokušam. Želeo sam da naučim više o grupisanju i nikada ranije nisam napravio kompletan Kubernetes klaster od nule. Dakle, otišao sam u režim potrošnje i nabavio tri Raspberry Pi 4s (8GB RAM, 8GB interne memorije) i jedan Nvidia Jetson Nano (4GB).


Raspberry Pi 4 CM

S obzirom na svestranost ploče, mogao bih miješati različite računarske module. Odlučio sam da uključim Jetson Nano, misleći da bi mi to moglo omogućiti da eksperimentišem sa CUDA drajverima u budućnosti i uđem u mašinsko učenje. ko zna Možda ću čak i na kraju ugostiti svog GPT asistenta na ovom Kubernetes klasteru.
Jetson Nano
(Spoilers: It didn't happen)

Plan

Moj početni plan je uključivao 3 Pi 4 CM i Jetson Nano postavljene na ploči. Takođe, planirao sam da koristim SSD disk od 1TB za skladištenje i Wi-Fi karticu za pristup internetu. Međutim, nakon što sam naišao na brojne poteškoće u procesu postavljanja Jetson Nano-a i njegove loše dokumentacije, odlučio sam ga vratiti. Umjesto toga, odlučio sam se za četvrti Raspberry Pi 4.


Pored toga, imao sam stari Raspberry Pi 4 sa 4 GB RAM-a koji je ležao okolo, pa sam odlučio da ga ugradim kao peti čvor.
Old Raspberry

Turing Pi 2

Turing Pi 2 je ploča Mini ITX formata koja može da primi do četiri Raspberry Pi računarska modula (takođe kompatibilna sa Jetson Nanos i Turing Compute Module). Poseduje PCI Express port, dva NVME porta, dva SATA porta i USB port za flešovanje računarskih modula.
Plan 0

  • Čvor 1 :

    • USB 2.0 port (za flešovanje računarskih modula)

    • HDMI port (za otklanjanje grešaka)

    • PCI Express port (za Wi-Fi karticu)


  • Čvor 2 :

    • Koristio bih ovaj za NVME skladištenje, ali nije kompatibilan sa Raspberry Pi 4s.


  • Čvor 3 :

    • SATA portovi se, međutim, ovdje mogu koristiti. Dakle, ovaj čvor će imati NFS deljeni disk.


  • Čvor 4 :

    • USB 3.0 portovi (ako mi ikada zatrebaju).


  • Moja stara malina :

    • To bi bio Kubernetes glavni čvor. Ne postoji poseban razlog; Na ovaj način mogu bolje razmišljati o svojoj postavci


    Plan 2

Konačno, ideja je da se ugosti Media Server sa nekim dodacima.
Dijagram toka

The Set-up

Prošlo je dosta vremena otkako sam sastavio računar, i to je bio prvi put da sam se igrao sa Compute Modules i njihovim adapterima, tako da je to bilo dosta zabave za vikend. Pošto mi je novčanik bio vruć, ali još uvijek nije gorio, pomislio sam, zašto dovraga ne bih dodao lijepu torbicu za njega?
Raspakivanje 1

S obzirom na Mini ITX oblik ploče, mogao bih je uklopiti u bilo koje otmjeno ITX kućište koje sam mogao pronaći na Amazonu. Qube 500 me je provukao. Već sam pravio DIY klaster, najbolji slučaj za tako nešto je bio i DIY.
Qube 500

Dodao sam i napajanje od 650 W (totalni višak), jednu malu Wi-Fi Mini PCI Express karticu i 1TB SATA SSD.


Sastavljanje 'stvari' bilo je prilično jednostavno. Malo termalne paste između računarskih modula i njihovih hladnjaka i spajanja ih zajedno sa njihovim adapterima prije nego što ih postavite u red u Turing Board-u;
Turing Pi ploča 1

Narudžbu sam spomenuo jer je to bio značajan dio projekta. Turing Pi 2 nudi upravljanje svojim portovima raspoređenim kroz računarske module. U ovom slučaju, PCI Express 1 je upravljao prvi čvor, dok je SSD diskom upravljao treći. Drugi je mogao upravljati NVME portom, a 4. na drugom SSD IIRC-u, ali mi trenutno nisu koristili.

The Flashing

Već sam instalirao Raspberry Pis, ali nikada Compute Module. Turing Pi 2 ima USB port pozadi koji se koristi za flešovanje računarskih modula.


Nažalost, pokušao sam da koristim USB A na USB A kabl koji nije kabl za prenos podataka, pa sam dok sam čekao da Amazon isporuči kabl pronašao drugi način da flešujem računarske module.


Turing Pi 2 ima CLI alat koji se može koristiti ne samo za flešovanje računarskih modula već i za upravljanje njihovom snagom, resetovanje, provjeru neke statistike itd.


Naredba korištena za instaliranje Compute Module je bila:


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


Prilično jednostavan proces pomislio sam u sebi prije nego što sam shvatio da Raspbian slika ne dolazi sa SSH omogućenim po defaultu.

To, naravno, nije Turingova odgovornost. Trebao sam sačekati tu kablovsku, ali dobro.


Da to popravim, morao sam montirati sliku na svoju lokalnu mašinu i dodati praznu datoteku pod nazivom ssh u particiju za pokretanje. Ovo bi podrazumevano omogućilo SSH.


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


Sada, sve moje moke su bile spremne za upotrebu. Povezao sam ih na mrežu i počeo ih konfigurirati. Bilo je malo toga za konfiguraciju jer sam ih namjeravao koristiti kao Kubernetes čvorove.


Ali stvari kao što su vim i ažuriranje sistema su bile neophodne.


Turing 1

Ovo mi je također dalo priliku da naučim kako koristiti Tmux . Najbolji alat koji sam naučio u posljednje vrijeme.

The Storage

Ako se sećate nekoliko paragrafa iznad, spomenuo sam da će se treći čvor koristiti za NFS deljeni disk. Imao sam 1TB SSD disk koji sam namjeravao koristiti u tu svrhu. Morao sam ga formatirati i montirati u 3. čvor.


Ali takođe sam morao da instaliram NFS server u ovaj čvor i da ga konfigurišem u drugim čvorovima. Da li se ovo preporučuje za proizvodno okruženje? Dovraga, ne, ali to je kućni klaster, tako da nisam previše zabrinut zbog toga.
Tmux1

Evo koraka koje sam preduzeo da konfigurišem NFS server:

 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


Prvo sam provjerio da li je disk ispravno montiran. Zatim sam instalirao NFS server:

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


Dodao sam ga u fstab datoteku kako bi se uvjerio da je montiran pri pokretanju:

(dodavanje sljedećeg reda u /etc/fstab fajl)

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


Sada instaliram nfs-kernel-server:

 sudo apt update sudo apt install nfs-kernel-server


I dodavanje mog diska u /etc/exports fajl:

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


Sada, na drugim čvorovima, morao sam da instaliram nfs-common:

 sudo apt update sudo apt install nfs-common


I spajanje pogona na svaki čvor:

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

Tmux 0

Neofetch je instaliran u svim čvorovima jer sam fensi.

Kubernetes klaster

Nikada ranije nisam postavljao Kubernetes klaster od nule, ali sam gledao dosta videa Jeffa Geerlinga na tu temu... Ovo je dovoljno iskustva, zar ne?


Jeff me je doveo do K3s koristeći Ansible , laganu Kubernetes distribuciju koja je savršena za moj kućni klaster i unaprijed definiran način instalacije jer nemam preduslove niti ideju kako da je drugačije podesim.


Instalacija je bila prilično jednostavna. Morao sam ga instalirati u sve čvorove, ali sam morao biti siguran da je glavni čvor prvi koji će biti instaliran.


Dakle, prvo sam klonirao k3s-ansible spremište:

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


Onda sam morao da konfigurišem datoteku inventara. Moj glavni čvor, kao što sam već spomenuo, bio je moj stari Raspberry Pi 4. Tako da sam morao biti siguran da je to prvi u inventaru. Takođe sam morao da se uverim da su ostali čvorovi u ispravnim grupama.:

 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:


U toj istoj datoteci, morao sam postaviti token za šifriranje. Datoteka pokazuje kako se to radi, tako da neću ulaziti u detalje ovdje.


Onda sam morao da pokrenem playbook:

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


To je to. Što se tiče instalacije, imao sam Kubernetes klaster koji je pokrenut. Morao sam da instaliram K9s na svoju lokalnu mašinu da upravljam klasterom i povežem klaster sa ./kube/config fajlom.

The Applications

Na kraju, morao sam instalirati aplikacije koje sam htio pokrenuti u klasteru. Imao sam neke ideje šta želim.

  • Htio sam imati Media Server sa zakazanim preuzimanjima.


  • Pi-hole instanca za DNS moje mreže i blokiranje svih oglasa na svim uređajima kod kuće.


  • Retroarch instanca za igranje nekih starih igara i dijeljenje sačuvanih igara preko moje kućne mreže (gledam vas Megaman Battle Network 6 na svim mojim uređajima)


Tu dolazi moje spremište .
Repozitorijum 0

Za Media Server sam odlučio da koristim:


Kao primjer, pokazat ću vam kako sam instalirao Sonarr koristeći kubectl . Ostale aplikacije su instalirane na sličan način.


Za svaku aplikaciju kreirao sam 3 fajla:

  • deployment.yaml je konfiguracija za svaki od podova koji pokreće aplikaciju

     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 je konfiguracija za uslugu koja će izložiti aplikaciju klasteru

     apiVersion: v1 kind: Service metadata: name: sonarr spec: selector: app: sonarr ports: - port: 80 targetPort: 8989 type: ClusterIP
  • ingress.yaml i ovo je konfiguracija za ingress koja će izložiti aplikaciju mojoj mreži


Zatim ih sve implementiramo koristeći kubectl :

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


Kao što vidite, koristim NFS-podržano trajno skladište za podatke i konfiguraciju aplikacija.


U spremištu možete pronaći datoteke nfs-pv.yaml i nfs-pvc.yaml koje sam koristio da kreiram NFS skladište.


Dodatno, kreirao sam još jednu trajnu tvrdnju o volumenu za konfiguraciju aplikacija.
K9s 0

Final Build

Iako kućište izgleda neverovatno, malo je preveliko za Raspberry Pi Cluster. Mini ITX kućište bi takođe odgovaralo mojim potrebama, ali moram priznati da sam zaljubljenik u DIY stvari.
Puna izrada 0


Također, usisivač za LED diode općenito. Nisam dodao više svjetla u kućište, ali mislim da ploča već radi dobar posao. Nažalost, pinovi ventilatora nisu bili kompatibilni sa pločom, a ja nisam kupio kontroler ventilatora ili pin za matičnu ploču. Možda u budućnosti.
Radni 0

Ponekad se jednostavno morate zavaliti i uživati u pogledu.
Potpuna izrada 1

I konačno, Turing Pi 2 Home Cluster je pokrenut i moja kuća više nije u neredu.
Potpuna izrada 2

Budućnost

Samo će vrijeme pokazati šta ću sa ovim klasterom.


Međutim, razmišljao sam o tome da dodam Prometheus i Grafana kako bi imali neke metrike i lijepe grafikone za provjeru klastera.


Migracija svih mojih Kubernetes fajlova u Helm takođe bi bila dobra ideja.


Konačno, Retroarch instanca je još uvijek u izradi. Možda je u radu malo previše optimistično s obzirom da pod živi u CrashLoopBackOff stanju. Ali stići ću tamo.

Kraj

Ako ste stigli do kraja ovog posta, zahvaljujem vam na izdvojenom vremenu. Nadam se da ste uživali isto kao i ja u sastavljanju klastera i pisanju o tome.

L O A D I N G
. . . comments & more!

About Author

Tomas Sirio HackerNoon profile picture
Tomas Sirio@tomassirio
I'm a Barbie Dev, In a Barbie World.Wide.Web Backend Developer at Bux. Master of memes.

HANG TAGS

OVAJ ČLANAK JE PREDSTAVLJEN U...