In postul trecut am scris despre un NAS home-made. Nu e o idee rea, ar fi fost maximum de performant pentru ce am eu nevoie dar nu am facut proiectul. M-am oprit la un NAS comercial, adica ala din titlu. Am vazut niste dezavantaje care m-au enervat, in speta lipsa pe piata a placilor de baza cu 4-6 porturi SATA si 2 NVME-uri. Domne, nu exista! Eu spun ca e blat cu aia care fac NAS-uri, ca altfel cum sa nu fie posibil sa pui 2NVME si 4SATA pe langa un PCIEx cu care sa extinzi cu diverse nebunii?
Am ales calea usoara, nu imi pare rau, ba mai mult decat atat, chiar ma bucur ca am facut pasul.
Configuratia este – 2 nvme x 512GB – folosit pentru cache, raid0 ca sa am mai mult. Riscul este ca daca moare vreunu as putea sa pierd date…. (filme, vm-uri sau containere de test, deci nimic grav) – 4 sata x 10TB HGST HUH721010ALE604, raid 5. M-am gandit sa le pun la raid10 dar pierdeam 2 disk-uri de capacitate. Asa un disk poate sa pice si nu pierd date vs 2 disk-uri care pot pica. E safe si asa, parerea mea. – 32 GB RAM – 2 sodimm-uri de 16GB de la Kingston, pe care le aveam deja.
Likes: – Compact si cat de cat silentios – 2 x 2.5gbps retea – Plex / Qbittorrent / *arr ruleaza direct pe NAS, nu mai trebuie sa ruleze pe nodurile de proxmox – Out of the box cam orice share ai nevoie, pot sa il folosesc ca timemachine pentru laptops
Software-ul pe care il poti instala pe el este cat se poate de divers, folosesc deja container station si am cateva containere Docker, printre care si tehnitium dns pe care il folosesc pentru dhcp dar si DNS blackhole in locul lui PiHole. Container station poate porni si k3s. Pe langa container station mai este un Virtualisation Station in care poti rula VM-uri micute (nu as recomanda ceva resource intensive din cauza procesorului)…
Consum: – In jur de 40W in idle. Daca as fi avut sistemul de operare instalat pe NVME-uri ar fi intrat in idle disk-urile rotative si as fi economisit vreo 20W… asta atata vreme cat nu ar fi soft nici un request catre ele (qbittorrent oprit, nfs oprit…) deci nu se aplica.
Il folosesc deja sa rulez din proxmox VM-uri de pe un shared storage (NFS mi-a parut cel mai simplu si rapid), am caching pe acel volum deci nu trag “direct” de pe discurile rotative – cache read-write, evident. Il folsesc sa fac backup-uri VM-urilor din proxmox, zilnic. In laboratorul de k8s (kubernetes) deja e folosit pentru persistent storage… Very nice!
Un Network Attached Storage (NAS) este o solutia pentru stocarea datelor pe un sistem care are si ceva redundanta, iti tine datele protejate printr-un RAID, mai ai si alte 2-3 feature-uri cum ar fi backup, etc. În loc să investesc într-un NAS comercial (Synology, QNAP, etc), am decis să construiesc unul home-made cu componente custom, dar la un preț mult mai accesibil. Un NAS comercial poate fi mai simplu dar cine nu are chef de un challenge? :)) Asta e faza de documentare.
Componentele Hardware
Pentru acest setup, am ales următoarele componente – lista se poate schimba:
Carcasa: Jonsbo N2 Mini-ITX Black (cam 20cm/20cm/23cm – e cubica)
Hard Disk-uri pentru stocare: 4 x HGST HUH721010ALE604 (10TB fiecare)
NVMe pentru caching: Reutilizare NVMe 512GB de pe pve01 și pve02
Mai am un adaptor HP Smart Array P420 controller cu 1GB, cu 2 porturi SAS cu split in 8 porturi SATA pentru ca cele 4 porturi onboard ar asigura conectivitate pentru doar 4 disk-uri…. si eu am mai multe.
Sistemul de Operare: TrueNAS Core
Ca sistem de operare am ales TrueNAS Core, pe care l-am mai testat in trecut si mi-a placut ca este customizabil si pare ca acopere cam toate usecase-urile de care am nevoie, un sistem de operare open-source bazat pe FreeBSD, recunoscut pentru fiabilitate și suportul nativ pentru ZFS. TrueNAS imi va permite sa am si cateva VM-uri always on, sau containere…
Configurarea Disk-urilor cu ZFS
Discurile vor fi setate intr-un raid, un pool ZFS configurat astfel:
3 HDD-uri pentru date
1 HDD pentru paritate
De asemenea, voi utiliza un NVMe pentru caching, ceea ce va îmbunătăți semnificativ performanța accesului la date. ZFS oferă:
Caching – folosește RAM și SSD pentru accelerarea accesului la date.
Redundanță și fiabilitate – configurarea RAID-Z1 permite ca un disc să pice fără pierderi de date.
Snapshots și rollback – in special util daca ai VM-uri…
Compresie automată – economisește spațiu fără impact major asupra performanței.
Cu un impact mare pe RAM pot porni si deduplicare – cam 1GB la 1TB de date. Cu 32GB ram nu prea as putea sa fac asta fara sa consum tot ram-ul, cred ca ram la compresie, mai salveaza acolo un pic de storage.
Utilizările NAS-ului
NAS-ul nu va fi doar un simplu spațiu de stocare, ci va funcționa și ca un home-server:
Server de Plex – pentru streaming media (filme, muzică)
Apache-PHP-MySQL – pentru hostarea site-ului asta sa zicem
Stocare de date pentru media – pentru nr.1
Target iSCSI pentru VM-uri – VM-urile de pe pve00, pve01 și pve02 vor putea folosi NAS-ul ca storage shared, permițând High Availability (HA)
Technitium DNS – pentru gestionarea DHCP și DNS în rețea
Servarr Suite – implementare Radarr și Sonarr
Backup Repository – cel mai probabil, un share NFS pentru HomeLab
Nod witness pentru clusterul PVE – va ajuta la menținerea quorum-ului în cazul clusterului Proxmox
Extindere viitoare: Cluster Kubernetes și upgrade de rețea
Dacă rezultatele sunt pozitive, voi lua în considerare refolosirea clusterului Proxmox (pve00, pve01, pve02) pentru a crea un cluster Kubernetes bare-metal… si ma gandeam ca as putea adauga o placa de retea de 2.5gbps, ca sa nu am un bottleneck in retea. (+switch ca acum am doar 1gbps)
Dezavantaje:
Deși un NAS home-made oferă flexibilitate și performanță la un preț mai mic, există câteva dezavantaje față de un sistem NAS comercial:
Consum mai mare de energie – sistemul asta poate sa consume mai mult curent decat un NAS comercial
Factorul de formă și zgomotul – poate nu la fel de compact si de silentios
Estimari consum (W)
Voi face o estimare aproximativă a consumului de energie în regim idle pentru ca 80% din timp sa fie idle, parerea mea:
Procesor Intel Core i3-12100 – ~10W în idle
Placă de bază + RAM 32GB DDR4 – ~8-10W
SSD SATA Kingston (pentru OS) – ~2W
NVMe SSD pentru caching – ~3W
HDD-uri 4x HGST HUH721010ALE604 – ~5W per HDD în idle → ~20W total
Sursa Sharkoon SilentStorm SFX Bronze 450W – Eficiență ~85%, deci pierderi de ~5W în idle
HP Smart Array P420 controller cu 1GB,– ~30W
Estimare totală în idle: ~80-85W
Cel mai mare consumator este HP Smart Array. În funcție de activitatea discului și a procesorului, consumul poate crește, mai ales în load (unde poate ajunge la peste 100W, lejer as spune 150W in load mai serios). Dacă HDD-urile intră în sleep mode, consumul poate scădea cu 20W in total (si asta e doar teoretic pentru ca o sa avem ZFS si o sa doarma din parti).
Un NAS QNAP TS-464 are un consum în idle de aproximativ 18-25W fără HDD-uri și în jur de 45-55W cu 4 HDD-uri HGST HUH721010ALE604. În load, consumul poate ajunge la 65-80W (are o sursa de 90W) în funcție de utilizare. Prin comparație, NAS-ul home-made de mai sus consumă ~80-85W în idle și poate ajunge la 110-115W+ în load.
Cost și concluzie
Costul total al componentelor a fost de aproximativ 2500 RON, o sumă sub prețul unui NAS comercial cu discuri și performanțe similare. Prin această abordare DIY, am obținut un sistem scalabil (mai pot adauga / schimba ram-ul, pana la 64GB cat imi permite placa de baza), performant (cu i3-ul ala generatia 12 poti face multe) și adaptat exact nevoilor mele. Consumul lunar ar putea fi de aproximativ 65-70KWh, transformat in minim 50 de lei in plus pe factura de curent, pentru sistemul home made, si un pic mai mic pentru un sistem comercial (pentru qnap, 25 de lei in plus pe luna la factura de curent). Cel mai mare consumator sunt disk-urile si adaptorul SAS. 4 disk-uri sata, 1 disk ssd sata, 1 nvme. loc de expansiune pentru 1 disk dar as avea incredere aproape totala in sistem.
Mai am statia mea de lucru, cu 64GB ram, i7-12700K, 4 nvme-uri (1x1TB+3x2TB) si are deja 6 porturi sata. Daca ii adaug 4 disk-uri sata ajunge la un consum idle asemanator cu ce vreau eu sa construiesc 🙂 oare se merita sa fac un sistem nou? (approx 45W idle + 20W de la 4 sata…)
Pentru a reduce consumul:
Adaptorul HP Smart Array P420 poate fi inlocuit cu altceva – ceva gen “pciexpress to 4*sata adapter” sau as putea folosi m2-ul de wifi sa conectez 2 sata. ar scadea cu 30w consumul in idle…
As putea lua o placa itx cu procesor mai slab integrat (sunt unele cu Celeron J sau N100) – dar tradeoff e performanta mai mica si ne limitam doar la NAS, nu si VMs si nebunii)
As putea schimba procesorul cu Intel Pentium Gold G7400…
As putea sa-l tin oprit.
Concluzie
E prea mult
adaptor m2-sata (merge pe m2-ul de wifi)adaptor m2 la 6 sata (merge pe m2-ul de nvme)adaptor pciexpress la 4 sata, pe singurul pciexpress (sunt si versiuni cu mai multe sata)
Pe propria piele am decis sa testez versiunea gratuita a lui Cloudflare. Doream un loc unde sa hostez dns-ul pentru ill.ro, am zis ca las pe locul 2 afraid.org pentru moment. Avantajele unui cont gratuit Cloudflare pentru mine ar fi – zona unde sa tin DNS-ul si mai mult decat atat https gratuit – aveam si inainte pe LetsEncrypt dar am zis sa incerc si Cloudflare.
Daca iti hostezi blogul acasa, expunerea acestuia direct pe internet vine cu riscuri de securitate. Folosind un cont gratuit Cloudflare pentru gestionarea DNS-ului si protejarea traficului, poti obtine beneficii semnificative atat in ceea ce priveste securitatea, cat si performanta site-ului tau.
1. Securitate sporita prin filtrarea traficului
Cloudflare functioneaza ca un proxy intre vizitatori si serverul tau, ceea ce inseamna ca atacurile directe asupra IP-ului tau real sunt mult mai dificie. Unul dintre cele mai mari avantaje este posibilitatea de a configura firewall-ul astfel incat sa permita accesul pe portul 443 doar de la IP-urile Cloudflare.
Cum functioneaza?
Cloudflare ofera o lista de IP-uri pe care le poti folosi pentru a permite accesul doar de la infrastructura lor. Lista actualizata de IP-uri Cloudflare poate fi gasita aici: Cloudflare IP Ranges.
In pfSense/omada sau orice alt firewall, poti configura reguli pentru a bloca accesul direct din internet pe portul 443 si sa permiti doar IP-urile Cloudflare.
Acest lucru inseamna ca atacurile automate sau scanarile de porturi nu vor ajunge la serverul tau, deoarece doar traficul proxy Cloudflare este acceptat.
2. Protectie impotriva atacurilor DDoS
Cloudflare include in planul gratuit protectie de baza impotriva atacurilor DDoS, filtrand cererile malitioase si blocand traficul suspect. Acest lucru este esential pentru selfhosting, deoarece conexiunea ta nu are latimea de banda necesara pentru a sustine un atac de amploare (1GB de la RDS poate fi suficient, dar sigur nu ai infrastructura sa treci printr-un DDoS).
3. Cache si imbunatatirea performantelor
Cloudflare poate prelua o parte din continutul static al site-ului tau (imagini, CSS, JavaScript) si sa il serveasca direct din reteaua lor globala, reducand astfel incarcarea pe serverul tau. Acest lucru duce la:
Timp de incarcare mai rapid pentru vizitatori
Consum mai redus de resurse pe serverul tau
Mai putina latime de banda utilizata pe conexiunea ta de internet
4. Certificat SSL gratuit
Activand Cloudflare, poti obtine un certificat SSL gratuit si sa iti securizezi conexiunea HTTPS fara a fi nevoie sa instalezi si sa reinnoiesti manual certificate pe serverul tau – asta mie imi pare un mare avantaj ca mi-a expirat de cateva ori certificatul de la LetsEncrypt ca nu aveam portul corect expus. Dar daca dadea eroarea aia de certificat…. se supara cineva? :))
5. Ascunderea IP-ului real al serverului
Atunci cand folosesti Cloudflare, adresa IP a serverului tau ramane pitita, ceea ce inseamna ca un atacator nu poate identifica cu usurinta unde este hostat blogul tau. Acest lucru iti protejeaza infrastructura si reduce sansele unor atacuri tintite.
6. Beneficiile unui plan platit
Daca esti bogat si decizi sa cumperi macar cea mai basic subscriptie Cloudflare, vei avea acces la functii avansate precum:
Load Balancing – distribuirea traficului intre mai multe servere pentru a imbunatati disponibilitatea si performanta.
WAF (Web Application Firewall) – protejarea aplicatiilor web impotriva atacurilor comune, cum ar fi SQL injection si XSS.
Prioritizare la mitigarea atacurilor DDoS – protectie imbunatatita impotriva atacurilor mai sofisticate.
Reguli personalizate pentru firewall – control mai granular asupra traficului si atacurilor blocate.
Analize detaliate despre trafic – acces la rapoarte avansate despre cine acceseaza site-ul tau si potentiale amenintari.
Concluzie
In Cloud e simplu, cu toate ca servicii asemanatoare cloudflare se puteau tine acasa sub alte forme / solutii cred ca asta e cea mai rapida metoda, in doar cativa pasi, prin care poti sa te protejezi un pic.
La munca am tot auzit de Helm și Helm Charts. Termeni care înseamnă ceva gen „instalează x și y cu Helm” sau „upgrade cu Helm Charts”. Deci, ce naiba sunt Helm și Charts?
Pe scurt, Helm este un manager de pachete pentru Kubernetes, iar Helm Charts sunt ca niște rețete. Aceste rețete sunt folosite pentru a instala și gestiona aplicații în Kubernetes. Imaginează-ți că ai nevoie de o aplicație care include mai multe componente (poduri, servicii, deployment-uri etc.). Un Helm Chart îți permite să definești toate aceste componente într-un mod standardizat.
Helm este pentru Kubernetes ceea ce apt este pentru Debian: un tool care îți simplifică viața. Iar pe Artifact Hub (https://artifacthub.io/) găsești peste 16.000 de „rețete” pentru tot felul de aplicații. Bineînțeles, îți poți face și tu propriile Charts dacă ai nevoie de ceva mai customizat.
Pentru ca am vazut Kubernetes Dashboard si pentru ca arata bine, si pare asa… ca daca ai K8S Dashboard sigur te pricepi am zis sa invat cum se instaleaza. Prima optiune – cu Helm!
Instalarea Kubernetes Dashboard cu Helm
Hai să vedem cum putem folosi Helm pentru a instala Kubernetes Dashboard.
Pasul 1: Instalarea Helm pe controller-ul Kubernetes
Mai întâi, instalezi Helm. Este simplu, doar urmezi aceste comenzi, care o sa downloadeze un script, dupa care il faci executabil si il … executi. Headshot!
Acum, accesează Kubernetes Dashboard la adresa: https://localhost:8443. Cumva e inutil, ca nimeni nu are un nodurile instalate cu KDE/Gnome si deschid de acolo un firefox ca sa acceseze servicii. Cel mult un curl, un wget… Dar… se poate publica pe ip-ul nodului… ceea ce e mai ok, il poti accesa din afara kubernetzilor.
Acum kong-proxy este expus pe ip-urile nodurilor, pe portul selectat manual de noi, 32444. Nu e optim sa specifici tu porturi… dar avem acces la dashboard.
Acum aplicam yaml-ul (o sa faca userul si il pune unde ii este locul) – totul e specificat in yaml. Avem user si acum ii facem un token. Copy paste in browser la https://ip_nod:8443, acolo unde ne cere.
$ kubectl create -f cont-dashboard.yaml serviceaccount/admin-user created clusterrolebinding.rbac.authorization.k8s.io/admin-user created
$ kubectl -n kube-system create token admin-user
Rezultate:
Avem kubernetes-dashboard, am facut un printscreen si l-am aratat prietenilor. O sa ramana aici pentru posteritate, ii gasesc o utilitate cand o sa am mai multe chestii pe k8s. Deocamdata e bun exercitiul ca am folosit helm sa-l deployes, am invatat sa il public pe noduri… si am facut si un user/token ca sa il putem accesa. Minunat! Ce ar fi interesant, ceva sa expunem serviciul mai usor, metode sunt si chiar există mai multe metode prin care serviciile dintr-un cluster Kubernetes pot fi expuse utilizatorilor finali:
Ingress Controller: Utilizează un controller pentru a gestiona cererile HTTP și HTTPS, oferind un mod flexibil și scalabil de a expune mai multe servicii printr-un singur punct de intrare. Exemple populare includ Nginx Ingress Controller și Traefik.
LoadBalancer: Creează un load balancer extern care distribuie traficul către serviciul din cluster. Exemple includ soluții oferite de cloud providers, cum ar fi AWS Elastic Load Balancer (ELB), Google Cloud Load Balancer (GCLB) și Azure Load Balancer. On prem poti folosi HA Proxy si Metal ILB
NodePort: Deschide un port specific pe fiecare nod al clusterului, permițând accesul extern. Pe acesta l-am utilizat si pot spune ca pe termen lung nu il vad ca winning sollution dar e foarte rapid sa vezi un serviciu din kube…
Asta cred ca ne indica deja ce o sa incerc next. Primele 2 coloane de mai sus sunt tema :))
Sa punem chihuahua-urile (cele 3 lenovo M710q si M715q) la munca. Pe langa plex, qbittorrent, NFS si ce mai hosteaza ei pentru “home” vreau sa continui cu “learning path-ul”. Vor trebui sa hosteze un cluster de Kubernetes 1.32 pe care sa-mi fac eu mendrele. As vrea sa fac o copie a blogului asta… si sa o hostez acolo, in paralel cu asta. Pana acolo-i mult de munca asa ca incep cu ISO-ul cel mai recent de debian si fac 3VM-uri.
Am ajuns la momentul mult așteptat (de mine): avem un cluster de 3 servere Linux, bazate pe Debian. Dacă sunteți aici, presupun că știți deja să instalați un sistem de operare, așa că să trecem direct la configurație.
Configurație de bază
Am alocat resursele următoare pentru fiecare nod, iar rețeaua este configurată în 10.0.0.0/24. DHCP-ul a oferit următoarele IP-uri:
Teoretic, resursele pot fi reduse (de exemplu, 2vCPU și 4GB RAM), dar recomand să alocați mai mult pentru a evita problemele legate de pod-uri care nu pornesc din lipsă de resurse.
Editarea fișierului /etc/hosts
Pe toate nodurile, adăugăm următoarele intrări pentru a asigura rezolvarea corectă a numelor:
Ar trebui să vedem control plane-ul activ. Pentru a adăuga noduri, folosim comanda kubeadm join generată automat la finalul output-ului lui kubeadm init:
Kubernetes nu instalează by default niciun CNI (Container Network Interface) deoarece este compatibil cu prea multe opțiuni și lasă alegerea la latitudinea utilizatorului. Alegerea unui CNI depinde de nevoile rețelelor și de experiența utilizatorului.
Opțiuni populare pentru CNI și nivelul de dificultate:
Flannel (ușor): Simplu de instalat și configurat, perfect pentru homelab-uri. Are performanțe decente pentru rețele simple. Instrucțiuni de instalare
Calico (mediu): Ideal pentru cei care vor funcționalități suplimentare precum Network Policies. Este ușor de folosit în homelab-uri cu nevoi moderate. Instrucțiuni de instalare
Cilium (avansat): Alegerea potrivită pentru cei care doresc performanță ridicată, securitate avansată și integrare cu eBPF. Recomandat pentru homelab-uri avansate. Instrucțiuni de instalare
Proxmox din titlu este inutil. Putea fi foarte bine si HyperV, Vmware Workstation… Probabil pentru scopul de a invata as fi putut sa aleg si ceva mai usor, k3s, minikube… etc. Acum ca am un cluster de Kubernetes va trebui sa invat sa il folosesc, ca e ca acu 25 de ani cand am instalat primul meu linux… si acum ce fac? :)) Am calico, am toate componentele
Tema finala e wordpress in kubernetz… cu toate ca am impresia ca nu e nevoie sa complici atat un wordpress si ca ar fi chiar useless. Scopul de a pune asta pe blog este ca-s batran si imi notez ce fac :))
Pentru moment o sa ma multumesc sa testez un singur serviciu, un nginx.