Kubernetes 1.11: نظرة عامة على الابتكارات الرئيسية


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

الشبكات


دعنا نبدأ بالشبكات ، حيث أن الإعلان عن Kubernetes 1.11 يمثل الاستقرار الرسمي (أي الانتقال إلى حالة التوفر العام) لاثنين من الابتكارات الهامة المقدمة في الإصدارات السابقة. أولها موازنة تحميل الخدمات داخل المجموعة ، استنادًا إلى IPVS (IP Virtual Server). جاءت هذه الفرصة من Huawei التي قدمت في الربيع الماضي للمجتمع نتائج عملها لتحسين موازنة التحميل لأكثر من 50 ألف خدمة باستخدام IPVS بدلاً من iptables. تم شرح هذا الاختيار بشكل منطقي تمامًا: "إذا تم إنشاء iptables لجدران الحماية واستندت إلى قوائم القواعد في النواة ، فإن IPVS مصمم لموازنة الحمل ويستند إلى جداول التجزئة في النواة ؛ بالإضافة إلى ذلك ، يدعم IPVS خوارزميات موازنة التحميل الأكثر تقدمًا من iptables ، بالإضافة إلى عدد من الميزات المفيدة الأخرى (على سبيل المثال ، التحقق من الحالة ، إعادة المحاولة ، وما إلى ذلك). "


انزلق من Huawei Scaling Kubernetes لدعم عرض الخدمات 50،000 في KubeCon Europe 2017

ما الذي جلبته في الممارسة؟ "عرض نطاق ترددي أفضل للشبكة ، ووقت استجابة أقل للبرامج [نتحدث عن الوقت الذي تستغرقه إضافة نقاط نهاية جديدة إلى الخدمات - تقريبًا. perev. ] وتحسين قابلية موازنة الحمل في الكتلة. " ظهر إصدار ألفا من وضع IPVS لـ kube-proxy في Kubernetes 1.8 ونما إلى الإصدار الثابت 1.11: على الرغم من أنه لم يتم تمكينه افتراضيًا ، إلا أنه بالفعل جاهز رسميًا لخدمة حركة المرور في مجموعات الإنتاج.

الميزة الثانية الناضجة هي CoreDNS كخادم DNS المستخدم من قبل مجموعة Kubernetes. لقد كتبنا المزيد عن هذا الحل في مراجعة منفصلة ، وباختصار ، فهو خادم DNS مرن وقابل للتوسيع بسهولة ، يستند في الأصل إلى خادم ويب العلبة ، الذي أصبح خليفة SkyDNS (بالمناسبة ، يعتمد kube-dns نفسه عليه ، تم استبدالها بـ CoreDNS) ، مكتوبة في Go وركزت على عالم التطبيقات السحابية (الأصلية السحابية). آخر CoreDNS الجدير بالذكر هو أنه يبدو أنه الملف القابل للتنفيذ الوحيد والعملية الوحيدة في النظام. الآن هذا ليس مجرد خيار DNS آخر لمجموعة Kubernetes ، ولكنه أيضًا الخيار الافتراضي لـ kubeadm . تتوفر تعليمات استخدام CoreDNS في Kubernetes هنا (واتحاد الكتلة هنا ).

من بين التحديثات الأخرى في شبكة "Kubernetes" العالمية:

  • في NetworkPolicies أصبح من الممكن الآن تحديد subas محددة في مساحات أسماء أخرى باستخدام namespaceSelector podSelector ؛
  • يمكن للخدمات الآن الاستماع على نفس منافذ المضيف على واجهات مختلفة (المحددة في --nodeport-addresses ) ؛
  • إصلاح الخلل بسبب توقف Kubelet عند استخدام --node-ip عن الإبلاغ عن ExternalDNS و InternalDNS و ExternalIP .

مرافق التخزين


تم تقديم Kubernetes 1.9 في ميزة الحماية ضد إزالة PVCs ( PersistentVolumeClaims ) المستخدمة من قبل أي قرون و PVs ( PersistentVolumes ) مرتبطة بـ PVC ، في وقت لاحق (في K8s 1.10) تسمى StorageProtection ، تم إعلان استقرارها.

تمت ترجمة القدرة على تغيير حجم الصوت (PVs) بعد إعادة تشغيل الموقد إلى حالة بيتا ، وفي إصدار ألفا ، أصبح تغيير حجم الصوت في الوقت الفعلي متاحًا ، أي دون الحاجة إلى إعادة تشغيل الموقد.

لدعم AWS EBS و GCE PD ، تم زيادة الحد الأقصى لأكبر عدد ممكن من وحدات التخزين المتصلة بالمضيف ، وفي المكونات الإضافية AWS EBS و Azure Disk و GCE PD و Ceph RBD دعمت وحدات التزويد الديناميكي للأجهزة الأولية للكتلة. بالنسبة لأحجام AWS EBS ، تمت إضافة القدرة على استخدام القرون في وضع ReadOnly .

بالإضافة إلى ذلك ، قدم Kubernetes 1.11 نسخة ألفا من دعم الحدود الديناميكية على وحدات التخزين اعتمادًا على نوع العقدة ، بالإضافة إلى دعم API لوحدات تخزين الكتلة في محركات التخزين الخارجية CSI ( واجهة تخزين الحاويات - ظهرت في Kubernetes 1.9 ). بالإضافة إلى ذلك ، نفذت CSI التكامل مع محرك تسجيل المكونات الإضافية Kubelet .

العقد العنقودية


