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

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



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







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



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



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



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



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



  • Podman - التفاعل المباشر مع الحاويات وتخزين الصور من خلال عملية runC ؛
  • Buildah - بناء وتحميل الصور في التسجيل ؛
  • CRI-O هو إطار عمل قابل للتنفيذ لأنظمة تنسيق الحاوية (مثل Kubernetes).


أعتقد أنه لفهم المخطط العام للتفاعل بين مكونات المكدس ، يُنصح بإعطاء مخطط اتصال Kubernetes مع runC والمكتبات منخفضة المستوى باستخدام CRI-O : يلتزم







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



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



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



المتطلبات الأساسية: مضيف واحد على الأقل (مركزان ، 4 غيغابايت من ذاكرة الوصول العشوائي ، محرك 15 غيغابايت على الأقل) مع تثبيت 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 «permissive»:



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


    • , «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


    • CRI-O ( CRI-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


    • CRI-O:



      dnf -y install cri-o
      


      , : CRI-O , conmon :



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




      CRI-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


    • : Docker, CRI-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


    • , : , cgroup, kubelet ( ), , :



      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


    • kubelet:



      sudo systemctl enable --now kubelet
      


      control-plane worker , .



  3. .

    • :



      kubeadm init --pod-network-cidr=10.244.0.0/16
      


      «kubeadm join ...», , , , .


    • (CNI) Pod network. Calico. , Flannel nftables, Calico — CNI, Kubernetes:



      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 


    • worker 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 في غضون سنوات قليلة ، لكننا سنكون سعداء للمتابعة. يمكنك مشاركة رأيك الآن في التعليقات.



ترقب!



تأتي هذه المقالة من المصادر التالية:






All Articles