इस प्रोजेक्ट के बारे में
एक व्यक्तिगत होमलैब रिपॉजिटरी जो पूरे क्लस्टर को infrastructure-as-code के रूप में मानती है। यह स्टैक k3s पर चलता है, जिसमें Ansible playbooks, roles और inventory संपादन योग्य source of truth के रूप में कार्य करते हैं; एक रेंडर किया गया Docker Compose निर्देशिका केवल Raspberry Pi होस्ट पर मौजूद होती है। रिपॉजिटरी यह दस्तावेज़ करती है कि Docker Compose से k3s में माइग्रेशन 2026-08-14 को पूरा किया गया था, जब मुख्य सर्वर नोड से Docker को अनइंस्टॉल किया गया था, और स्लाइस-दर-स्लाइस रिकॉर्ड को इतिहास के रूप में एक आर्काइव फोल्डर में रखा गया है।
तीन होस्ट का वर्णन किया गया है। daniel-box k3s कंट्रोल प्लेन है और लगभग हर वर्कलोड चलाता है, जिसमें Traefik edge, Authelia SSO और OIDC issuer, Pi-hole DNS, Longhorn storage, CrowdSec और एक सार्वजनिक WireGuard एंडपॉइंट शामिल हैं; Ansible इसी पर चलता है। daniel-server एक k3s एजेंट नोड है जिसमें Jellyfin/Tdarr ट्रांसकोडिंग के लिए Intel iGPU, LVM स्टोरेज और UPS/NUT शटडाउन हैंडलिंग का उपयोग किया जाता है। daniel-pi एकमात्र शेष Docker होस्ट है, जिसे केवल LAN-ओनली रखा गया है, और यह एक दूसरे WireGuard इंस्टेंस के साथ एक छोटा यूटिलिटी स्टैक चलाता है।
Ingress को Traefik पर केंद्रीकृत किया गया है, जो IngressRoute CRDs के माध्यम से रूटिंग करता है, जिसमें Authelia forward-auth मिडलवेयर के माध्यम से सुरक्षित रूटों को नियंत्रित करता है और उन ऐप्स के लिए OIDC टोकन जारी करता है जो उन्हें सपोर्ट करते हैं। Cloudflare सार्वजनिक होस्टनामों को प्रॉक्सी करता है, जबकि स्थानीय नामों को LAN पर Pi-hole द्वारा रिज़ॉल्व किया जाता है। README नोट करता है कि नेटवर्क सेगमेंटेशन को व्यापक रूप से लागू नहीं किया गया है: केवल कुछ भूमिकाएँ NetworkPolicies को परिभाषित करती हैं, और जहाँ नीतियाँ मौजूद हैं, केवल क्लस्टर CNI द्वारा ingress नियमों को लागू किया जाता है।
डिप्लॉयमेंट को एक Docker प्ले और एक k8s प्ले में विभाजित किया गया है, दोनों प्रत्येक होस्ट के containers_list द्वारा संचालित होते हैं। Docker प्ले कस्टम toposort फिल्टर और प्रति-भूमिका meta/deps.yml अपस्ट्रीम घोषणाओं का उपयोग करके एक डिपेंडेंसी ग्राफ को रिज़ॉल्व करता है, ताकि डिपेंडेंसी पहले शुरू हों और टैग किए गए रन अधूरे डिपेंडेंसी को खींच सकें। k8s प्ले भूमिकाओं को toposort करता है और भूमिका टेम्पलेट्स से ही Traefik (CRD इंस्टॉलेशन के लिए) और Authelia (मिडलवेयर के लिए) पर किनारे (edges) प्राप्त करता है, जिसमें उन किनारों के लिए एक स्पष्ट depends_on होता है जिन्हें कोई टेम्पलेट नहीं ले जाता है। फिल्टर को pre-commit हुक में pytest के माध्यम से यूनिट-टेस्ट किया जाता है। एक एकल सेवा, ड्राई रन, सब कुछ, या Pi टारगेट को डिप्लॉय करने के लिए कमांड दस्तावेज़ित हैं, साथ ही अलग bring-up और bootstrap playbooks भी हैं।
क्रॉस-कटिंग चिंताओं में रनटाइम पर डिक्रिप्ट किए गए SOPS/age-एन्क्रिप्टेड सीक्रेट्स शामिल हैं, जिसमें pre-commit में gitleaks और एक आउट-ऑफ-बैंड की बैकअप है; Prometheus, Grafana, Loki और Tempo ऑब्जर्वेबिलिटी कोड के रूप में प्रोविज़न किए गए डैशबोर्ड के साथ है; Backblaze B2 पर Longhorn शेड्यूल्ड बैकअप दस्तावेज़ित प्रति-वॉल्यूम टियरिंग और डिजास्टर-रिकवरी प्रक्रियाओं के साथ है; पिन किए गए इमेज वर्जन और हुक रिविज़न के लिए Renovate-संचालित पुल रिक्वेस्ट; और सुरक्षा टूलिंग जिसमें Authelia TOTP/OIDC, प्रति-नोड एजेंटों के साथ CrowdSec, fail2ban और UFW डिफ़ॉल्ट-डिनाई इनबाउंड शामिल हैं।
क्वालिटी गेट्स एक pre-commit टूल के माध्यम से चलते हैं जिसमें YAML/JSON lint, ansible-lint, gitleaks, रेंडर किए गए-टेम्पलेट सत्यापन, सीक्रेट-रोटेशन रजिस्ट्री सिंक, ruff और pytest शामिल हैं। नई सेवाओं को जोड़ने के लिए मार्गदर्शन शामिल है, चाहे वे Deployment/Service/IngressRoute/PVC मैनिफेस्ट रेंडर करने वाली k8s भूमिकाएँ हों, या Pi के लिए Docker भूमिकाएँ हों।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.