CRI-O كبديل لـ Docker كبيئة تشغيل لـ Kubernetes: الإعداد على CentOS 8

مرحبًا! اسمي سيرجي، وأنا DevOps في Surf. لا يهدف قسم DevOps في Surf إلى إقامة تفاعل بين المتخصصين ودمج سير العمل فحسب، بل يهدف أيضًا إلى البحث بنشاط وتنفيذ التقنيات ذات الصلة سواء في البنية التحتية الخاصة بهم أو في البنية التحتية للعميل.

أدناه سأتحدث قليلاً عن التغييرات في المكدس التكنولوجي للحاويات التي قابلناها أثناء دراسة التوزيع. CentOS 8 وحول ما هو كري-O وكيفية إعداد بيئة قابلة للتنفيذ بسرعة باستخدامه Kubernetes.

CRI-O كبديل لـ Docker كبيئة تشغيل لـ Kubernetes: الإعداد على CentOS 8

لماذا تم فقدان Docker من التوزيع القياسي لـ CentOS 8

بعد تثبيت أحدث الإصدارات الرئيسية RHEL 8 أو CentOS 8 لا ينبغي إغفالها: هذه التوزيعات والمستودعات الرسمية تفتقد التطبيق عامل في حوض السفن، والتي تحل محل الحزم أيديولوجيًا ووظيفيًا Podman, بناء (موجود في التوزيع بشكل افتراضي) و كري-O. ويرجع ذلك إلى التنفيذ العملي للمعايير التي طورتها ريد هات ، من بين أمور أخرى ، كجزء من مشروع مبادرة الحاوية المفتوحة (OCI).

الهدف من OCI ، وهو جزء من The Linux Foundation ، هو إنشاء معايير صناعية مفتوحة لتنسيقات الحاويات والبيئات القابلة للتنفيذ التي من شأنها حل العديد من المشكلات في وقت واحد. أولاً، لم يتعارضوا مع فلسفة Linux (على سبيل المثال، في هذا الجزء منه، حيث يجب على كل برنامج تنفيذ إجراء واحد، و عامل في حوض السفن هو نوع من دمج الكل في واحد). ثانيًا ، يمكننا القضاء على جميع أوجه القصور الموجودة في البرنامج عامل في حوض السفن. ثالثًا ، ستكون متوافقة تمامًا مع متطلبات العمل التي طرحتها المنصات التجارية الرائدة لنشر وإدارة وصيانة تطبيقات الحاويات (على سبيل المثال ، Red Hat OpenShift).

القيود عامل في حوض السفن وقد تم بالفعل وصف مزايا البرنامج الجديد بشيء من التفصيل في هذا المقال، ووصف تفصيلي لكيفية تقديم حزمة البرامج بالكامل كجزء من مشروع OCI وميزاتها المعمارية يمكن العثور عليها في الوثائق الرسمية والمقالات من Red Hat نفسها (جيد مقالة في مدونة Red Hat)، وفي الطرف الثالث المراجعات.

من المهم ملاحظة الوظيفة التي تتمتع بها مكونات المكدس المقترح:

  • Podman - التفاعل المباشر مع الحاويات وتخزين الصور من خلال عملية runC؛
  • بناء - التجميع والتحميل في سجل الصور؛
  • كري-O - بيئة وقت التشغيل لأنظمة تنظيم الحاويات (على سبيل المثال ، Kubernetes).

أعتقد أنه من أجل فهم المخطط العام للتفاعل بين مكونات المكدس ، يُنصح بإعطاء مخطط اتصال هنا Kubernetes c تشغيلC والمكتبات ذات المستوى المنخفض باستخدام كري-O:

CRI-O كبديل لـ Docker كبيئة تشغيل لـ Kubernetes: الإعداد على CentOS 8

كري-O и Kubernetes اتبع نفس دورة الإصدار والدعم (مصفوفة التوافق بسيطة للغاية: الإصدارات الرئيسية Kubernetes и كري-O تتزامن) ، وهذا ، مع الأخذ في الاعتبار التركيز على الاختبار الكامل والشامل لعمل هذا المكدس من قبل المطورين ، يمنحنا الحق في توقع أقصى استقرار يمكن تحقيقه في العمل في أي سيناريوهات استخدام (الخفة النسبية مفيدة أيضًا هنا). كري-O مقارنة مع عامل في حوض السفن بسبب القيود المتعمدة للوظائف).

عند تثبيت Kubernetes طريقة "الطريق الصحيح" (وفقًا لـ OCI بالطبع) باستخدام كري-O في CentOS 8 واجهنا بعض الصعوبات البسيطة ، والتي ، مع ذلك ، تغلبنا عليها بنجاح. يسعدني أن أطلعك على تعليمات التثبيت والتهيئة ، والتي ستستغرق في المجمل 10 دقائق على الأكثر.

كيفية نشر Kubernetes على CentOS 8 باستخدام بيئة CRI-O

المتطلبات الأساسية: أن يكون لديك مضيف واحد على الأقل (مركزان ، 2 غيغابايت من ذاكرة الوصول العشوائي ، 4 غيغابايت على الأقل من التخزين) مع CentOS 8 (ملف تعريف التثبيت الموصى به "الخادم") ، بالإضافة إلى إدخالاته في DNS المحلي (في الحالات القصوى ، يمكنك الحصول على إدخال في / etc / hosts). ولا تنسى تعطيل المبادلة.

