ما الفرق بين Terraform وKubernetes؟

Terraform وKubernetes هما أداتان من أدوات عمليات التطوير (DevOps) مستخدمتان في نشر التطبيقات وإدارة دورة حياتها. ومع ذلك، فكلتاهما تؤدي وظائف مختلفة. إن Terraform إحدى أدوات البنية التحتية كرمز (IaC) التي يستخدمها مطورو الأدوات لإنشاء موارد تكنولوجيا المعلومات السحابية وتوفيرها وإدارتها تلقائيًا. وباستخدامها، يمكنك التركيز على ما تحتاج إليه من بنيتك التحتية السحابية وإجراء معالجة تلقائية للخطوات اللازمة للإعداد. في المقابل، تُعد Kubernetes إحدى أدوات تنسيق الحاويات التي تساعدك في إدارة حاوياتك على نطاق واسع. وهي تدير توفير الموارد وجدولة الحاويات والتجميع ومهام التنسيق الأخرى.

ما وجه استخدام كل من Kubernetes وTerraform؟

تساعد Kubernetes وTerraform في نشر التطبيقات السحابية وإدارتها على نطاق واسع.

Terraform

تتطلب بيئة تكنولوجيا المعلومات عادةً العديد من موارد البنية التحتية والمكونات والتكوينات. ويمكن أن تؤدي العوامل التالية إلى زيادة تعقيد عملية توفير البنية التحتية:

  • قد تتطلب الفرق المختلفة داخل مؤسسة ما بنية تحتية مماثلة ولكن مع تغييرات طفيفة في التكوين.
  • يمكن توزيع البنية التحتية بين الإعدادات المحلية ومُزودي خدمات سحابية متعددين.
  • قد تتطلب تغييرات التطبيق تعديل البنية التحتية الحالية أو ترقيتها.

يمكنك توفير مكونات البنية التحتية يدويًا، واحدًا تلو الآخر. ولكن الأمر قد يصبح صعبًا ويستغرق وقتًا طويلاً، خاصةً إذا كان لديك العديد من الموارد المعقدة. تزيل Terraform هذه الصعوبة من خلال مساعدتك في توفير البنية التحتية المُدارة ودعمها باستخدام التعليمات البرمجية (أو الرموز). توفر البنية التحتية كرمز (IaC) إمكانية التكرار والشفافية والكفاءة للبنية التحتية المُدارة.

Kubernetes

تتكون التطبيقات الحديثة من خدمات مصغرة، وهي عناصر مستقلة تشغِّل كل عملية تطبيق كخدمة. تؤدي كل خدمة وظيفة واحدة وتتصل بالخدمات الأخرى عبر واجهة محددة جيدًا تُسمى واجهة برمجة التطبيقات (API). تجمع الحاويات الخدمات المصغرة في شكل برامج قابلة للنشر على منصات مختلفة. ولكن من الممكن توسيع نطاق بعض التطبيقات إلى آلاف الخدمات المصغرة عبر مثيلات الخادم المختلفة. وتفرض التطبيقات متعددة الحاويات تحديات إدارية جديدة:

  • كيف يجب عليك تنسيق الحاويات المتعددة؟
  • كيف يجب عليك جدولة الحاويات؟
  • كيف يجب عليك تصنيف الحاويات وفهرستها؟

تعالج Kubernetes ما شابه من تعقيدات التشغيل هذه حتى يتسنى لك توسيع نطاق أعباء العمل وإدارة نشر الحاويات على مثيلات الخادم المتعددة. ويمكنك تشغيل التطبيقات المعتمدة على الحاويات في أي مكان بدون تغيير أدواتك التشغيلية.

طريقة عمل Terraform مقابل Kubernetes

قبل أن ننظر إلى أوجه التشابه والاختلاف، لنستكشف باختصار المفهوم الأساسي لكلتا التقنيتين.

Kubernetes

تعمل Kubernetes من خلال إدارة مجموعة من مثيلات الخادم وجدولة الحاويات لتشغيلها على المجموعة. وهي تلبي متطلبات الموارد لكل حاوية من خلال إدارة موارد الحوسبة بكفاءة. وتعمل الحاويات في مجموعات منطقية يُطلق عليها وحدات Pod، ويمكنك تشغيل حاوية واحدة أو أكثر وتوسيع نطاقها معًا في هيئة وحدة Pod.

