د 2022 په جون کې، زه د یوې بورډ په اړه د Kickstarter سره مخ شوم چې په یو وخت کې تر 4 پورې Raspberry Pi 4 Compute Modules لري.
د ډیر غور پرته، ما پریکړه وکړه چې د پروژې ملاتړ وکړم او بورډ واخلم.
دوه کاله ګړندی لاړ ، او زما تورینګ پای 2 لاهم په خپل بکس کې په یوه شیلف کې خلاص ناست و چې ژوند په لاره کې راوتلی و ، او زه ډاډه نه وم چې ولې ما دا په لومړي ځای کې اخیستی و.
په هرصورت، ما په پای کې پریکړه وکړه چې دا هڅه وکړم. ما غوښتل د کلسترینګ په اړه نور څه زده کړم او مخکې یې هیڅکله د کبرنیټس بشپړ کلستر نه و جوړ کړی. نو ، زه د مصرف حالت ته لاړم او درې راسبیري پای 4s (8GB رام ، 8GB داخلي ذخیره) او یو Nvidia Jetson Nano (4GB) ترلاسه کړم.
د بورډ استعداد ته په پام سره، زه کولی شم مختلف کمپیوټري ماډلونه مخلوط کړم. ما پریکړه وکړه چې د جیټسن نانو شامل کړم، فکر کوم چې دا به ما ته اجازه راکړي چې په راتلونکي کې د CUDA چلوونکو سره تجربه وکړم او د ماشین زده کړې ته لاړ شم. څوک پوهیږي؟ زه ممکن حتی پدې کوبرنیټس کلستر کې زما د خپل GPT معاون کوربه توب پای ته ورسوم.
(Spoilers: It didn't happen)
زما لومړني پلان کې د 3 Pi 4 CM او د جیټسن نانو په بورډ کې کوربه توب شامل و. همچنان ، ما پلان درلود چې د ذخیره کولو لپاره د 1TB SSD ډرایو او د انټرنیټ لاسرسي لپاره Wi-Fi کارت وکاروم. په هرصورت ، د جیټسن نانو تنظیم کولو پروسې او د دې ضعیف اسنادو سره د ډیری ستونزو سره مخ کیدو وروسته ، ما پریکړه وکړه چې دا بیرته ورکړم. پرځای یې ، ما د څلورم راسبیري پای 4 غوره کړ.
سربیره پردې ، ما یو زوړ Raspberry Pi 4 درلود چې شاوخوا 4GB رام سره پروت و ، نو ما پریکړه وکړه چې دا د پنځم نوډ په توګه شامل کړم.
د تورینګ پای 2 د مینی ITX فارم فکتور بورډ دی چې کولی شي تر څلورو پورې د راسبیري پای کمپیوټر ماډلونه ځای په ځای کړي (د جیټسن نانوس او د تورینګ کمپیوټر ماډل سره هم مطابقت لري). دا د کمپیوټر ماډلونو چمکولو لپاره د PCI ایکسپریس بندر، دوه NVME بندرونه، دوه SATA بندرونه، او یو USB بندر لري.
نوډ 1 :
د USB 2.0 پورټ (د کمپیوټر ماډلونو چمکولو لپاره)
HDMI پورټ (د ډیبګ کولو لپاره)
د PCI ایکسپریس بندر (د وای فای کارت لپاره)
نوډ 2 :
زه به دا د NVME ذخیره کولو لپاره وکاروم ، مګر دا د Raspberry Pi 4s سره مطابقت نلري.
نوډ 3 :
په هرصورت، د SATA بندرونه دلته کارول کیدی شي. نو، دا نوډ به د NFS شریک ډرایو ولري.
نوډ 4 :
د USB 3.0 بندرونه (که زه کله هم ورته اړتیا لرم).
زما زوړ راسبیري :
په نهایت کې ، نظر دا دی چې د ځینې اضافو سره د میډیا سرور کوربه توب وکړي.
دا یو څه موده کیږي چې ما یو کمپیوټر سره یوځای کړی، او دا لومړی ځل و چې ما د کمپیوټر ماډلونو او د دوی اډاپټرونو سره لوبې کولې، نو دا د اونۍ پای لپاره خورا ساتیري وه. څنګه چې زما بټوه ګرمه وه خو بیا هم نه سوځي، ما فکر وکړ، ولې دوزخ د هغې لپاره ښه قضیه نه اضافه کوي؟
د بورډ د مینی ITX فارم فاکتور ته په پام سره، زه کولی شم دا په هر هغه زړه پورې ITX قضیه کې فټ کړم چې زه یې په ایمیزون کې موندلی شم. کیوب 500 ما له لارې ترلاسه کړ. ما دمخه د DIY کلستر جوړ کړی و، د داسې شی لپاره غوره قضیه، یو DIY هم و.
ما د 650W بریښنا رسولو (ټول اوورکیل) ، یو کوچنی وای فای مینی PCI ایکسپریس کارت ، او د 1TB SATA SSD هم اضافه کړ.
د 'شیان' یوځای کول خورا ساده وو. د کمپیوټ ماډلونو او د دوی د تودوخې ډوبونو تر مینځ یو څه حرارتي پیسټ او د دوی اډاپټرونو سره یوځای کول مخکې له دې چې په تورینګ بورډ کې ترتیب شي؛
ما امر ته اشاره وکړه ځکه چې دا د پروژې یوه مهمه برخه وه. د تورینګ پای 2 د کمپیوټري ماډلونو په اوږدو کې توزیع شوي د دې بندرونو مدیریت وړاندیز کوي. پدې حالت کې، د PCI ایکسپریس 1 د لومړي نوډ لخوا اداره کیده پداسې حال کې چې د SSD ډرایو د دریم لخوا اداره کیده. دوهم کولی شي د NVME بندر اداره کړي او څلورم په بل SSD IIRC کې ، مګر ما همدا اوس د دوی لپاره هیڅ ګټه نه درلوده.
ما مخکې د راسبیري پیس نصب کړی مګر هیڅکله موډولونه حساب نه کوي. د تورینګ پای 2 په شا کې یو USB پورټ لري چې د کمپیوټر ماډلونو فلش کولو لپاره کارول کیږي.
له بده مرغه، ما د USB A څخه USB A کیبل کارولو هڅه وکړه چې د ډیټا لیږد کیبل نه و، نو پداسې حال کې چې ما د ایمیزون لپاره د کیبل وړاندې کولو لپاره انتظار کاوه، ما د کمپیوټر ماډلونو فلش کولو بله لاره وموندله.
تورینګ پای 2 د CLI وسیله لري چې نه یوازې د کمپیوټر ماډلونو فلش کولو لپاره کارول کیدی شي بلکه د دوی بریښنا اداره کولو ، بیا تنظیم کولو ، ځینې احصایې چیک کولو او داسې نور لپاره هم کارول کیدی شي.
هغه کمانډ چې د کمپیوټر ماډلونو نصبولو لپاره کارول کیږي دا وو:
tpi flash -i /path/to/image -n {nodes 1 to 4}
خورا ساده پروسه ما له ځان سره فکر کاوه مخکې لدې چې پوه شوم چې د راسبیان عکس د ډیفالټ لخوا فعال شوي 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
اوس، زما ټول پیس د کارولو لپاره چمتو وو. ما دوی له شبکې سره وصل کړل او تنظیم یې پیل کړ. د تنظیم کولو لپاره لږ څه شتون درلود ځکه چې زه به یې د کوبرنیټس نوډونو په توګه وکاروم.
مګر شیان لکه ویم او د سیسټم تازه کول اړین وو.
دې ما ته دا فرصت هم راکړ چې د Tmux کارولو څرنګوالی زده کړم. غوره وسیله چې ما په یو څه وخت کې زده کړې.
که تاسو پورته یو څو پراګرافونه په یاد ولرئ، ما یادونه وکړه چې دریم نوډ به د NFS شریک شوي ډرایو لپاره وکارول شي. ما د 1TB SSD ډرایو درلود چې زه یې د دې هدف لپاره کاروم. زه باید دا فارمیټ کړم او په دریم نوډ کې یې نصب کړم.
مګر ما اړتیا درلوده چې پدې نوډ کې د 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 په کارولو سره K3s ته لارښود کړ ، د لږ وزن لرونکي Kubernetes توزیع چې زما د کور کلستر لپاره مناسب دی او د نصب کولو دمخه ټاکل شوې لاره ځکه چې زه دمخه اړتیاوې نلرم او نه هم دا نظر لرم چې دا څنګه تنظیم کړم.
نصب کول خورا ساده وو. زه باید دا په ټولو نوډونو کې نصب کړم، مګر ما باید ډاډ ترلاسه کړم چې ماسټر نوډ لومړی نصب شوی و.
نو لومړی ، ما د k3s - ځواب وړ ذخیره کلون کړه:
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
همدا و. تر هغه ځایه چې نصب ته ځي ، ما د کوبرنیټس کلستر پورته او روان و. ما باید په خپل محلي ماشین کې K9s نصب کړی وای ترڅو کلستر اداره کړم او کلستر ./kube/config
فایل ته وتړم.
په نهایت کې ، زه باید هغه غوښتنلیکونه نصب کړم چې زه غواړم په کلستر کې پرمخ وړم. ما د هغه څه په اړه ځینې نظرونه درلودل چې زه یې غواړم.
دا هغه ځای دی چې زما ذخیره راځي.
د میډیا سرور لپاره ، ما پریکړه وکړه چې وکاروم:
د مثال په توګه ، زه به تاسو ته وښیم چې څنګه ما 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
او دا د ننوتلو لپاره ترتیب دی چې زما شبکې ته غوښتنلیک افشا کوي
بیا موږ دا ټول 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 ذخیره کولو لپاره کارولې.
برسیره پردې، ما د غوښتنلیکونو ترتیبولو لپاره یو بل دوامداره حجم ادعا جوړه کړه.
که څه هم قضیه حیرانونکې ښکاري ، دا د راسبیري پای کلسټر لپاره یو څه خورا لوی دی. د مینی ITX قضیه به زما اړتیاوې هم مناسبې کړي ، مګر زه باید اعتراف وکړم ، زه د DIY توکو لپاره سوکر یم.
همچنان ، په عمومي ډول د LEDs لپاره سوکر. ما په قضیه کې نور څراغونه ندي اضافه کړي، مګر زه فکر کوم چې بورډ لا دمخه ښه دنده ترسره کوي. له بده مرغه، د فین پنونه د بورډ سره مطابقت نلري، او ما د مور بورډ لپاره د فین کنټرولر یا پن نه اخیستی. زه ممکن په راتلونکي کې.
ځینې وختونه، تاسو باید بیرته کښیناستئ او د لید څخه خوند واخلئ.
او په نهایت کې ، د تورینګ پای 2 کور کلستر پورته او روان دی ، او زما کور نور ګډوډ ندی.
یوازې وخت به ووایی چې زه به د دې کلستر سره څه وکړم.
په هرصورت، زه د پرومیټیوس او ګرافانا اضافه کولو په اړه فکر کوم ترڅو په کلستر کې د چک کولو لپاره ځینې میټریکونه او ښه ګرافونه ولري.
هیلم ته زما د ټولو کبرنیټ فایلونو لیږدول به هم ښه نظر وي.
په نهایت کې ، د Retroarch مثال لاهم په کار کې دی. شاید په کارونو کې یو څه ډیر خوشبین وي په دې شرط چې پوډ په CrashLoopBackOff حالت کې ژوند کوي. خو زه به هلته ورشم.
که تاسو د دې پوسټ پای ته رسیدلی یاست، زه ستاسو د وخت لپاره مننه کوم. زه امید لرم چې تاسو له دې څخه ډیر خوند اخیستی وي لکه څنګه چې ما دواړه کلستر یوځای کړی او د هغې په اړه یې لیکلي.