2 पॉइंट द्वारा GN⁺ 2024-01-24 | 1 टिप्पणियां | WhatsApp पर शेयर करें

YAML template के उपयोग पर सवाल

  • यह सवाल उठाया गया है कि YAML template का उपयोग कब से सामान्य रूप से स्वीकार्य माना जाने लगा, और इसे कैसे स्वीकार किया जा सकता है।
  • cfgmgmtcamp 2019 में Kubernetes configuration management की आवश्यकता और kr8 solution पर प्रस्तुति दी गई।
  • प्रस्तुति के दौरान YAML template पर सवाल उठाने से ऑनलाइन और कॉन्फ्रेंस में सक्रिय चर्चा हुई।

configuration की समस्या

  • जब application और infrastructure एक निश्चित स्तर से अधिक बढ़ते हैं, तो configuration complexity की समस्या सामने आती है।
  • अलग-अलग environment (development, staging, production) या region (Europe, North America) में deploy होने वाले application की configuration अलग हो सकती है।
  • system administrator या DevOps engineer configuration management की complexity को अच्छी तरह जानते हैं, और अलग-अलग tool YAML का उपयोग करके इस समस्या को हल करते हैं।

क्या हम पीछे चले गए हैं?

  • cloud computing के साथ उद्योग की आवश्यकताएँ बदलने पर नए tools सामने आए।
  • CloudFormation और Helm जैसे tools बेहतरीन configuration tools हैं, लेकिन यह माना गया है कि YAML template डिजाइन करते समय उद्योग ने सामूहिक रूप से गलती की।
  • Helm chart के user-defined parameter लेने वाले उदाहरण से इसे समझाया गया है।

Helm chart

  • Helm chart values.yaml फ़ाइल के माध्यम से external parameter लेकर chart को render करता है।
  • साधारण string parameter से शुरू करके optional field, array और map को configure करते समय आने वाली complexity को समझाया गया है।
  • YAML की सख्त whitespace requirements और template system की limitations की ओर इशारा किया गया है।

JSON, Jsonnet & YAML

  • YAML, JSON का superset है, और दोनों formats के बीच conversion सरल है।
  • Jsonnet एक data templating language है जिसका उद्देश्य JSON configuration generate करना है।

Jsonnet का चर्च

  • Jsonnet एक नई language है जो Kubernetes community के बाहर ज्यादा जानी-पहचानी नहीं है।
  • Jsonnet का उपयोग करके external variables के साथ JSON configuration आसानी से generate किया जा सकता है।
  • optional field, map और parameter को handle करने के तरीके और Jsonnet की additional features को समझाया गया है।

Kr8

  • Kr8 कई Kubernetes clusters की configuration को आसान और सरल तरीके से बनाने और manipulate करने के लिए यहाँ बताई गई सभी विधियों का उपयोग करता है।
  • अगर आप यहाँ समझाए गए विचारों से सहमत हैं, तो Kr8 को देखने की सिफारिश की गई है।

GN⁺ की राय

  • YAML template की complexity: यह लेख YAML template की complexity और limitations की ओर इशारा करता है, और configuration management में उद्योग के सामने मौजूद समस्याओं को अच्छी तरह उजागर करता है।
  • Jsonnet के फायदे: Jsonnet को YAML template के विकल्प के रूप में पेश किया गया है, और इसके आसान उपयोग तथा flexibility पर जोर देकर नए tool के प्रति रुचि जगाई गई है।
  • configuration management का भविष्य: यह लेख configuration management के भविष्य पर insight देता है और DevOps तथा system administrators को नए approaches तलाशने का अवसर देता है।

1 टिप्पणियां

 
GN⁺ 2024-01-24
Hacker News राय
  • YAML config files को लेकर बहुत असंतोष है। GitHub Actions में भी इसे सबसे खराब हिस्सों में से एक माना जाता है, और दूसरी proprietary config languages (HCL, ASL आदि) को लेकर भी ऐसा ही महसूस होता है। Declarative API अच्छे हैं, लेकिन लोग चाहते हैं कि declarations को programmatically generate करने की सुविधा भी हो।

  • Code के ज़रिए config को declare और generate करना बेहतर अनुभव देता है। AWS CDK इस बात को ठीक से समझता है, और type-safe languages तथा IDE support के माध्यम से config और cloud infrastructure की declarative definitions लिखना संभव बनाता है.

  • इस बात से सहमति जताई गई कि YAML templating अव्यावहारिक है, और जब complex logic की ज़रूरत हो तो असली programming language का इस्तेमाल करके YAML/JSON आदि generate करने चाहिए। इससे कई समस्याएँ हल हो सकती हैं.

  • Kubernetes पर भी चर्चा हुई। Kubernetes API intuitive है और उसके पास अच्छी तरह परिभाषित JSON schema है, फिर भी लोग Helm charts का इस्तेमाल सीखने में बहुत समय लगाते हैं। Jsonnet, Ksonnet, Nu, CUE को बहुत बड़ी लोकप्रियता नहीं मिली, और लगता है कि ज़्यादातर लोग kubectl में built-in Kustomize का उपयोग करते हैं.

  • यह भी कहा गया कि developers इस पर पर्याप्त विचार नहीं करते कि config को सही तरीके से कैसे संभालना चाहिए। कहा जा सकता है कि लगभग सारी programming मूल रूप से config की समस्या है, और हर config अंततः किसी function के parameters के रूप में पास होती है। Config को किसी central database में store करना बेहतर हो सकता है.

  • CI/CD में कभी-कभी YAML का इस्तेमाल लगभग programming language की तरह किया जाता है, लेकिन यह बहुत verbose, कम intuitive, और ठीक से परिभाषित न की गई vendor-specific language जैसा लगता है.

  • Helm के जीतने पर अफसोस जताया गया। Helm charts पर काम करना बहुत असुविधाजनक है, editor इसमें मदद नहीं कर पाता, और हर चीज़ को 'indent 4' के सहारे सही alignment में रखना पड़ता है। यह भी अनुमान लगाया गया कि Helm Kubernetes के पतन का कारण बनेगा.

  • string interpolation का उपयोग करके machine-readable code generate करना वांछनीय नहीं है — यह एक निजी दर्शन के रूप में रखा गया। SQL injection और cross-site scripting जैसी समस्याएँ बार-बार आती रहेंगी। यह भी कहा गया कि HTML generate करने के लिए template files का उपयोग नहीं करना चाहिए.

  • यह राय भी थी कि YAML चुनने वाले लोग समस्या को ठीक से पहचान नहीं रहे। Human-centric data representation और computer-centric data representation के बीच सीधा टकराव है। YAML और JSON वास्तव में एक-दूसरे से अलग data formats हैं.

  • YAML पसंद होने के बावजूद, Helm charts पर काम करते समय रोज़ कोसने की बात कही गई। Helm नापसंद है, लेकिन क्योंकि सब इसका उपयोग करते हैं, इसलिए इसे इस्तेमाल करते रहने की मजबूरी भी है.

  • cuelang पर स्विच करने पर विचार किया जा रहा है, और इसे Jsonnet से बेहतर design किया गया माना गया। Kubernetes में पहले से state reconciliation मौजूद है, इसलिए बस deletion capability जोड़ने की ज़रूरत है.