Kubernetes StatefulSets معطلة

هذه ليست في الواقع مجموعة حالة إنها ليست في الحقيقة مجموعة من الدول. تصوير كليم موساليموف من موقع Unsplash.com

لا تفهموني خطأ ؛ نحن من المؤيدين الأقوياء لـ Kubernetes. إنه جزء أساسي من هندستنا ويوفر قيمة هائلة عند استخدامه بشكل صحيح. ولكن كان القصد من Kubernetes في الأصل أن يكون بمثابة نظام أساسي لتنظيم الحاويات لأحمال العمل عديمة الحالة ، وليس التطبيقات ذات الحالة.

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

تدير StatefulSets النطاق الكامل من قواعد البيانات وقوائم الانتظار ومخزن العناصر إلى تطبيقات الويب القديمة التي تحتاج إلى تعديل نظام ملفات محلي لسبب ما. إنها توفر للمطورين مجموعة قوية جدًا من الضمانات: هوية شبكة متسقة لكل جراب: يتيح لك ذلك تكوين عنوان DNS للجراب بسهولة في تطبيقك. هذا يعمل بشكل رائع لسلاسل اتصال قاعدة البيانات أو إعداد عميل كافكا المعقد. كما نستخدمها أحيانًا لتكوين شبكة erlang المتداخلة. أتمتة وحدة التخزين الثابتة: في كل مرة يتم إعادة تشغيل Pod ، حتى إذا تمت إعادة جدولته على عقدة مختلفة ، يتم إعادة توصيل وحدة التخزين الثابتة بالعقدة التي تم وضعها عليها. هذا مقيد إلى حد ما بإمكانيات CSI (واجهة تخزين الحاوية) التي تستخدمها. على سبيل المثال ، في AWS ، يعمل هذا فقط في نفس منطقة AZ الإقليمية نظرًا لأن وحدات تخزين EBS مرتبطة من AZ. التحديثات المتسلسلة المستمرة: تم تصميم تحديثات StatefulSet لتكون مستمرة ومتسقة. سيتم تحديثه دائمًا بنفس الترتيب ، مما قد يساعد في الحفاظ على الأنظمة التي تحتوي على بروتوكولات تنسيق صعبة.

تغطي هذه الضمانات عددًا كبيرًا من العمليات اللازمة لتشغيل عبء العمل المصحوب بالحالة. على وجه الخصوص ، فإنه يدير جزء التوافر بالكامل تقريبًا. نظرًا لأن توفر EBS وضمانات التكرار قوية للغاية ، فإن أتمتة إعادة جدولة StatefulSet تضمن لك بشكل ضئيل خدمة توفر عالية. ومع ذلك ، تنطبق بعض التحذيرات (على سبيل المثال ، أن لديك مساحة في مجموعتك ولا تتعجل في الإعداد من A إلى Z).

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

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

ماذا تفعل عندما تحتاج إلى تغيير حجم القرص الأساسي؟

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

حاليًا ، لا تحتوي وحدة التحكم StatefulSet على دعم مضمن لتغيير حجم وحدة التخزين. هذا على الرغم من حقيقة أن جميع تطبيقات CSI تقريبًا لديها دعم أصلي لتغيير حجم وحدة التخزين التي قد تعلق بها وحدة التحكم. هناك حل بديل ، لكنه تقريبًا يبعث على السخرية: احذف مجموعة StatefulSet أثناء عزل السنفات لتجنب التوقف عن العمل باستخدام: kubectl delete sts --cascade = orphan قم يدويًا بتغيير الحجم الدائم لكل جراب إلى حجم التخزين الجديد قم يدويًا بتعديل طلب وحدة التخزين StatefulSet باستخدام حجم التخزين الجديد وإضافة تعليق توضيحي زائف لفرض تحديث متجدد أعد إنشاء مجموعة StatefulSet باستخدام هذه المواصفات الجديدة التي تسمح لوحدة التحكم باستعادة السيطرة على البودات المعزولة وبدء التحديث المتداول الذي سيؤدي إلى تشغيل CSI لتطبيق تغيير حجم الصوت

