2022 оны 6-р сард би нэгэн зэрэг 4 хүртэлх Raspberry Pi 4 тооцоолох модультай байх боломжтой самбарын тухай Kickstarter-тай танилцсан.
Нэг их бодолгүй би төслийг дэмжиж, самбар худалдаж авахаар шийдсэн.
Хоёр жил хурдан урагшлахад миний Turing Pi 2 хайрцгандаа нээлгүйгээр тавиур дээр сууж байсан бөгөөд амьдрал нь саад болж байсан тул би яагаад үүнийг анх худалдаж авснаа мэдэхгүй байв.
Гэсэн хэдий ч би эцэст нь туршиж үзэхээр шийдсэн. Би кластерын талаар илүү ихийг мэдэхийг хүсч байсан бөгөөд урьд өмнө хэзээ ч эхнээс нь бүрэн Kubernetes кластер байгуулж байгаагүй. Тиймээс би зарцуулалтын горимд орж гурван Raspberry Pi 4 (8 ГБ RAM, 8 ГБ дотоод санах ой) болон нэг Nvidia Jetson Nano (4 ГБ) авсан.
Самбарын олон талт байдлыг харгалзан би өөр өөр тооцооллын модулиудыг хольж болно. Би Jetson Nano-г оруулахаар шийдсэн бөгөөд энэ нь надад ирээдүйд CUDA драйверуудыг туршиж үзэх, машин сургалтын талаар судлах боломжийг олгоно гэж бодож байна. Хэн мэдэх вэ? Би энэ Kubernetes кластер дээр өөрийн GPT туслахаа байршуулж магадгүй юм.
(Spoilers: It didn't happen)
Миний анхны төлөвлөгөөнд самбар дээр байрлуулсан 3 Pi 4 CM болон Jetson Nano багтсан. Мөн би хадгалахад зориулж 1TB SSD диск, интернетэд нэвтрэх Wi-Fi карт ашиглахаар төлөвлөж байсан. Гэсэн хэдий ч Jetson Nano-г тохируулах явцад олон бэрхшээлтэй тулгарсны дараа, би үүнийг буцааж өгөхөөр шийдсэн. Үүний оронд би дөрөв дэх Raspberry Pi 4-ийг сонгосон.
Нэмж дурдахад надад 4 ГБ RAM-тай хуучин Raspberry Pi 4 байсан тул би үүнийг тав дахь зангилаа болгон оруулахаар шийдсэн.
Turing Pi 2 нь Mini ITX форматын самбар бөгөөд дөрвөн Raspberry Pi тооцоолох модулийг багтаах боломжтой (мөн Jetson Nanos болон Turing Compute Module-тэй нийцдэг). Энэ нь PCI Express порт, хоёр NVME порт, хоёр SATA порт, тооцоолох модулиудыг анивчуулах USB порттой.
Зангилаа 1 :
USB 2.0 порт (Тооцоолох модулиудыг анивчуулах)
HDMI порт (дибаг хийх)
PCI Express порт (Wi-Fi картын хувьд)
Зангилаа 2 :
Би үүнийг NVME санах ойд ашиглах байсан, гэхдээ энэ нь Raspberry Pi 4s-тэй тохирохгүй байна.
Зангилаа 3 :
Гэхдээ SATA портуудыг энд ашиглаж болно. Тиймээс энэ зангилаа NFS дундын драйвтай байх болно.
Зангилаа 4 :
USB 3.0 портууд (хэрэв надад хэрэгтэй бол).
Миний хуучин бөөрөлзгөнө :
Эцсийн эцэст, санаа нь зарим нэмэлт хэрэгсэл бүхий медиа серверийг байрлуулах явдал юм.
Би компьютер угсарснаас хойш багагүй хугацаа өнгөрч, би анх удаа Compute Modules болон тэдгээрийн адаптеруудтай тоглож байсан тул амралтын өдрүүдээр маш хөгжилтэй байсан. Миний хэтэвч халуу оргиж байсан ч шатахгүй байгаа тул яагаад түүнд сайхан хайрцаг нэмж болохгүй гэж бодсон юм.
Самбарын Mini ITX форм хүчин зүйлийг харгалзан би үүнийг Amazon дээрээс олж болох ямар ч гоёмсог ITX хайрцагт суулгаж болно. Qube 500 намайг амжилттай болгосон. Би аль хэдийн DIY кластер хийж байсан, ийм зүйлд хамгийн тохиромжтой тохиолдол бол DIY юм.
Би мөн 650W тэжээлийн хангамж (нийт хэт ачаалал), нэг жижиг Wi-Fi Mini PCI Express карт, 1TB SATA SSD нэмсэн.
"Зүйлс"-ийг нэгтгэх нь маш энгийн байсан. Тооцооллын модулиуд болон тэдгээрийн дулаан шингээгчийн хооронд бага зэрэг дулааны оо түрхэж, тэдгээрийг Тюринг самбарт дарааллаар нь тохируулахын өмнө адаптеруудтай нь зуурна;
Төслийн чухал хэсэг байсан учраас би тушаалыг дурдлаа. Turing Pi 2 нь тооцооллын модулиудаар тархсан портуудын удирдлагыг санал болгодог. Энэ тохиолдолд PCI Express 1-ийг Эхний зангилаа удирдаж, SSD дискийг 3-р зангилаагаар удирдаж байсан. 2-р нь NVME портыг, нөгөө SSD IIRC-ийн 4-р порттой ажиллах боломжтой байсан ч би яг одоо тэдгээрийг ашиглах боломжгүй байсан.
Би Raspberry Pis-г өмнө нь суулгаж байсан боловч тооцоолох модулийг хэзээ ч суулгаагүй. Turing Pi 2 нь арын хэсэгт USB порттой бөгөөд үүнийг тооцоолох модулиудыг анивчихад ашигладаг.
Харамсалтай нь би өгөгдөл дамжуулах кабель биш USB A-аас USB A кабель ашиглахыг оролдсон тул Амазон кабель хүргэхийг хүлээж байхдаа Тооцоолох модулиудыг анивчуулах өөр аргыг олсон.
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, системийг шинэчлэх гэх мэт зүйлс зайлшгүй шаардлагатай байсан.
Энэ нь надад Tmux-г хэрхэн ашиглах талаар суралцах боломжийг олгосон. Миний хэсэг хугацаанд сурсан хамгийн шилдэг хэрэгсэл.
Хэрэв та дээрх хэдэн догол мөрийг санаж байгаа бол 3-р зангилаа нь NFS дундын драйвт ашиглагдана гэж би дурдсан. Би энэ зорилгоор ашиглах гэж байсан 1TB SSD дисктэй байсан. Би үүнийг форматлаад 3-р зангилаанд холбох хэрэгтэй болсон.
Гэхдээ би энэ зангилаанд NFS сервер суулгаж, бусад зангилаанд тохируулах шаардлагатай болсон. Үүнийг үйлдвэрлэлийн орчинд ашиглахыг зөвлөж байна уу? Үгүй ээ, гэхдээ энэ нь гэрийн кластер учраас би үүнд санаа зовохгүй байна.
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
Би сонирхолтой учраас Neofetch бүх зангилаанд суулгасан.
Би өмнө нь хэзээ ч Кубернетес кластерыг эхнээс нь байгуулж байгаагүй ч энэ сэдвээр Жефф Гирлингийн олон видеог үзэж байсан... Энэ бол хангалттай туршлага, тийм ээ?
Жефф намайг Ansible ашиглан K3-ууд руу хөтөлсөн бөгөөд энэ нь миний гэрийн кластерт тохирсон хөнгөн Кубернетес түгээлт ба үүнийг суулгахад урьдчилан тодорхойлсон арга, учир нь надад урьдчилсан шаардлага байхгүй, өөрөөр үүнийг хэрхэн тохируулах тухай санаа ч байхгүй.
Суурилуулалт нь маш энгийн байсан. Би үүнийг бүх зангилаанд суулгах ёстой байсан ч мастер зангилаа хамгийн түрүүнд суулгасан эсэхийг шалгах ёстой байсан.
Тиймээс эхлээд би 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 кластер ажиллаж байсан. Би кластерыг удирдаж, кластерийг ./kube/config
файлтай холбохын тулд өөрийн дотоод машин дээрээ K9s суулгах шаардлагатай болсон.
Эцэст нь би кластерт ажиллуулахыг хүссэн програмуудаа суулгах хэрэгтэй болсон. Надад хүссэн зүйлийнхээ талаар зарим санаанууд байсан.
Эндээс л миний репозитор орж ирдэг.
Медиа серверийн хувьд би ашиглахаар шийдсэн:
Жишээ болгон би kubectl
ашиглан Sonarr-г хэрхэн суулгасанаа харуулах болно. Бусад програмуудыг ижил төстэй байдлаар суулгасан.
Програм бүрийн хувьд би 3 файл үүсгэсэн:
deployment.yaml
нь програмыг ажиллуулж байгаа pods бүрийн тохиргоо юм
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
бөгөөд энэ нь програмыг миний сүлжээнд харуулах нэвтрэх тохиргоо юм
Дараа нь бид kubectl
ашиглан бүгдийг нь байрлуулна:
kubectl apply -f sonarr/deployment.yaml kubectl apply -f sonarr/service.yaml kubectl apply -f sonarr/ingress.yaml
Таны харж байгаагаар би өгөгдөл болон програмуудын тохиргоонд NFS-ээр дэмжигдсэн байнгын хадгалах санг ашиглаж байна.
Репозитороос та миний NFS санах ойг үүсгэхэд ашигласан nfs-pv.yaml болон nfs-pvc.yaml файлуудыг олох боломжтой.
Нэмж дурдахад, би програмуудын тохиргоонд зориулж өөр нэг байнгын эзэлхүүний нэхэмжлэлийг үүсгэсэн.
Хэдий уг хайрцаг нь гайхалтай харагдаж байгаа ч Raspberry Pi кластерт арай дэндүү том юм. Mini ITX гэр нь миний хэрэгцээнд тохирсон байх байсан, гэхдээ би өөрөө DIY зүйлд дуртай гэдгээ хүлээн зөвшөөрөх ёстой.
Мөн ерөнхийдөө LED-д зориулсан соруулагч. Би хайрцагт нэмэлт гэрэл нэмээгүй ч самбар нь аль хэдийн сайн ажиллаж байна гэж бодож байна. Харамсалтай нь сэнсний зүү нь самбарт тохирохгүй байсан бөгөөд би сэнс хянагч эсвэл эх хавтангийн зүү худалдаж аваагүй. Би ирээдүйд магадгүй.
Заримдаа зүгээр л хойш суугаад үзэмжийг үзэх хэрэгтэй.
Эцэст нь, Turing Pi 2 Home Cluster ажиллаж байгаа бөгөөд миний байшин эмх замбараагүй байхаа больсон.
Энэ кластертай юу хийхийг цаг хугацаа л харуулах болно.
Гэсэн хэдий ч би Prometheus болон Grafana-г нэмж кластерийг шалгахын тулд зарим хэмжүүр, сайхан графиктай болгох талаар бодож байсан.
Миний бүх Kubernetes файлуудыг Helm руу шилжүүлэх нь бас сайн санаа байх болно.
Эцэст нь хэлэхэд, Retroarch-ийн жишээ одоо ч ажиллаж байна. Под нь CrashLoopBackOff төлөвт амьдардаг тул ажил нь хэтэрхий өөдрөг байж магадгүй юм. Гэхдээ би тэнд очно.
Хэрэв та энэ нийтлэлийн төгсгөлд хүрсэн бол цаг зав гаргасанд баярлалаа. Кластерыг эвлүүлж, энэ тухай бичихэд над шиг танд таалагдсан гэж найдаж байна.