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.
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).
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.
(Spoilers: It didn't happen)
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.
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.
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 :
Lopulta ajatuksena on isännöidä Mediapalvelin, jossa on joitain lisäosia.
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?
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.
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;
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öä.
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ä.
Tämä antoi minulle myös mahdollisuuden oppia käyttämään Tmuxia . Paras työkalu, jonka olen oppinut vähään aikaan.
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.
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
Neofetch on asennettu kaikkiin solmuihin, koska pidän siitä.
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
.
Lopuksi minun piti asentaa sovellukset, joita halusin suorittaa klusterissa. Minulla oli ajatuksia siitä, mitä halusin.
Siellä arkistoni tulee sisään.
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.
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.
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.
Joskus sinun täytyy vain istua alas ja nauttia näkymistä.
Ja lopuksi, Turing Pi 2 Home Cluster on valmis ja toiminnassa, eikä taloni ole enää sotkussa.
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.
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.