ننفذ جميع العمليات على المضيف نيابة عن المستخدم الجذر ، كن حذرًا.

  1. في الخطوة الأولى، سنقوم بإعداد نظام التشغيل وتثبيت وتكوين التبعيات الأولية لـ CRI-O.
    • تحديث نظام التشغيل:
      dnf -y update
      

    • بعد ذلك ، تحتاج إلى تكوين جدار الحماية و SELinux. هنا ، كل شيء يعتمد على البيئة التي سيعمل فيها مضيفنا أو مضيفونا. يمكنك إما إعداد جدار حماية على النحو الموصى به في توثيق، أو إذا كنت تستخدم شبكة موثوقة أو تستخدم جدار حماية تابعًا لجهة خارجية، فقم بتغيير المنطقة الافتراضية إلى منطقة موثوقة أو قم بإيقاف تشغيل جدار الحماية:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      لإيقاف تشغيل جدار الحماية ، يمكنك استخدام الأمر التالي:

      systemctl disable --now firewalld
      

      يجب تعطيل SELinux أو ضبطه على الوضع "المسموح":

      setenforce 0
      
      sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

    • قم بتحميل وحدات وحزم kernel الضرورية ، وقم بتكوين التحميل التلقائي لوحدة "br_netfilter" عند بدء تشغيل النظام:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • لتنشيط إعادة توجيه الحزم ومعالجة حركة المرور بشكل صحيح، سنقوم بإجراء الإعدادات المناسبة:
      cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
      net.bridge.bridge-nf-call-iptables = 1
      net.ipv4.ip_forward = 1
      net.bridge.bridge-nf-call-ip6tables = 1
      EOF
      

      تطبيق الإعدادات التي تم إجراؤها:

      sysctl --system

    • تعيين الإصدار المطلوب كري-O (النسخة الرئيسية كري-O، كما ذكرنا سابقًا ، هي نفس النسخة المطلوبة Kubernetes) منذ أحدث إصدار مستقر Kubernetes حاليًا 1.18:
      export REQUIRED_VERSION=1.18
      

      إضافة المستودعات اللازمة:

      dnf -y install 'dnf-command(copr)'
      
      dnf -y copr enable rhcontainerbot/container-selinux
      
      curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_8/devel:kubic:libcontainers:stable.repo
      
      curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION/CentOS_8/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo

    • الآن يمكننا التثبيت كري-O:
      dnf -y install cri-o
      

      انتبه إلى الفروق الدقيقة الأولى التي نواجهها أثناء عملية التثبيت: تحتاج إلى تعديل التكوين كري-O قبل بدء الخدمة ، نظرًا لأن المكون conmon المطلوب له موقع مختلف عن الموقع المحدد:

      sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.conf

      الآن يمكنك تفعيل البرنامج الخفي وبدء تشغيله كري-O:

      systemctl enable --now crio
      

      يمكنك التحقق من حالة البرنامج الخفي:

      systemctl status crio
      

  2. التثبيت والتفعيل Kubernetes.
    • أضف المستودع المطلوب:
      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      [kubernetes]
      name=Kubernetes
      baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      exclude=kubelet kubeadm kubectl
      EOF
      

      الآن يمكننا التثبيت Kubernetes (الإصدار 1.18 ، كما هو مذكور أعلاه):

      dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes

    • الفارق الدقيق الثاني المهم: لأننا لا نستخدم البرنامج الخفي عامل في حوض السفنولكن استخدم البرنامج الخفي كري-O، قبل الإطلاق والتهيئة Kubernetes تحتاج إلى إجراء الإعدادات المناسبة في ملف التكوين /var/lib/kubelet/config.yaml ، بعد إنشاء الدليل الضروري:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • النقطة الثالثة المهمة التي نواجهها أثناء التثبيت: على الرغم من حقيقة أننا أشرنا إلى استخدام برنامج التشغيل جروب، وتكوينها من خلال الحجج مرت مكعبة قديمة (والتي يشار إليها مباشرة في الوثائق) ، نحتاج إلى إضافة وسيطات إلى الملف ، وإلا فلن تتم تهيئة المجموعة الخاصة بنا:
      cat /dev/null > /etc/sysconfig/kubelet
      
      cat <<EOF > /etc/sysconfig/kubelet
      KUBELET_EXTRA_ARGS=--container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock'
      EOF

    • الآن يمكننا تفعيل البرنامج الخفي مكعبة:
      sudo systemctl enable --now kubelet
      

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

  3. لقد حان الوقت لتهيئة مجموعتنا.
    • لتهيئة المجموعة، قم بتشغيل الأمر:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      تأكد من كتابة الأمر للانضمام إلى المجموعة "kubeadm Join ..." ، والذي يتم تقديمه في نهاية الإخراج ، أو على الأقل الرموز المميزة المحددة.

    • قم بتثبيت البرنامج المساعد (CNI) لشبكة Pod. أوصي باستخدام كاليكو. ربما أكثر شعبية الفانيلي لديه مشاكل التوافق مع nftables، و كاليكو - تنفيذ CNI الوحيد الذي أوصى به المشروع وتم اختباره بالكامل Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • لتوصيل عقدة عاملة بالمجموعة الخاصة بنا ، تحتاج إلى تكوينها وفقًا للتعليمات 1 و 2 ، أو استخدام النصي، ثم قم بتشغيل الأمر من إخراج "kubeadm init ..." الذي سجلناه في الخطوة السابقة:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • دعونا نتحقق من تهيئة مجموعتنا وبدء العمل:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    مستعد! يمكنك بالفعل استضافة الحمولات على مجموعة K8s الخاصة بك.

ما ينتظرنا في المستقبل

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

ترّقب!

تم إنشاء هذا المقال بفضل المصادر التالية:

  • قسم خاص بأوقات تشغيل الحاوية وثائق Kubernetes
  • صفحة مشروع CRI-O على شبكة الإنترنت
  • مقالات مدونة ريد هات: هذا, هذا واشياء أخرى عديدة



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

إضافة تعليق