نقدم لك Kubernetes CCM (مدير وحدة التحكم في السحاب) لـ Yandex.Cloud



استمرارًا للإصدار الأخير لبرنامج تشغيل CSI لـ Yandex.Cloud ، نقوم بنشر مشروع مفتوح المصدر آخر لهذه السحابة - Cloud Controller Manager . CCM ضروري ليس فقط للكتلة ككل ، ولكن أيضًا لمحرك CSI نفسه. تفاصيل حول الغرض وبعض ميزات التنفيذ تحت القطع.

المقدمة


لماذا هذا؟


تتزامن الدوافع التي دفعتنا إلى تطوير CCM لـ Yandex.Cloud تمامًا مع تلك الموصوفة بالفعل في إعلان برنامج تشغيل CSI. نحن نخدم العديد من مجموعات Kubernetes من مزودي الخدمات السحابية المختلفة ، والتي نستخدم لها أداة واحدة. يطبق العديد من وسائل الراحة "تجاوز" الحلول المدارة من هؤلاء مقدمي الخدمات. نعم ، لدينا حالة واحتياجات محددة إلى حد ما ، ولكن التطورات التي تم إنشاؤها بسببها يمكن أن تكون مفيدة للمستخدمين الآخرين أيضًا.

ما هو CCM بشكل عام؟


كقاعدة ، نقوم بإعداد بيئتنا للمجموعة من الخارج - على سبيل المثال ، باستخدام Terraform. ولكن في بعض الأحيان تكون هناك حاجة لإدارة بيئة السحابة المحيطة من مجموعة . يتم توفير هذه الفرصة ، وينفذها CCM .

على وجه الخصوص ، يوفر Cloud Controller Manager خمسة أنواع أساسية من التفاعل:

  1. المثيلات - تطبق علاقة 1: 1 بين كائن عقدة في Kubernetes ( Node) وجهاز افتراضي في موفر سحابة. للقيام بذلك ، نحن:
    • املأ الحقل spec.providerIDفي الكائن Node. على سبيل المثال، لأوبن ستاك CCM، يحتوي هذا الحقل على الشكل التالي: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. يمكنك رؤية اسم موفر السحابة ومعرف UUID الفريد للخادم (الجهاز الظاهري في OpenStack) للكائن ؛
    • nodeInfo Node . , instance type AWS;
    • . , Node NotReady, , providerID. — Node, ;
  2. Zones – failure domain Node, Pod’ ;
  3. LoadBalancerService LoadBalancer , . , Yandex.Cloud NetworkLoadBalancer TargetGroup ;
  4. Route – , .. Kubernetes pod IP- pod’. (VXLAN, GENEVE) :

  5. Volume – PV, PVC SC. CCM, Container Storage Interface (CSI). CSI , , CSI-.

في السابق ، كانت جميع التعليمات البرمجية التي تتفاعل مع السحابة تكمن أساسًا في مستودعات Git الخاصة بمشروع Kubernetes على العنوان k8s.io/kubernetes/pkg/cloudprovider/providers، لكنهم قرروا رفض ذلك بسبب إزعاج العمل مع قاعدة رموز كبيرة. تم نقل جميع عمليات التنفيذ القديمة إلى مستودع منفصل . لمزيد من الراحة والدعم ، تم نقل جميع المكونات المشتركة أيضًا إلى مستودع منفصل .

كما هو الحال مع CSI ، طور العديد من مقدمي الخدمات السحابية الكبيرة بالفعل CCM للاستخدام السحابي في Kubernetes. إذا لم يكن لدى المورد CCM ، ولكن تتوفر جميع الوظائف الضرورية من خلال API ، فيمكنك تنفيذ CCM بنفسك.

لكتابة تنفيذ CCM ، يكفي تنفيذ واجهات Go اللازمة .

وهذا ما حصلنا عليه .

التنفيذ


كيف جئت لهذا


بدأنا التطوير (أو بالأحرى ، حتى الاستخدام) مع CCM النهائي (!) لـ Yandex.Cloud قبل عام.

ومع ذلك ، فقد افتقرنا في هذا التنفيذ إلى:

  • المصادقة من خلال رمز JWT IAM ؛
  • دعم وحدة تحكم الخدمة.

بالاتفاق مع المؤلف (dlisin) في Telegram ، قمنا بتشكيل yandex-cloud-controller-manager وقمنا بإضافة الوظائف المفقودة.

دلائل الميزات


يدعم CCM حاليًا الواجهات التالية:

  • المثيلات ؛
  • المناطق .
  • LoadBalancer .

في المستقبل ، عندما يبدأ Yandex.Cloud في العمل مع الميزات المتقدمة لـ VPC ، سنضيف واجهة Routes .

Loadbalanacer هو التحدي الرئيسي


في البداية، حاولنا، كما هو الحال مع تطبيقات CCM أخرى، لإنشاء زوج من LoadBalancerو TargetGroupعن كل Serviceمع نوع LoadBalancer. ومع ذلك ، أظهر Yandex.Cloud قيدًا واحدًا مثيرًا للاهتمام: لا يمكن استخدامه TargetGroupsمع التقاطع Targets(الزوج SubnetID- IpAddress).



لذلك، في CCM أنشئت أطلقت وحدة تحكم التي عند تغيير الكائن Nodeالمعلومات التي تجمعها عن كل الواجهات على كل آلة افتراضية، ومجموعات منهم أنها تنتمي إلى بعض NetworkIDيخلق في TargetGroupيوم NetworkIDوالتأكد من انها الحالية. بعد ذلك ، عند إنشاء كائن Serviceبنوع ، LoadBalanacerنعلق ببساطة الكائن الذي تم إنشاؤه مسبقًا بالنوع TargetGroupالجديد NetworkLoadBalanacer.

كيفية البدء باستخدام؟


CCM يدعم Kubernetes الإصدار 1.15 وأعلى. في المجموعة ، لتشغيلها ، يلزم --cloud-provider=externalتعيين العلم على قيمة truekube-apiserver و kube-controller-manager و kube-Scheduler وجميع kubelet'ov.

يتم وصف جميع الخطوات اللازمة للتثبيت نفسه في README . يتلخص التثبيت في إنشاء كائنات في Kubernetes من القوائم.

لاستخدام CCM ، ستحتاج أيضًا إلى:

  • حدد في البيان معرف معرف Yandex.Cloud ( folder-id) ؛
  • حساب الخدمة للتفاعل مع Yandex.Cloud API. في البيان ، Secretيجب عليك نقل المفاتيح المعتمدة لحساب الخدمة. تصف الوثائق كيفية إنشاء حساب الخدمة والحصول على المفاتيح.

سنكون سعداء لتلقي الملاحظات والمشكلات الجديدة إذا واجهت أي مشاكل!

ملخص


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

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

ملاحظة


اقرأ أيضا في مدونتنا:


All Articles