Kubernetes 1.16: إبراز الميزات الجديدة

Kubernetes 1.16: إبراز الميزات الجديدة

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

المعلومات المستخدمة لإعداد هذه المادة مأخوذة من تحسينات Kubernetes لجداول التتبع, سجل التغيير-1.16 والمشكلات ذات الصلة وطلبات السحب ومقترحات تحسين Kubernetes (KEP). إذا هيا بنا!..

العقد

يتم تقديم عدد كبير حقًا من الابتكارات البارزة (في حالة إصدار ألفا) على جانب العقد العنقودية K8s (Kubelet).

أولا، ما يسمى «حاويات سريعة الزوال» (حاويات سريعة الزوال)، مصمم لتبسيط عمليات تصحيح الأخطاء في القرون. تتيح لك الآلية الجديدة إطلاق حاويات خاصة تبدأ في مساحة اسم القرون الموجودة وتعيش لفترة قصيرة. والغرض منها هو التفاعل مع القرون والحاويات الأخرى من أجل حل أي مشاكل وتصحيح الأخطاء. تم تنفيذ أمر جديد لهذه الميزة kubectl debug، مماثلة في جوهرها kubectl exec: فقط بدلاً من تشغيل عملية في حاوية (كما في exec) تطلق حاوية في جراب. على سبيل المثال، سيقوم هذا الأمر بتوصيل حاوية جديدة إلى الكبسولة:

kubectl debug -c debug-shell --image=debian target-pod -- bash

يمكن العثور على تفاصيل حول الحاويات سريعة الزوال (وأمثلة على استخدامها) في كيب المقابلة. التنفيذ الحالي (في K8s 1.16) هو إصدار ألفا، ومن بين معايير نقله إلى إصدار بيتا هو "اختبار واجهة برمجة التطبيقات Ephemeral Containers API لإصدارين على الأقل من [Kubernetes]".

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

ابتكار آخر - PodOverhead - مصممة لتوفير آلية حساب التكاليف العامة للقرون، والتي يمكن أن تختلف بشكل كبير اعتمادًا على وقت التشغيل المستخدم. على سبيل المثال، المؤلفون هذا كيب يؤدي إلى حاويات Kata، التي تتطلب تشغيل kernel الضيف، ووكيل kata، ونظام init، وما إلى ذلك. عندما تصبح النفقات العامة كبيرة جدًا، لا يمكن تجاهلها، مما يعني أنه يجب أن تكون هناك طريقة لأخذها في الاعتبار لمزيد من الحصص والتخطيط وما إلى ذلك. لتنفيذه في PodSpec تمت إضافة الحقل Overhead *ResourceList (مقارنة بالبيانات الموجودة في RuntimeClass، إذا تم استخدامه).

ابتكار آخر ملحوظ هو مدير طوبولوجيا العقدة (مدير طبولوجيا العقدة)، مصمم لتوحيد النهج لضبط تخصيص موارد الأجهزة لمختلف المكونات في Kubernetes. هذه المبادرة مدفوعة بالحاجة المتزايدة لمختلف الأنظمة الحديثة (من مجال الاتصالات والتعلم الآلي والخدمات المالية وما إلى ذلك) للحوسبة المتوازية عالية الأداء وتقليل التأخير في تنفيذ العمليات، والتي تستخدم فيها وحدة المعالجة المركزية المتقدمة و قدرات تسريع الأجهزة. تم تحقيق مثل هذه التحسينات في Kubernetes حتى الآن بفضل المكونات المتباينة (مدير وحدة المعالجة المركزية، ومدير الأجهزة، وCNI)، والآن ستتم إضافة واجهة داخلية واحدة توحد النهج وتبسط الاتصال بمكونات جديدة مماثلة - ما يسمى بالطوبولوجيا- علم - المكونات على الجانب Kubelet. التفاصيل - في كيب المقابلة.

Kubernetes 1.16: إبراز الميزات الجديدة
مخطط مكونات مدير الطوبولوجيا

