YamlBox

मार्गदर्शक लेख · 5 मिनट पढ़ा

Kubernetes YAML को JSON में सुरक्षित रूप से परिवर्तित करना

Kubernetes YAML से JSON रूपांतरण API सीमा पर होता है: Kubernetes JSON बोलता है, और YAML एक सुविधा परत है जिसे kubectl और इसकी क्लाइंट लाइब्रेरी आपके लिए रूपांतरित करती है - यही कारण है कि जब कोई चीज़ किनारे हो जाती है तो रूपांतरण को समझना मायने रखता है।

अद्यतन

Kubernetes YAML से JSON: आख़िर रूपांतरण क्यों?

  • वास्तविक API आकार के साथ डिबगिंग: जब किसी फ़ील्ड को अस्वीकार कर दिया जाता है, तो JSON आपको वही दिखाता है जो सर्वर देखता है, बिना किसी YAML टाइपिंग अस्पष्टता के।
  • फीडिंग पाइपलाइन: कई उपकरण (पॉलिसी इंजन, सीआई स्क्रिप्ट, जेक्यू पाइपलाइन) JSON की खपत YAML से अधिक आराम से करते हैं।
  • अलग-अलग रेंडर किए गए आउटपुट: दो Helm रिलीज़ों की JSON के रूप में तुलना करने से प्रकार में परिवर्तन दृश्यमान हो जाता है - क्लासिक "सत्य "सत्य" नहीं है" बग।
  • दस्तावेज़ीकरण और शिक्षण: JSON ब्रेसिज़ spec.template.spec.containers की नेस्टिंग को अचूक बनाते हैं।

बहु-दस्तावेज़ समस्या

एक मेनिफेस्ट फ़ाइल में आमतौर पर --- द्वारा अलग किए गए कई संसाधन होते हैं: नेमस्पेस, कॉन्फ़िगमैप, परिनियोजन, सेवा, इनग्रेस, एचपीए। एक भोला-भाला YAML-टू-JSON कनवर्टर पहले दस्तावेज़ को पढ़ता है और बाकी को चुपचाप छोड़ देता है - बुनियादी ढांचे के काम के लिए एक वास्तव में खतरनाक विफलता मोड। अच्छे कन्वर्टर्स एक JSON सरणी, प्रति दस्तावेज़ एक तत्व उत्पन्न करते हैं, और आपको बताते हैं कि उन्हें कितने तत्व मिले।

Helm, एंकर और "मेरे आउटपुट में कोई एंकर क्यों नहीं हैं?"

YAML एंकर और उपनाम एक फ़ाइल के अंदर ब्लॉक को डीडुप्लिकेट कर सकते हैं। Helm टेम्प्लेट आगे बढ़ते हैं - प्रस्तुत किए जाने तक वे YAML बिल्कुल भी नहीं होते हैं। केवल रेंडर किए गए आउटपुट को कनवर्ट करें (हेल्म टेम्प्लेट / हेल्म गेट मेनिफेस्ट), कभी भी रॉ टेम्प्लेट फ़ाइल नहीं। एंकरों को उनके मूल्यों में समेकित करना सही व्यवहार है: JSON का कोई उपनाम नहीं है, इसलिए कनवर्टर को उन्हें डीरेफ़रेंस करना होगा।

टाइपिंग जाल

  • बूलियन्स: "y", "yes", "on" जैसे संस्करण और नाम YAML 1.1 में बूलियन हैं। Kubernetes में, "चालू" जैसा छवि टैग या "1.10" जैसा संस्करण एक क्लासिक मूक-भ्रष्टाचार मामला है - हमेशा उन्हें स्रोत में उद्धृत करें।
  • बंदरगाह और संसाधन: कंटेनरपोर्ट: 8080 एक पूर्णांक है; एक स्ट्रिंग के रूप में "8080" को टाइप किए गए फ़ील्ड के लिए API द्वारा अस्वीकार कर दिया जाएगा। JSON भेद को स्पष्ट रखता है।
  • मेमोरी मात्रा: 128Mi दोनों प्रारूपों में एक स्ट्रिंग है - सही है, क्योंकि इसे Kubernetes द्वारा पार्स किया गया है, YAML से नहीं।
  • पर्यावरण मूल्य: env मान कल्पना के अनुसार स्ट्रिंग हैं; मान: YAML में 3000 संख्या 3000 बन जाती है, जिसे API अस्वीकार कर देता है। यह सबसे आम प्रकट बगों में से एक है, और JSON आउटपुट इसे तुरंत स्पष्ट कर देता है।

एक व्यावहारिक कार्यप्रवाह

  1. पहले रेंडर करें (यदि Helm): हेल्म टेम्प्लेट मायचार्ट > rendered.yaml.
  2. बहु-दस्तावेज़ समर्थन के साथ JSON सरणी में कनवर्ट करें, ताकि कोई संसाधन छूट न जाए।
  3. क्लस्टर में जो है उसके विरुद्ध अंतर: kubectl एक JSON भिन्न टूल की तुलना में वेब-ऐप -ओ जेसन को तैनात करें - जो परिवर्तन महत्वपूर्ण हैं वे तुरंत सामने आते हैं।
  4. विश्वास के साथ पैच करें: JSON पैच (आरएफसी 6902) और रणनीतिक मर्ज पैच स्पष्ट JSON के विरुद्ध लिखना आसान है।

दोनों चरण इस साइट पर टूल द्वारा कवर किए गए हैं: रूपांतरण के लिए YAML से JSON, और kubectl आउटपुट के साथ परिणाम की तुलना करने के लिए JSON अंतर - कोई भी क्लस्टर डेटा आपकी मशीन को नहीं छोड़ता है।