تحدد مكونات Kubernetes، مثل برنامج مستوى التحكم، متى وأين تُشغل وحدات Pod، ويُدار توجيه حركة المرور، وتُوسع وحدات Pod بناءً على حجم الاستخدام أو المقاييس الأخرى التي تحددها. تُعطى كل وحدة من وحدات Pod عنوان IP واحدًا واسم DNS (نظام أسماء النطاقات) واحدًا، وتستخدمهما Kubernetes لربط خدماتك ببعضها وبحركة المرور الخارجية.

Terraform

تستخدم Terraform ملفات الحالة لتخزين المعلومات حول مكونات بنيتك التحتية. ويعيِّن ملف الحالة التعليمات البرمجية للبنية التحتية إلى موارد فعلية. وتُعد Terraform Core المكون الرئيس الذي يستوعب اثنين من ملفات Terraform على شكل اثنين من متغيرات الإدخال:

  1. مواردك الحالية، وهو ملف الحالة الحالي.
  2. الحالة المطلوبة لهذه الموارد، وهو ملف التكوين.

باستخدام هذه المعلومات، تنشئ Terraform Core رسمًا بيانيًا للموارد يحدد الارتباطات بينها ويضع خططًا تحدد ما الموارد المطلوب إضافتها أو تعديلها أو إزالتها. بعد الموافقة على الخطة، تتواصل Core مع خدمات الجهات الخارجية لإنشاء مكونات البنية التحتية وتوفيرها.

ما أوجه التشابه بين Terraform وKubernetes؟

هناك أوجه تشابه في طريقة عمل كلتا الأداتين وكيفية استخدامهما.

التكوين التعريفي

تستخدم كلتا الأداتين نهجًا تعريفيًا لتحديد الموارد وإدارتها. والتكوين التعريفي هو نهج مستخدم لتحديد الحالة المطلوبة للنظام أو التطبيق، وإدارتها بدون تحديد التعليمات خطوة بخطوة لتحقيق هذه الحالة. بدلاً من وصف التسلسل الدقيق للعمليات المطلوب تنفيذها، يركز التكوين التعريفي على وصف النتيجة النهائية أو الحالة المطلوبة للنظام. باستخدام كلتا الأداتين، يمكنك التعبير عن الشكل الذي تريد أن يبدو عليه نظامك أو كيف يجب أن يتصرف. وتعالج هاتان الأداتان الخطوات اللازمة للوصول إلى تلك الحالة.

إدارة التغيير التلقائي

توفر كل من Kubernetes وTerraform آليات لأتمتة إدارة تغيير البنية التحتية. ويمكنهما تلقائيًا اكتشاف التغييرات المعقدة في تكويناتك وتطبيقها على بنيتك التحتية وفي الوقت نفسه إدارة التبعيات. وهما تدعمان التحكم في الإصدار وقابلية التكرار وآليات التعاون، وتتعاملان مع تعريف البيئات السحابية على أنها أدوات برمجية. وتُدار التغييرات بشكل تدريجي لتقليل الأخطاء، بالإضافة إلى دعم التكامل المستمر ومسارات النشر.

النشر متعدد السحابة

لا تعتمد Terraform وKubernetes على سحابة بعينها، بل تدعمان العديد من مُزودي الخدمات السحابية. ويمكنهما إدارة موارد البنية التحتية المستضافة عبر منصات سحابية أو بيئات محلية متعددة، ما يسمح لك باختيار الموارد الأكثر ملاءمةً لتطبيقاتك.

الدعم المجتمعي

إن كلاً من Terraform وKubernetes مفتوحة المصدر ولها مجتمع زاخر بالمطورين النشطين. وهما توفران العديد من المكونات الإضافية والملحقات والتكاملات التي تحسِّن الوظائف وتسمح بالتكامل مع الأدوات والخدمات الأخرى. يوفر المجتمعان الداعمان لهذين المشروعين الوثائق والبرامج التعليمية والدعم، ما يساعد المطورين في اعتماد هاتين الأداتين واستخدامهما بفعالية.

الاختلافات الرئيسة: Terraform مقابل Kubernetes

