paint-brush
Kuinka rakentaa Turing Pi 2 -kotiklusterikirjoittaja@tomassirio
747 lukemat
747 lukemat

Kuinka rakentaa Turing Pi 2 -kotiklusteri

kirjoittaja Tomas Sirio11m2024/10/07
Read on Terminal Reader

Liian pitkä; Lukea

Kesäkuussa 2022 törmäsin Kickstarteriin, joka koski levyä, jossa voi olla jopa 4 Raspberry Pi 4 -laskentamoduulia kerralla. Päätin tukea projektia ja ostaa levyn. Kaksi vuotta myöhemmin Turing Pi 2 -laitteeni istui edelleen avaamattomana laatikossaan hyllyllä. Halusin oppia lisää klusteroinnista, enkä ollut koskaan aiemmin rakentanut täydellistä Kubernetes-klusteria tyhjästä.
featured image - Kuinka rakentaa Turing Pi 2 -kotiklusteri
Tomas Sirio HackerNoon profile picture
0-item


Sisällysluettelo

  • Tarina
  • Suunnitelma
    • Turing Pi 2
  • Asennus
  • Vilkkuminen
    • Varastointi
    • Kubernetes
  • Sovellukset
  • Lopullinen rakennelma
  • Tulevaisuus
  • Loppu

Tarina

Kesäkuussa 2022 törmäsin Kickstarteriin, joka koski levyä, jossa voi olla jopa 4 Raspberry Pi 4 -laskentamoduulia kerralla.

Pitkään pohtimatta päätin tukea projektia ja ostaa levyn.


Kelaus eteenpäin kaksi vuotta, ja Turing Pi 2 -koneeni istui edelleen avaamattomana laatikossaan hyllyllä.Elämä oli mennyt tielle, enkä ollut varma, miksi ostin sen alun perin.


Turing Pi -taulu

Lopulta päätin kuitenkin kokeilla. Halusin oppia lisää klusteroinnista, enkä ollut koskaan aiemmin rakentanut täydellistä Kubernetes- klusteria tyhjästä. Joten menin kulutustilaan ja ostin kolme Raspberry Pi 4s:tä (8 Gt RAM-muistia, 8 Gt sisäistä tallennustilaa) ja yhden Nvidia Jetson Nanon (4 Gt).


Raspberry Pi 4 CMs