تتضمن أهم 5 تغييرات رئيسية في إصدار Kubernetes 1.11 أيضًا النقل إلى حالة الإصدار التجريبي من التكوين الديناميكي Kubelet ، والذي ظهر لأول مرة في K8s 1.8 ويتطلب تغييرات متعددة (يمكنك تتبعها في بطاقة التكوين الديناميكي الأصلي Kubelet ). تتيح هذه الميزة طرح تكوينات Kubelet الجديدة على مجموعات حية وعاملة (على عكس الوضع السابق ، عندما تم تمرير إعدادات Kubelet من خلال علامات سطر الأوامر). لاستخدامه ، يجب عليك تعيين خيار --dynamic-config-dir (عند بدء Kubelet ).

تم إعلان استقرار مشروع أدوات cri-tools . يوفر أدوات لمسؤولي النظام تسمح لك بتحليل وتصحيح تشغيل العقد في الإنتاج ، بغض النظر عن وقت تشغيل الحاوية المستخدم. الحزم معه ( crictl ) يتم شحنها الآن مع باقي أدوات kubeadm (بتنسيقات DEB و RPM). لقد كتبنا المزيد عن الغرض من قدرات crictl في مقالة حديثة حول دمج الحاوية مع Kubernetes ، واستبدال Docker "التقليدية".


أمثلة على استخدام crictl من وثائق المشروع

تم تحويل الدعم التجريبي لـ sysctls على Linux إلى حالة بيتا (يتم تمكينه افتراضيًا باستخدام علامة ميزة Sysctls ). PodSecurityPolicy و Pod على مجالات خاصة لتحديد / التحكم في sysctls .

أيضًا في ResourceQuota أصبح من الممكن تحديد فئة الأولوية (في هذه الحالة ، تنطبق الحصة فقط على القرون مع هذه الفئة - انظر مقترحات التصميم للحصول على التفاصيل) ، وتمت إضافة شرط ContainersReady إلى حالة القرنة.

الحقوق والأمن


تم إعلان ميزة ClusterRole Aggregation المقدمة في K8s 1.9 ، والتي تتيح لك إضافة أذونات إلى الأدوار الحالية (بما في ذلك التي يتم إنشاؤها تلقائيًا) ، مستقرة بدون تلقي أي تغييرات. تمت إضافة دور منفصل لـ autoscaler للكتلة ( ClusterRole ) - يتم استخدامه بدلاً من النظام ( الكتلة - المشرف ).

تم تنفيذ عدد من الأعمال في اتجاه شفافية ما (ولماذا) ما يحدث داخل الكتلة. على وجه الخصوص ، تحتوي معلومات RBAC في سجلات التدقيق الآن على شروح إضافية للأحداث :

  • authorization.k8s.io/decision - allow أو forbid ؛
  • authorization.k8s.io/reason - سبب قابل للقراءة من قبل الإنسان للقرار.

أيضًا في سجلات التدقيق ، تمت إضافة معلومات حول الوصول من PodSecurityPolicy في شكل التعليقات التوضيحية podsecuritypolicy.admission.k8s.io/admit-policy و podsecuritypolicy.admission.k8s.io/validate-policy (ما السياسة المسموح بها بموجب ذلك؟).

أدوات وحدة التحكم


يتم تقديم العديد من التحسينات (وإن كانت غير مهمة ، ولكنها مفيدة!) في أدوات Kubernetes CLI:

  • أمر kubectl wait جديد kubectl wait لحظة حذف الموارد المحددة أو الوصول إلى حالة معينة.
  • kubectl api-resources لعرض الموارد:

  • دعم الإكمال التلقائي لـ kubectl cp .
  • أصبحت وظيفة base64decode متاحة في قوالب base64decode Go ، التي يتحدث اسمها عن نفسها.
  • تمت إضافة دعم --dry-run في kubectl patch .
  • أصبحت kubectl version - kubectl version في الاعتبار أيضًا.
  • kubectl config view --minify يأخذ في الاعتبار علامة context .
  • إضافة دعم موارد kubectl apply --prune إلى kubectl apply --prune CronJob .

تغييرات أخرى


  • تعلم المجدول ( kube-Scheduler ) كيفية تخطيط القرون في DaemonSet (إصدار ألفا).
  • من الممكن تحديد مجموعة مستخدم نظام معين ( RunAsGroup ) للحاويات في الموقد (إصدار ألفا).
  • القدرة على إزالة الأيتام ( حذف اليتيم ) CustomResources .
  • تحسينات في دعم Kubernetes API للمداخن والحاويات على نظام Windows - مقاييس مضافة للمداخن والحاويات ونظام الملفات مع السجلات وسياقات run_as_user وأحجام ثابتة محلية و fstype لمحرك أقراص Azure.
  • يضيف Azure دعمًا لموازنة تحميل SKU القياسية وعنوان IP العام.

التوافق


  • الإصدار المدعوم من etcd هو 3.2.18 (Kubernetes 1.10 كان 3.1.12).
  • إصدارات مثبتة من Docker - من 1.11.2 إلى 1.13.1 و 17.03.x (لم تتغير منذ إصدار K8s 1.10).
  • إصدار Go هو 1.10.2 (بدلاً من 1.9.3) ، والحد الأدنى المعتمد هو 1.9.1.
  • إصدار CNI هو 0.6.0.
  • إصدار CSI هو 0.3.0 (بدلاً من 0.2.0).

ملاحظة


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

Source: https://habr.com/ru/post/ar415349/


All Articles