الميزة التالية - فحص الحاويات أثناء تشغيلها (مسبار بدء التشغيل). كما تعلمون، بالنسبة للحاويات التي يستغرق إطلاقها وقتًا طويلاً، فمن الصعب الحصول على حالة محدثة: إما أنها "تُقتل" قبل أن تبدأ فعليًا في العمل، أو ينتهي بها الأمر في طريق مسدود لفترة طويلة. فحص جديد (ممكّن من خلال بوابة الميزة تسمى StartupProbeEnabled) يلغي - أو بالأحرى يؤجل - تأثير أي فحوصات أخرى حتى لحظة انتهاء تشغيل الكبسولة. ولهذا السبب، تم استدعاء الميزة في الأصل جراب-بدء التشغيل-مسبار التأجيل. بالنسبة للبودات التي تستغرق وقتًا طويلاً للبدء، يمكنك استطلاع الحالة في فترات زمنية قصيرة نسبيًا.

بالإضافة إلى ذلك، يتوفر تحسين لـ RuntimeClass على الفور في حالة تجريبية، مما يضيف دعمًا لـ "المجموعات غير المتجانسة". ج جدولة وقت التشغيل الآن ليس من الضروري على الإطلاق أن تحصل كل عقدة على دعم لكل RuntimeClass: بالنسبة للقرون، يمكنك تحديد RuntimeClass دون التفكير في طوبولوجيا المجموعة. في السابق، لتحقيق ذلك - بحيث تنتهي القرون في العقد مع دعم كل ما تحتاجه - كان من الضروري تعيين القواعد المناسبة لـ NodeSelector والتسامحات. في KEP يتحدث عن أمثلة الاستخدام وبالطبع تفاصيل التنفيذ.

Сеть

هناك ميزتان هامتان للشبكات ظهرتا لأول مرة (في إصدار ألفا) في Kubernetes 1.16 وهما:

  • Поддержка مكدس الشبكة المزدوجة - IPv4/IPv6 - و"الفهم" المقابل له على مستوى القرون والعقد والخدمات. يتضمن إمكانية التشغيل التفاعلي IPv4-to-IPv4 وIPv6-to-IPv6 بين البودات، بدءًا من البودات وحتى الخدمات الخارجية، والتطبيقات المرجعية (ضمن المكونات الإضافية Bridge CNI وPTP CNI وHost-Local IPAM)، بالإضافة إلى التوافق العكسي مع مجموعات Kubernetes التي تعمل IPv4 أو IPv6 فقط. تفاصيل التنفيذ موجودة KEP.

    مثال لعرض عناوين IP بنوعين (IPv4 و IPv6) في قائمة البودات:

    kube-master# kubectl get pods -o wide
    NAME               READY     STATUS    RESTARTS   AGE       IP                          NODE
    nginx-controller   1/1       Running   0          20m       fd00:db8:1::2,192.168.1.3   kube-minion-1
    kube-master#

  • واجهة برمجة تطبيقات جديدة لنقطة النهاية - واجهة برمجة تطبيقات EndpointSlice. فهو يحل مشكلات الأداء/قابلية التوسع لواجهة برمجة تطبيقات نقطة النهاية الحالية والتي تؤثر على المكونات المختلفة في مستوى التحكم (apserver، وما إلى ذلك، ووحدة تحكم نقاط النهاية، وkube-proxy). ستتم إضافة واجهة برمجة التطبيقات الجديدة إلى مجموعة Discovery API وستكون قادرة على خدمة عشرات الآلاف من نقاط النهاية الخلفية على كل خدمة في مجموعة تتكون من آلاف العقد. للقيام بذلك، يتم تعيين كل خدمة إلى كائنات N EndpointSlice، لا تحتوي كل منها افتراضيًا على أكثر من 100 نقطة نهاية (القيمة قابلة للتكوين). ستوفر واجهة برمجة تطبيقات EndpointSlice أيضًا فرصًا لتطويرها في المستقبل: دعم عناوين IP المتعددة لكل حجرة، والحالات الجديدة لنقاط النهاية (ليس فقط Ready и NotReady)، الإعداد الفرعي الديناميكي لنقاط النهاية.