Levyn monipuolisuuden vuoksi voisin sekoittaa erilaisia laskentamoduuleja. Päätin sisällyttää Jetson Nanon, koska ajattelin, että sen avulla voisin tulevaisuudessa kokeilla CUDA-ajureita ja syventää koneoppimista. Kuka tietää? Saatan jopa päätyä isännöimään omaa GPT-avustajaani tässä Kubernetes-klusterissa.
Jetson Nano
(Spoilers: It didn't happen)

Suunnitelma

Alkuperäiseen suunnitelmaani sisältyi 3 Pi 4 CM ja Jetson Nano, joka isännöi laudalla. Ajattelin myös käyttää 1 Tt:n SSD-asemaa tallennustilaan ja Wi-Fi-korttia internetyhteyteen. Kohdattuani lukuisia vaikeuksia Jetson Nanon asennusprosessissa ja sen huonossa dokumentaatiossa päätin kuitenkin palauttaa sen. Sen sijaan valitsin neljännen Raspberry Pi 4:n.


Lisäksi minulla oli vanha Raspberry Pi 4, jossa oli 4 Gt RAM-muistia, joten päätin sisällyttää sen viidenneksi solmuksi.
Vanha Vadelma

Turing Pi 2

Turing Pi 2 on Mini ITX -muotoinen kortti, johon mahtuu jopa neljä Raspberry Pi -laskentamoduulia (yhteensopiva myös Jetson Nanosin ja Turing Compute Module -moduulin kanssa). Siinä on PCI Express -portti, kaksi NVME-porttia, kaksi SATA-porttia ja USB-portti laskentamoduulien vilkkumista varten.
Suunnitelma 0

  • Solmu 1 :

    • USB 2.0 -portti (laskentamoduulien vilkkumiseen)

    • HDMI-portti (virheenkorjausta varten)

    • PCI Express -portti (Wi-Fi-kortille)


  • Solmu 2 :

    • Käyttäisin tätä NVME-tallennustilaan, mutta se ei ole yhteensopiva Raspberry Pi 4s:n kanssa.


  • Solmu 3 :

    • SATA-portteja voidaan kuitenkin käyttää tässä. Joten tällä solmulla on jaettu NFS-asema.


  • Solmu 4 :

    • USB 3.0 -portit (jos tarvitsen niitä).


  • Vanha Vadelmani :

    • Olisi Kubernetes-pääsolmu. Ei ole erityistä syytä; Voin ajatella asetuksiani paremmin tällä tavalla


    Suunnitelma 2

Lopulta ajatuksena on isännöidä Mediapalvelin, jossa on joitain lisäosia.
Vuokaavio

Asetukset

Siitä on aikaa, kun olen koonnut tietokoneen, ja se oli ensimmäinen kerta, kun leikin Compute Moduleilla ja niiden sovittimilla, joten viikonloppuna oli hauskaa. Koska lompakkoni oli kuuma, mutta ei silti palanut, ajattelin, että miksi ihmeessä en laittaisi siihen mukavaa koteloa?
Pakkauksen purkaminen 1

Kun otetaan huomioon levyn Mini ITX -muotokerroin, voisin sovittaa sen mihin tahansa upeaan ITX-koteloon, jonka löysin Amazonista. Qube 500 sai minut läpi ja läpi. Olin jo tekemässä tee-se-itse-klusteria, paras tapa sellaiselle asialle oli myös tee-se-itse.
Qube 500

Lisäsin myös 650 W virtalähteen (täysi ylivoima), yhden pienen Wi-Fi Mini PCI Express -kortin ja 1 Tt:n SATA SSD:n.


"Asian" yhdistäminen oli melko yksinkertaista. Hieman lämpötahnaa Compute Module -moduulien ja niiden jäähdytyselementtien väliin ja niiden yhdistäminen sovittimiin ennen niiden asettamista järjestykseen Turing Boardissa;
Turing Pi Board 1

Mainitsin tilauksen, koska se oli merkittävä osa projektia. Turing Pi 2 tarjoaa porttien hallinnan hajautettuna laskentamoduuleille. Tässä tapauksessa PCI Express 1:tä hallitsi ensimmäinen solmu, kun taas SSD-asemaa hallitsi kolmas solmu. Toinen pystyi käsittelemään NVME-portin ja neljäs toisen SSD IIRC:n, mutta minulla ei ollut niille juuri nyt käyttöä.

Vilkkuminen

Olen asentanut Raspberry Pisin aiemmin, mutta en ole koskaan asentanut laskentamoduuleja. Turing Pi 2:n takana on USB-portti, jota käytetään laskentamoduulien vilkkumiseen.


Valitettavasti yritin käyttää USB A–USB A -kaapelia, joka ei ollut tiedonsiirtokaapeli, joten odotellessani Amazonin toimittavan kaapelin löysin toisen tavan vilkkua laskentamoduulit.


Turing Pi 2:ssa on CLI-työkalu, jota voidaan käyttää paitsi laskentamoduulien vilkkumiseen, myös niiden tehon hallintaan, nollaukseen, joidenkin tilastojen tarkistamiseen ja niin edelleen.


Laskentamoduulien asennuksessa käytetty komento oli:


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


Melko suoraviivainen prosessi, ajattelin itsekseni ennen kuin tajusin, että Raspbian-kuvassa ei ole oletuksena käytössä SSH:ta.

Tämä ei tietenkään ole Turingin vastuulla. Minun olisi pitänyt odottaa sitä kaapelia, mutta no.


Korjatakseni tämän, minun piti liittää kuva paikalliseen koneelleni ja lisätä käynnistysosioon tyhjä tiedosto nimeltä ssh . Tämä ottaisi SSH:n käyttöön oletuksena.


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


Nyt kaikki pisini olivat valmiita käytettäväksi. Liitin ne verkkoon ja aloin konfiguroida niitä. Ei ollut juurikaan määritettävää, koska aioin käyttää niitä Kubernetes-solmuina.


Mutta asiat kuten vim ja järjestelmän päivitys olivat välttämättömiä.


Turing 1

Tämä antoi minulle myös mahdollisuuden oppia käyttämään Tmuxia . Paras työkalu, jonka olen oppinut vähään aikaan.

Varastointi

Jos muistat muutaman kappaleen yllä, mainitsin, että 3. solmua käytettäisiin NFS-jaettuun asemaan. Minulla oli 1 Tt:n SSD-asema, jota aioin käyttää tähän tarkoitukseen. Minun piti alustaa se ja liittää se kolmanteen solmuun.


Mutta minun piti myös asentaa NFS-palvelin tähän solmuun ja määrittää se muihin solmuihin. Onko tämä suositeltavaa tuotantoympäristöön? Ei helvetti, mutta se on kotiklusteri, joten en ole siitä kovin huolissani.
Tmux1

Tässä ovat vaiheet, jotka tein NFS-palvelimen määrittämiseksi:

 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


Ensin tarkistin, että asema on asennettu oikein. Sitten asensin NFS-palvelimen:

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


Lisäsi sen fstab-tiedostoon varmistaakseen, että se oli asennettu käynnistyksen yhteydessä:

(seuraavan rivin lisääminen /etc/fstab tiedostoon)

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


Asenna nyt nfs-kernel-server:

 sudo apt update sudo apt install nfs-kernel-server


Ja lisään asemani /etc/exports -tiedostoon:

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


Nyt muihin solmuihin minun piti asentaa nfs-common:

 sudo apt update sudo apt install nfs-common


Ja aseman kytkeminen jokaiseen solmuun:

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

Tmux 0

Neofetch on asennettu kaikkiin solmuihin, koska pidän siitä.

Kubernetes-klusteri

En ollut koskaan aiemmin perustanut Kubernetes-klusteria tyhjästä, mutta olen katsonut paljon Jeff Geerlingin videoita aiheesta... Tämä on tarpeeksi kokemusta, eikö?


Jeff johdatti minut K3: aan käyttämällä Ansiblea , kevyttä Kubernetes-jakelua, joka sopii täydellisesti kotiklusteriani ja ennalta määritellyllä tavalla asentaa se, koska minulla ei ole esivaatimuksia tai ajatusta, miten se muuten asetetaan.


Asennus oli melko suoraviivaista. Minun piti asentaa se kaikkiin solmuihin, mutta minun oli varmistettava, että pääsolmu asennettiin ensimmäisenä.


Joten ensin kloonasin k3s-ansible-arkiston:

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


Sitten minun piti määrittää inventaariotiedosto. Pääsolmuni, kuten aiemmin mainitsin, oli vanha Raspberry Pi 4. Joten minun täytyi varmistaa, että se oli inventaariotiedoston ensimmäinen. Minun piti myös varmistaa, että muut solmut olivat oikeissa ryhmissä.:

 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:


Samassa tiedostossa minun piti määrittää salaustunnus. Tiedostossa kerrotaan, kuinka tämä tehdään, joten en mene tässä yksityiskohtiin.


Sitten minun piti ajaa pelikirja:

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


Siinä se. Mitä tulee asennukseen, minulla oli Kubernetes-klusteri käynnissä. Minun piti asentaa K9s paikalliselle koneelleni hallitakseni klusteria ja sitoa klusterin ./kube/config .

Sovellukset

Lopuksi minun piti asentaa sovellukset, joita halusin suorittaa klusterissa. Minulla oli ajatuksia siitä, mitä halusin.

  • Halusin mediapalvelimen ajoitetuilla latauksilla.


  • Pi-reikäinen esiintymä verkkoni DNS:ään ja estää kaikki mainokset kaikissa kodin laitteissa.


  • Retroarch- esiintymä vanhojen pelien pelaamiseen ja tallennettujen pelien jakamiseen kotiverkossani (katsomalla sinua Megaman Battle Network 6 kaikilla laitteillani)


Siellä arkistoni tulee sisään.
Arkisto 0

Mediapalvelimelle päätin käyttää:


Esimerkkinä näytän sinulle, kuinka asensin Sonarr kubectl -sovelluksella. Muut sovellukset asennettiin samalla tavalla.


Jokaista sovellusta varten loin 3 tiedostoa:

  • deployment.yaml on konfiguraatio jokaiselle sovellusta käyttävälle podille

     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 on palvelun kokoonpano, joka paljastaa sovelluksen klusterille

     apiVersion: v1 kind: Service metadata: name: sonarr spec: selector: app: sonarr ports: - port: 80 targetPort: 8989 type: ClusterIP
  • ingress.yaml ja tämä on ingressin kokoonpano, joka paljastaa sovelluksen verkkooni


Sitten otamme ne kaikki käyttöön kubectl :llä:

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


Kuten näet, käytän NFS-tuettua pysyvää tallennustilaa tiedoille ja sovellusten määrityksille.


Arkistosta löydät nfs-pv.yaml- ja nfs-pvc.yaml- tiedostot, joita käytin NFS-tallennustilan luomiseen.


Lisäksi loin toisen jatkuvan volyymivaatimuksen sovellusten määritystä varten.
K9s 0

Lopullinen rakennelma

Vaikka kotelo näyttää hämmästyttävältä, se on hieman liian iso Raspberry Pi Clusterille. Mini ITX -kuori olisi myös sopinut tarpeisiini, mutta minun on myönnettävä, että olen hullu tee-se-itse-juttuihin.
Täysi rakennus 0


Myös Sucker ledeille yleensä. En lisännyt koteloon valoja, mutta mielestäni levy tekee jo hyvää työtä. Valitettavasti tuulettimen nastat eivät olleet yhteensopivia levyn kanssa, enkä ostanut tuulettimen ohjainta tai nastaa emolevylle. Ehkä tulevaisuudessa.
Työskentely 0

Joskus sinun täytyy vain istua alas ja nauttia näkymistä.
Koko rakennus 1

Ja lopuksi, Turing Pi 2 Home Cluster on valmis ja toiminnassa, eikä taloni ole enää sotkussa.
Täysi rakennus 2

Tulevaisuus

Vain aika näyttää, mitä teen tälle klusterille.


Olen kuitenkin ajatellut Prometheuksen ja Grafanan lisäämistä saadakseni joitain mittareita ja mukavia kaavioita klusterin tarkistamiseksi.


Kaikkien Kubernetes-tiedostojeni siirtäminen Helmiin olisi myös hyvä idea.


Lopuksi, Retroarch-instanssi on edelleen työn alla. Ehkä työn alla on hieman liian optimistinen, koska pod elää CrashLoopBackOff-tilassa. Mutta minä pääsen sinne.

Loppu

Jos olet saavuttanut tämän viestin loppuun, kiitän sinua ajastasi. Toivon, että olet nauttinut siitä yhtä paljon kuin minä pidin sekä klusterin kokoamisesta että siitä kirjoittamisesta.