CRI-O به عنوان جایگزینی برای Docker به عنوان یک محیط اجرایی برای Kubernetes: راه اندازی در CentOS 8

سلام! نام من سرگئی است، من DevOps در Surf هستم. هدف بخش DevOps در Surf نه تنها برقراری تعامل بین متخصصان و یکپارچه‌سازی فرآیندهای کاری، بلکه تحقیق و اجرای فعال فناوری‌های فعلی هم در زیرساخت خود و هم در زیرساخت مشتری است.

در زیر کمی در مورد تغییرات پشته فناوری کانتینرها که در حین مطالعه توزیع با آنها مواجه شدیم صحبت خواهم کرد. CentOS 8 و در مورد آنچه هست CRI-O و نحوه تنظیم سریع یک محیط اجرایی برای کوبرنیتس.

CRI-O به عنوان جایگزینی برای Docker به عنوان یک محیط اجرایی برای Kubernetes: راه اندازی در CentOS 8

چرا Docker در CentOS 8 گنجانده نشده است؟

پس از نصب آخرین نسخه های اصلی rhel 8 یا CentOS 8 نمی توان متوجه نشد: این توزیع ها و مخازن رسمی شامل برنامه نیستند کارگر بارانداز، که از نظر ایدئولوژیکی و عملکردی جایگزین بسته ها می شوند پودمن, بیلدا (به طور پیش فرض در توزیع موجود است) و CRI-O. این به دلیل اجرای عملی استانداردهایی است که از جمله موارد دیگر توسط Red Hat به عنوان بخشی از پروژه Open Container Initiative (OCI) توسعه یافته است.

هدف OCI، که بخشی از بنیاد لینوکس است، ایجاد استانداردهای صنعتی باز برای قالب‌های کانتینر و زمان‌های اجرا است که چندین مشکل را همزمان حل می‌کند. اولاً آنها با فلسفه لینوکس مغایرتی نداشتند (مثلاً در قسمتی که هر برنامه باید یک عمل انجام دهد و کارگر بارانداز نوعی ترکیب همه کاره است). ثانیاً، آنها می توانند تمام کمبودهای موجود در نرم افزار را برطرف کنند کارگر بارانداز. سوم، آنها کاملاً با الزامات تجاری پلتفرم های تجاری پیشرو برای استقرار، مدیریت و ارائه برنامه های کاربردی کانتینری سازگار هستند (به عنوان مثال Red Hat OpenShift).

محدودیت ها کارگر بارانداز و مزیت های نرم افزار جدید قبلاً با جزئیات توضیح داده شده است این مقاله، و شرح مفصلی از کل پشته نرم افزار ارائه شده در پروژه OCI و ویژگی های معماری آن را می توان در اسناد رسمی و مقالات از خود Red Hat یافت (بد نیست مقاله در وبلاگ Red Hat) و در شخص ثالث بررسی ها.

توجه به این نکته مهم است که اجزای پشته پیشنهادی دارای چه عملکردی هستند:

  • پودمن - تعامل مستقیم با کانتینرها و ذخیره سازی تصویر از طریق فرآیند runC.
  • بیلدا - مونتاژ و آپلود تصاویر در رجیستری؛
  • CRI-O - یک محیط اجرایی برای سیستم های ارکستراسیون کانتینر (به عنوان مثال، Kubernetes).

من فکر می کنم که برای درک طرح کلی تعامل بین اجزای پشته، توصیه می شود یک نمودار اتصال در اینجا ارائه شود. کوبرنیتس c runC و کتابخانه های سطح پایین با استفاده از CRI-O:

CRI-O به عنوان جایگزینی برای Docker به عنوان یک محیط اجرایی برای Kubernetes: راه اندازی در CentOS 8

CRI-O и کوبرنیتس به همان چرخه انتشار و پشتیبانی پایبند باشید (ماتریس سازگاری بسیار ساده است: نسخه های اصلی کوبرنیتس и CRI-O همزمان)، و این، با در نظر گرفتن تمرکز بر آزمایش کامل و جامع عملکرد این پشته توسط توسعه دهندگان، به ما این حق را می دهد که در هر سناریو استفاده، حداکثر پایداری قابل دستیابی را در عملیات انتظار داشته باشیم (سبکی نسبی نیز در اینجا مفید است. CRI-O در مقایسه با کارگر بارانداز به دلیل محدودیت هدفمند عملکرد).

هنگام نصب کوبرنیتس راه "درست" (البته طبق OCI) با استفاده از CRI-O بر CentOS 8 ما با مشکلات جزئی مواجه شدیم که با این حال با موفقیت از بین رفتیم. من خوشحال خواهم شد که دستورالعمل های نصب و پیکربندی را با شما به اشتراک بگذارم که در مجموع حدود 10 دقیقه طول می کشد.

نحوه استقرار Kubernetes در CentOS 8 با استفاده از چارچوب CRI-O

پیش نیازها: وجود حداقل یک هاست (2 هسته، 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 باید خاموش یا به حالت "مجاز" تغییر یابد:

      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همانطور که قبلا ذکر شد، نسخه مورد نیاز را مطابقت دهید کوبرنیتس) از آخرین نسخه پایدار کوبرنیتس در حال حاضر 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 قبل از شروع سرویس، از آنجایی که کامپوننت مورد نیاز مکان متفاوتی با مکان مشخص شده دارد:

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

      اکنون می توانید دیمون را فعال کرده و راه اندازی کنید CRI-O:

      systemctl enable --now crio
      

      می توانید وضعیت دیمون را بررسی کنید:

      systemctl status crio
      

  2. نصب و فعال سازی کوبرنیتس.
    • بیایید مخزن مورد نیاز را اضافه کنیم:
      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
      

      اکنون می توانیم نصب کنیم کوبرنیتس (نسخه 1.18، همانطور که در بالا ذکر شد):

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

    • نکته مهم دوم: از آنجایی که ما از دیمون استفاده نمی کنیم کارگر بارانداز، اما ما از دیمون استفاده می کنیم CRI-O، قبل از راه اندازی و مقداردهی اولیه کوبرنیتس شما باید تنظیمات مناسب را در فایل پیکربندی /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، و پیکربندی آن از طریق آرگومان های ارسال شده کوبلت قدیمی است (همانطور که به صراحت در مستندات ذکر شده است)، باید آرگومان هایی را به فایل اضافه کنیم، در غیر این صورت خوشه ما مقداردهی اولیه نمی شود:
      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 توصیه شده و کاملاً آزمایش شده توسط پروژه کوبرنیتس:
      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 در چند سال آینده به چه چیزی منجر خواهد شد، اما ما با کمال میل آن را تماشا خواهیم کرد. شما می توانید نظر خود را همین الان در نظرات به اشتراک بگذارید.

گوش به زنگ باشید!

این مقاله به لطف منابع زیر ظاهر شد:



منبع: www.habr.com

اضافه کردن نظر