لقد وصل الإصدار المقدم في الإصدار الأخير إلى الإصدار التجريبي المصير، اسم الشيئ service.kubernetes.io/load-balancer-cleanup ومرفقة بكل خدمة مع نوعها LoadBalancer. في وقت حذف مثل هذه الخدمة، فإنها تمنع الحذف الفعلي للمورد حتى يتم الانتهاء من "تنظيف" جميع موارد الموازن ذات الصلة.

ماكينات API

إن "معلم الاستقرار" الحقيقي يكمن في منطقة خادم Kubernetes API والتفاعل معه. حدث هذا إلى حد كبير بفضل نقل إلى حالة مستقرة أولئك الذين لا يحتاجون إلى مقدمة خاصة تعريفات الموارد المخصصة (CRD)، والتي كانت تتمتع بحالة تجريبية منذ الأيام البعيدة لـ Kubernetes 1.7 (وهذا هو يونيو 2017!). جاء نفس الاستقرار إلى الميزات ذات الصلة:

  • "الموارد الفرعية" مع /status и /scale للموارد المخصصة؛
  • تحول إصدارات CRD، بناءً على خطاف ويب خارجي؛
  • قدمت مؤخرا (في K8s 1.15) القيم الافتراضية (الافتراضي) والإزالة الميدانية التلقائية (تشذيب) للموارد المخصصة؛
  • فرصة تطبيق مخطط OpenAPI v3 لإنشاء ونشر وثائق OpenAPI المستخدمة للتحقق من صحة موارد CRD على جانب الخادم.

آلية أخرى أصبحت مألوفة منذ فترة طويلة لمسؤولي Kubernetes: هوك القبول - ظل أيضًا في حالة تجريبية لفترة طويلة (منذ K8s 1.9) وتم الإعلان عنه الآن بأنه مستقر.

وصلت ميزتان أخريان إلى مرحلة تجريبية: تطبيق من جانب الخادم и مشاهدة الإشارات المرجعية.

وكان الابتكار المهم الوحيد في إصدار ألفا هو فشل من SelfLink - عنوان URI خاص يمثل الكائن المحدد ويكون جزءًا منه ObjectMeta и ListMeta (أي جزء من أي كائن في Kubernetes). لماذا يتخلون عنها؟ الدافع بطريقة بسيطة الأصوات كغياب الأسباب الحقيقية (الساحقة) لاستمرار هذا المجال. الأسباب الأكثر رسمية هي تحسين الأداء (عن طريق إزالة حقل غير ضروري) وتبسيط عمل خادم Apiserer العام، الذي يضطر إلى التعامل مع مثل هذا الحقل بطريقة خاصة (هذا هو الحقل الوحيد الذي تم تعيينه مباشرة قبل الكائن متسلسلة). التقادم الحقيقي (ضمن النسخة التجريبية) SelfLink سيحدث بواسطة Kubernetes الإصدار 1.20، والنهائي - 1.21.

تخزين البيانات

يتم ملاحظة العمل الرئيسي في منطقة التخزين، كما في الإصدارات السابقة، في المنطقة دعم منظمة التضامن المسيحي الدولية. التغييرات الرئيسية هنا كانت:

  • لأول مرة (في نسخة ألفا) ظهر دعم البرنامج المساعد CSI للعقد العاملة في Windows: الطريقة الحالية للعمل مع التخزين ستحل أيضًا محل المكونات الإضافية داخل الشجرة في جوهر Kubernetes والمكونات الإضافية FlexVolume من Microsoft المستندة إلى Powershell؛

    Kubernetes 1.16: إبراز الميزات الجديدة
    مخطط لتنفيذ مكونات CSI الإضافية في Kubernetes لنظام التشغيل Windows

  • فرصة تغيير حجم وحدات تخزين CSI، الذي تم تقديمه مرة أخرى في K8s 1.12، تطور إلى إصدار تجريبي؛
  • تم تحقيق "ترويج" مماثل (من ألفا إلى بيتا) من خلال القدرة على استخدام CSI لإنشاء مجلدات محلية سريعة الزوال (دعم وحدة التخزين المضمنة من CSI).

تم تقديمه في الإصدار السابق من Kubernetes وظيفة استنساخ الحجم (باستخدام PVC الموجود مثل DataSource لإنشاء PVC جديد) حصل الآن أيضًا على حالة تجريبية.

مخطط

تغييران ملحوظان في الجدولة (كلاهما في ألفا):

  • EvenPodsSpreading - فرصة استخدم القرون بدلاً من وحدات التطبيق المنطقية من أجل "التوزيع العادل" للأحمال (مثل Deployment وReplicaSet) وضبط هذا التوزيع (كمطلب صارم أو كشرط ميسر، أي أولوية). ستعمل هذه الميزة على توسيع قدرات التوزيع الحالية للقرون المخطط لها، والمحدودة حاليًا بالخيارات PodAffinity и PodAntiAffinity، مما يمنح المسؤولين تحكمًا أفضل في هذا الأمر، مما يعني توفرًا عاليًا أفضل واستهلاكًا أمثل للموارد. التفاصيل - في KEP.
  • استخدام سياسة BestFit в وظيفة الأولوية المطلوبة لنسبة السعة أثناء تخطيط الكبسولة، الأمر الذي سيسمح بذلك تطبق التعبئة بن ("التعبئة في حاويات") لكل من الموارد الأساسية (المعالج والذاكرة) والموارد الموسعة (مثل وحدة معالجة الرسومات). لمزيد من التفاصيل، انظر KEP.

    Kubernetes 1.16: إبراز الميزات الجديدة
    كبسولات الجدولة: قبل استخدام سياسة الأنسب (مباشرة عبر المجدول الافتراضي) ومع استخدامها (عبر موسع الجدولة)

وبالإضافة إلى ذلك، ويرد القدرة على إنشاء المكونات الإضافية للجدولة الخاصة بك خارج شجرة تطوير Kubernetes الرئيسية (خارج الشجرة).

تغييرات أخرى

يمكن ملاحظة ذلك أيضًا في إصدار Kubernetes 1.16 مبادرة ل جلب المقاييس المتاحة بالترتيب الكامل، أو بتعبير أدق، وفقا ل اللوائح الرسمية إلى أجهزة K8s. إنهم يعتمدون إلى حد كبير على المقابلة وثائق بروميثيوس. نشأت التناقضات لأسباب مختلفة (على سبيل المثال، تم إنشاء بعض المقاييس ببساطة قبل ظهور التعليمات الحالية)، وقرر المطورون أن الوقت قد حان لجلب كل شيء إلى معيار واحد، "بما يتماشى مع بقية نظام بروميثيوس البيئي". التنفيذ الحالي لهذه المبادرة هو في حالة ألفا، والتي سيتم ترقيتها تدريجيًا في الإصدارات اللاحقة من Kubernetes إلى النسخة التجريبية (1.17) والمستقرة (1.18).

وبالإضافة إلى ذلك، يمكن ملاحظة التغييرات التالية:

  • دعم تطوير ويندوز с مظهر خارجي الأدوات المساعدة Kubeadm لنظام التشغيل هذا (إصدار ألفا)، فرصة RunAsUserName لحاويات Windows (إصدار ألفا)، تحسين يدعم حساب الخدمة المُدارة للمجموعة (gMSA) ما يصل إلى الإصدار التجريبي، دعم قم بالتركيب/الإرفاق لوحدات تخزين vSphere.
  • المعاد تدويرها آلية ضغط البيانات في استجابات API. في السابق، تم استخدام مرشح HTTP لهذه الأغراض، مما فرض عددًا من القيود التي حالت دون تمكينه افتراضيًا. "ضغط الطلب الشفاف" يعمل الآن: إرسال العملاء Accept-Encoding: gzip في الرأس، يتلقون استجابة مضغوطة بـ GZIP إذا تجاوز حجمها 128 كيلو بايت. يدعم عملاء Go الضغط تلقائيًا (إرسال الرأس المطلوب)، لذلك سيلاحظون على الفور انخفاضًا في حركة المرور. (قد تكون هناك حاجة إلى تعديلات طفيفة للغات الأخرى.)
  • أصبح ممكنا توسيع نطاق HPA من/إلى الصفر بناءً على المقاييس الخارجية. إذا قمت بالقياس بناءً على الكائنات/المقاييس الخارجية، فعندما تكون أحمال العمل خاملة، يمكنك القياس تلقائيًا إلى 0 نسخ متماثلة لحفظ الموارد. يجب أن تكون هذه الميزة مفيدة بشكل خاص في الحالات التي يطلب فيها العاملون موارد وحدة معالجة الرسومات، ويتجاوز عدد الأنواع المختلفة من العمال الخاملين عدد وحدات معالجة الرسومات المتاحة.
  • عميل جديد - k8s.io/client-go/metadata.Client - للوصول "العام" إلى الكائنات. إنه مصمم لاسترداد البيانات الوصفية بسهولة (أي القسم الفرعي metadata) من موارد المجموعة وإجراء عمليات جمع البيانات المهملة والحصص معهم.
  • بناء كوبيرنتس الآن انت تستطيع بدون موفري السحابة القديمين ("المدمجين" في الشجرة) (إصدار ألفا).
  • إلى الأداة المساعدة kubeadm مضاف القدرة التجريبية (إصدار ألفا) على تطبيق التصحيحات المخصصة أثناء العمليات init, join и upgrade. تعرف على المزيد حول كيفية استخدام العلم --experimental-kustomize، أرى في KEP.
  • نقطة نهاية جديدة لخادم apiserver - readyz- يسمح لك بتصدير معلومات حول جاهزيته. يحتوي خادم API الآن أيضًا على علامة --maximum-startup-sequence-duration، مما يسمح لك بتنظيم عمليات إعادة التشغيل.
  • اثنان ميزات أزور أعلن مستقرة: الدعم مناطق التوفر (مناطق توافر الخدمات) و عبر مجموعة الموارد (RG). بالإضافة إلى ذلك، أضاف Azure:
    • دعم المصادقة آد وADFS.
    • ملخص service.beta.kubernetes.io/azure-pip-name لتحديد عنوان IP العام لموازن التحميل؛
    • فرصة إعدادات LoadBalancerName и LoadBalancerResourceGroup.
  • AWS لديها الآن دعم لـ EBS على نظامي التشغيل Windows و المحسن مكالمات EC2 API DescribeInstances.
  • Kubeadm الآن مستقلة يهاجر تكوين CoreDNS عند ترقية إصدار CoreDNS.
  • الثنائيات إلخ في صورة Docker المقابلة قد فعلت World-executable، والذي يسمح لك بتشغيل هذه الصورة دون الحاجة إلى حقوق الجذر. أيضا، إلخ صورة الهجرة توقف دعم الإصدار etcd2.
  • В المقياس التلقائي العنقودي 1.16.0 تم التحول إلى استخدام distroless كصورة أساسية، وتحسين الأداء، وإضافة موفري خدمات سحابية جدد (DigitalOcean، وMagnum، وPacket).
  • التحديثات في البرامج المستخدمة/التابعة: Go 1.12.9، etcd 3.3.15، CoreDNS 1.6.2.

PS

اقرأ أيضًا على مدونتنا:

المصدر: www.habr.com

إضافة تعليق