إن Terraform وKubernetes أداتان مختلفتان عن بعضهما ولهما أغراض ونطاقات مختلفة ضمن الحوسبة السحابية وإدارة البنية التحتية.

توفير البنية التحتية

توفر كل من Terraform وKubernetes البنية التحتية، ولكن هذا على مستويات مختلفة. توفر Terraform وتدير الموارد، مثل الآلات الافتراضية أو المثيلات السحابية، والشبكات، ووحدات التخزين، والمكونات الأخرى في بيئتك السحابية. أما على الجانب الآخر، فلا توفر Kubernetes إلا البنية التحتية لأعباء عمل الحاويات فحسب.

مستوى التجريد

تعمل Terraform على مستوى أعلى من التجريد، حيث تدير الموارد وتكويناتها عبر البيئات السحابية. وتعمل Kubernetes على مستوى أدنى من التجريد، حيث تركز على نشر الحاويات ودورة حياتها ضمن المجموعة. وهي توفر ميزات لموازنة التحميل وإنشاء الشبكات واكتشاف الخدمة وتوسيع نطاق الحاويات.

لغة التكوين

تستخدم Terraform لغة خاصة بالنطاق تُسمى لغة تكوين HashiCorp‏ (HCL)، أو JSON للإصدار Terraform v0.12 والإصدارات السابقة. يكتب المطورون ملفات تكوين تعريفية بلغة HCL. وفي المقابل، يستخدمون ملفات البيان المستندة إلى YAML أو JSON لتحديد مجموعات Kubernetes ووحدات Pod والخدمات وعمليات النشر والموارد الأخرى بالإضافة إلى تكوينها.

التعافي من الأعطال

لا توفر Terraform إمكانية التعافي التلقائي من الأعطال. يجب عليك كتابة البرامج النصية وتشغيلها في حالة حدوث عطل حتى تتمكن Terraform من استعادة البنية التحتية. في المقابل، تستطيع Kubernetes اكتشاف الحاويات المعطلة وإعادة تشغيلها تلقائيًا للحفاظ على الحالة المطلوبة للتطبيق. يجب عليك استخدام أدوات Terraform الإضافية لتطبيق إمكانية التعافي من الأعطال على Terraform.

سهولة الاستخدام

تُعد Terraform أسهل للمبتدئين مقارنةً بـ Kubernetes من حيث سهولة الاستخدام والبدء. فيتسم الإعداد والتثبيت بالبساطة، ومن السهل تعلم لغة HCL والعمل بواسطتها. ويمكنك بسهولة إدارة البنية التحتية السحابية في بيئات مختلفة من خلال سير عمل موحد. 

تتسم Kubernetes بمنحنى تعليمي أكثر حدة حيث يتعين عليك فهم كيفية نشر مجموعات Kubernetes. وهي تنطوي على تكوين العُقد الرئيسية وعُقد العامل، وتثبيت المكونات الضرورية، وضمان الاتصال المناسب فيما بينها. وتُعد عملية الإعداد أكثر تعقيدًا وتتطلب مزيدًا من المعرفة بدلاً من الاكتفاء بمعرفة بيئات البنية التحتية فحسب. وهي تتطلب معرفة مبادئ استخدام الحاويات وإنشاء الشبكات وموازنة التحميل وإستراتيجيات التوسُّع.

حالات استخدام Terraform مقابل Kubernetes

يمكنك استخدام Terraform لدعم البنية التحتية للتطبيقات المتعددة المستويات التي توسع نطاقها أو تقلصه بشكل متكرر لتلبية الطلب. يستخدم المطورون قوالب Terraform المكونة مسبقًا لإعداد بيئات الترميز بسرعة مع دعم طفيف مقدم من فريق العمليات. يستخدم مهندسو الشبكات Terraform لنشر البنية التحتية مثل جدران الحماية وأجهزة التوجيه في السحابة. يمكنك استخدام Terraform لإنشاء ونشر بيئات جديدة تُستعمل لمرة واحدة ثم تجاهلها بعد استخدامها.

استخدم Kubernetes لإدارة التطبيقات المخزنة في حاويات على نطاق واسع. على سبيل المثال، للانتقال بسلاسة من آلات التطوير المحلية إلى عمليات النشر الخاصة بالإنتاج أو لتشغيل مجموعات Kubernetes العالية التوافر والقابلة للتوسعة بدرجة عالية على AWS مع الحفاظ على التوافق الكامل مع عمليات النشر التي تُجرى محليًا.