Kubernetes StatefulSets معطلة
هذه ليست في الواقع مجموعة حالة إنها ليست في الحقيقة مجموعة من الدول. تصوير كليم موساليموف من موقع Unsplash.com

لا تفهموني خطأ ؛ نحن من المؤيدين الأقوياء لـ Kubernetes. إنه جزء أساسي من هندستنا ويوفر قيمة هائلة عند استخدامه بشكل صحيح. ولكن كان القصد من Kubernetes في الأصل أن يكون بمثابة نظام أساسي لتنظيم الحاويات لأحمال العمل عديمة الحالة ، وليس التطبيقات ذات الحالة.

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

تدير StatefulSets النطاق الكامل من قواعد البيانات وقوائم الانتظار ومخزن العناصر إلى تطبيقات الويب القديمة التي تحتاج إلى تعديل نظام ملفات محلي لسبب ما. إنها توفر للمطورين مجموعة قوية جدًا من الضمانات: هوية شبكة متسقة لكل جراب: يتيح لك ذلك تكوين عنوان DNS للجراب بسهولة في تطبيقك. هذا يعمل بشكل رائع لسلاسل اتصال قاعدة البيانات أو إعداد عميل كافكا المعقد. كما نستخدمها أحيانًا لتكوين شبكة erlang المتداخلة. أتمتة وحدة التخزين الثابتة: في كل مرة يتم إعادة تشغيل Pod ، حتى إذا تمت إعادة جدولته على عقدة مختلفة ، يتم إعادة توصيل وحدة التخزين الثابتة بالعقدة التي تم وضعها عليها. هذا مقيد إلى حد ما بإمكانيات CSI (واجهة تخزين الحاوية) التي تستخدمها. على سبيل المثال ، في AWS ، يعمل هذا فقط في نفس منطقة AZ الإقليمية نظرًا لأن وحدات تخزين EBS مرتبطة من AZ. التحديثات المتسلسلة المستمرة: تم تصميم تحديثات StatefulSet لتكون مستمرة ومتسقة. سيتم تحديثه دائمًا بنفس الترتيب ، مما قد يساعد في الحفاظ على الأنظمة التي تحتوي على بروتوكولات تنسيق صعبة.

تغطي هذه الضمانات عددًا كبيرًا من العمليات اللازمة لتشغيل عبء العمل المصحوب بالحالة. على وجه الخصوص ، فإنه يدير جزء التوافر بالكامل تقريبًا. نظرًا لأن توفر EBS وضمانات التكرار قوية للغاية ، فإن أتمتة إعادة جدولة StatefulSet تضمن لك بشكل ضئيل خدمة توفر عالية. ومع ذلك ، تنطبق بعض التحذيرات (على سبيل المثال ، أن لديك مساحة في مجموعتك ولا تتعجل في الإعداد من A إلى Z).

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

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

ماذا تفعل عندما تحتاج إلى تغيير حجم القرص الأساسي؟

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

حاليًا ، لا تحتوي وحدة التحكم StatefulSet على دعم مضمن لتغيير حجم وحدة التخزين. هذا على الرغم من حقيقة أن جميع تطبيقات CSI تقريبًا لديها دعم أصلي لتغيير حجم وحدة التخزين التي قد تعلق بها وحدة التحكم. هناك حل بديل ، لكنه تقريبًا يبعث على السخرية: احذف مجموعة StatefulSet أثناء عزل السنفات لتجنب التوقف عن العمل باستخدام: kubectl delete sts --cascade = orphan قم يدويًا بتغيير الحجم الدائم لكل جراب إلى حجم التخزين الجديد قم يدويًا بتعديل طلب وحدة التخزين StatefulSet باستخدام حجم التخزين الجديد وإضافة تعليق توضيحي زائف لفرض تحديث متجدد أعد إنشاء مجموعة StatefulSet باستخدام هذه المواصفات الجديدة التي تسمح لوحدة التحكم باستعادة السيطرة على البودات المعزولة وبدء التحديث المتداول الذي سيؤدي إلى تشغيل CSI لتطبيق تغيير حجم الصوت

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow