YamlBox

مقالة إرشادية · 5 دقيقة للقراءة

تحويل Kubernetes YAML إلى JSON بأمان

يحدث تحويل Kubernetes YAML إلى JSON عند حدود واجهة برمجة التطبيقات: يتحدث Kubernetes لغة JSON، وYAML عبارة عن طبقة ملائمة يقوم kubectl ومكتبات عملائه بتحويلها لك - ولهذا السبب فإن فهم التحويل مهم عندما يحدث شيء ما بشكل جانبي.

تم التحديث

Kubernetes YAML إلى JSON: لماذا التحويل على الإطلاق؟

  • تصحيح الأخطاء باستخدام شكل واجهة برمجة التطبيقات الفعلي: عندما يتم رفض حقل، يعرض لك JSON بالضبط ما يراه الخادم، دون أي غموض في كتابة YAML.
  • خطوط التغذية: العديد من الأدوات (محركات السياسة، البرامج النصية CI، خطوط أنابيب jq) تستهلك JSON بشكل أكثر راحة من YAML.
  • اختلاف الإخراج المعروض: مقارنة إصدارين Helm حيث أن JSON يجعل تغييرات النوع مرئية - الخطأ الكلاسيكي "صحيح ليس "صحيحًا"".
  • التوثيق والتعليم: تجعل أقواس JSON تداخل spec.template.spec.containers واضحًا.

مشكلة المستندات المتعددة

يحتوي ملف البيان عادةً على العديد من الموارد المفصولة بـ ---: Namespace وConfigMap وDeployment وService وIngress وHPA. يقرأ محول YAML-to-JSON المستند الأول ويسقط الباقي بصمت - وهو وضع فشل خطير حقًا لعمل البنية التحتية. تنتج المحولات الجيدة مصفوفة JSON، عنصرًا واحدًا لكل مستند، وتخبرك بعدد العناصر التي عثرت عليها.

الدفة والمراسي و"لماذا لا توجد مراسي في مخرجاتي؟"

يمكن لنقاط الارتساء والأسماء المستعارة إلغاء تكرار الكتل داخل ملف واحد. تذهب القوالب إلى أبعد من ذلك، فهي لا تكون كذلك على الإطلاق حتى يتم عرضها. قم بتحويل المخرجات المقدمة فقط (قالب الدفة / الحصول على بيان الدفة)، وليس ملف قالب خام أبدًا. يعد دمج نقاط الارتساء في قيمها هو السلوك الصحيح: JSON ليس له أسماء مستعارة، لذا يجب على المحول إلغاء مرجعيتها.

مصائد الكتابة

  • القيم المنطقية: الإصدارات والأسماء مثل "y"، و"yes"، و"on" هي قيم منطقية في YAML 1.1. في Kubernetes، تعد علامة الصورة مثل "on" أو إصدار مثل "1.10" حالة كلاسيكية من حالات الفساد الصامت - اقتبسها دائمًا في المصدر.
  • المنافذ والموارد: ContainerPort: 8080 هو int؛ سيتم رفض "8080" كسلسلة بواسطة واجهة برمجة التطبيقات (API) للحقول المكتوبة. JSON يحافظ على التمييز واضحًا.
  • كميات الذاكرة: 128Mi عبارة عن سلسلة في كلا التنسيقين - صحيح، لأنه تم تحليلها بواسطة Kubernetes، وليس YAML.
  • قيم البيئة: قيم env هي سلاسل حسب المواصفات؛ القيمة: 3000 في YAML يصبح الرقم 3000، وهو ما ترفضه واجهة برمجة التطبيقات. يعد هذا أحد الأخطاء الواضحة الأكثر شيوعًا، ويجعله إخراج JSON واضحًا على الفور.

سير العمل العملي

  1. العرض أولاً (إذا كان Helm): قالب الدفة mychart > rendered.yaml.
  2. قم بالتحويل باستخدام دعم المستندات المتعددة إلى مصفوفة JSON، بحيث لا يتم إسقاط أي مورد.
  3. يمكنك الاختلاف مع ما تحتويه المجموعة: kubectl getDPuble web-app -o json، مقارنةً بأداة JSON diff - تبرز التغييرات المهمة على الفور.
  4. التصحيح بثقة: من السهل كتابة تصحيحات JSON (RFC 6902) وتصحيحات الدمج الاستراتيجي مقابل JSON الذي لا لبس فيه.

تتم تغطية كلتا الخطوتين بواسطة الأدوات الموجودة على هذا الموقع: YAML إلى JSON للتحويل، وJSON Diff لمقارنة النتيجة بمخرجات kubectl - لا تترك أي بيانات عنقودية جهازك.