ملخص الاختلافات: Terraform مقابل Kubernetes

 

Terraform

Kubernetes

ما التعريف؟

أداة من أدوات البنية التحتية كرمز (IaC)

أداة للتكوين والتنسيق والإدارة المؤتمتة للحاويات

لماذا تُستخدَم؟

توفير إمكانية التكرار والشفافية والكفاءة للبنية التحتية المُدارة

الحد من تعقيدات التشغيل لكي تتمكن من توسيع نطاق أعباء عمل الحاويات والتطبيقات المتعددة الحاويات

إدارة الموارد

تتولى إدارة جميع أنواع كائنات البنية التحتية، مثل مثيلات الحوسبة، والتخزين، والشبكات

لا تدير إلا موارد الخادم كمجموعة Kubernetes لأعباء عمل الحاويات

التجريد

تبسّط عملية توفير البنية التحتية عبر بيئات سحابية متعددة

تبسّط توفير الخادم داخل مجموعة واحدة

لغة التكوين

HCL

YAML أو JSON

التعافي من الأعطال

يجب عليك استخدام الأدوات والبرامج النصية لإدارة التعافي من الأعطال

مؤتمتة ومدارة ذاتيًا

سهولة الاستخدام

لا تتطلب تدريبًا مكثفًا، وتمتاز بأنها أسهل في بدء استخدامها

تتطلب معرفة مبادئ استخدام الحاويات وإنشاء الشبكات وموازنة التحميل واستراتيجيات التوسُّع لكي تتمكن من بدء استخدامها

كيف يمكن لـ AWS المساعدة في تلبية متطلبات Terraform وKubernetes؟

وحدات AWS Terraform تمثل اللبنات الأساسية للموارد التي تديرها Terraform على AWS. تُنشََر الوحدات بموجب ترخيص مفتوح المصدر وتطورها AWS بالشراكة مع HashiCorp. بدلاً من Terraform، يمكنك أيضًا التفكير في استخدام مجموعة تطوير سحابة AWS (AWS CDK)، وهي عبارة عن إطار عمل تطوير برمجيات مفتوحة المصدر. باستخدام AWS CDK، يمكنك إنجاز المهام التالية:

  • تحديد موارد التطبيقات السحابية بلغات البرمجة المألوفة، بما في ذلك ملفات حالة Terraform HCL.
  • تسريع عملية الإلحاق بـ AWS لأنها لا تتطلب منك تعلم الكثير من الأشياء الجديدة. 

وبالمثل، فإن خدمة Kubernetes المرنة بـ Amazon (Amazon EKS) عبارة عن خدمة Kubernetes مُدارة تهدف إلى تشغيل Kubernetes في مراكز بيانات AWS السحابية والمحلية. في السحابة، تدير خدمة Amazon EKS تلقائيًا مدى توافر وقابلية توسعة موارد Kubernetes الخاصة بجدولة الحاويات، وإدارة توافر التطبيقات، وتخزين بيانات المجموعات، وغيرها من المهام الأساسية. 

بدلاً من Kubernetes، يمكنك أيضًا استخدام خدمة الحاويات المرنة بـ Amazon ‏(Amazon ECS)، وهي عبارة عن خدمة مُدارة بالكامل للتكوين والتنسيق والإدارة المؤتمتة للحاويات لنشر التطبيقات المخزّنة في حاويات وإدارتها وتوسيع نطاقها على منصة سحابة AWS. مع Amazon ECS، يمكنك إنجاز المهام التالية:

  • بوصف التطبيق والموارد المطلوبة.
  • تشغيل التطبيق ومراقبته وتوسيع نطاقه عبر خيارات الحوسبة المرنة من خلال الدمج التلقائي في خدمات AWS الداعمة الأخرى. 
  • تنفيذ عمليات النظام، مثل إنشاء قواعد مخصصة للقياس والسعة، ومراقبة البيانات المستمدة من سجلات التطبيقات والقياس عن بُعد والاستعلام عنها.

ابدأ استخدام Terraform وKubernetes على AWS عن طريق إنشاء حساب اليوم.