CRI-O Docker کے متبادل کے طور پر Kubernetes کے رن ٹائم ماحول کے طور پر: CentOS 8 پر سیٹ اپ

ہیلو! میرا نام سرجی ہے، میں سرف میں ڈی او اوپس ہوں۔ Surf میں DevOps ڈپارٹمنٹ کا مقصد نہ صرف ماہرین کے درمیان تعامل قائم کرنا اور کام کے عمل کو مربوط کرنا ہے، بلکہ اپنے بنیادی ڈھانچے اور کسٹمر کے بنیادی ڈھانچے دونوں میں موجودہ ٹیکنالوجیز کو فعال طور پر تحقیق کرنا اور ان پر عمل درآمد کرنا ہے۔

ذیل میں میں کنٹینرز کے لیے ٹیکنالوجی کے اسٹیک میں ہونے والی تبدیلیوں کے بارے میں تھوڑی بات کروں گا جن کا ہمیں تقسیم کا مطالعہ کرتے ہوئے سامنا کرنا پڑا۔ CentOS 8 اور یہ کیا ہے کے بارے میں CRI-O اور فوری طور پر قابل عمل ماحول کیسے ترتیب دیا جائے۔ Kubernetes.

CRI-O Docker کے متبادل کے طور پر Kubernetes کے رن ٹائم ماحول کے طور پر: CentOS 8 پر سیٹ اپ

Docker CentOS 8 میں کیوں شامل نہیں ہے؟

تازہ ترین اہم ریلیز کو انسٹال کرنے کے بعد RHEL 8 یا CentOS 8 کوئی مدد نہیں کر سکتا لیکن نوٹس لے سکتا ہے: ان تقسیموں اور سرکاری ذخیروں میں ایپلی کیشن شامل نہیں ہے۔ میں Docker، جو نظریاتی اور عملی طور پر پیکجوں کی جگہ لے لیتا ہے۔ پوڈ مین, بلڈہ (بطور ڈیفالٹ تقسیم میں موجود) اور CRI-O. یہ اوپن کنٹینر انیشی ایٹو (OCI) پروجیکٹ کے حصے کے طور پر Red Hat کے ذریعہ دیگر چیزوں کے علاوہ، تیار کردہ معیارات کے عملی نفاذ کی وجہ سے ہے۔

او سی آئی کا مقصد، جو لینکس فاؤنڈیشن کا حصہ ہے، کنٹینر فارمیٹس اور رن ٹائمز کے لیے اوپن انڈسٹری کے معیارات بنانا ہے جو ایک ساتھ کئی مسائل کو حل کرتے ہیں۔ سب سے پہلے، انہوں نے لینکس کے فلسفے سے متصادم نہیں کیا (مثال کے طور پر، اس حصے میں کہ ہر پروگرام کو ایک عمل کرنا چاہیے، اور میں Docker ایک قسم کا آل ان ون کمبائن ہے)۔ دوم، وہ سافٹ ویئر میں موجود تمام خامیوں کو ختم کر سکتے تھے۔ میں Docker. تیسرا، وہ کنٹینرائزڈ ایپلی کیشنز کی تعیناتی، انتظام اور پیش کرنے کے لیے معروف تجارتی پلیٹ فارمز کی کاروباری ضروریات کے ساتھ مکمل طور پر ہم آہنگ ہوں گے (مثال کے طور پر، Red Hat OpenShift)۔

حدود میں Docker اور نئے سافٹ ویئر کے فوائد پہلے ہی کچھ تفصیل سے بیان کیے جا چکے ہیں۔ یہ مضمون، اور OCI پروجیکٹ کے اندر پیش کردہ پورے سافٹ ویئر اسٹیک کی تفصیلی وضاحت اور اس کی تعمیراتی خصوصیات سرکاری دستاویزات اور خود Red Hat کے مضامین میں مل سکتی ہیں (کوئی برا نہیں مضمون ریڈ ہیٹ بلاگ میں) اور تھرڈ پارٹی میں جائزے.

یہ نوٹ کرنا ضروری ہے کہ مجوزہ اسٹیک کے اجزاء میں کیا فعالیت ہے:

  • پوڈ مین - runC عمل کے ذریعے کنٹینرز اور امیج اسٹوریج کے ساتھ براہ راست تعامل؛
  • بلڈہ - رجسٹری میں تصاویر جمع کرنا اور اپ لوڈ کرنا؛
  • CRI-O - کنٹینر آرکیسٹریشن سسٹم کے لیے ایک قابل عمل ماحول (مثال کے طور پر، Kubernetes)۔

میرا خیال ہے کہ اسٹیک کے اجزاء کے درمیان تعامل کی عمومی اسکیم کو سمجھنے کے لیے، یہاں ایک کنکشن ڈایاگرام فراہم کرنے کا مشورہ دیا جاتا ہے۔ Kubernetes c runC اور کم درجے کی لائبریریوں کا استعمال کرتے ہوئے CRI-O:

CRI-O Docker کے متبادل کے طور پر Kubernetes کے رن ٹائم ماحول کے طور پر: CentOS 8 پر سیٹ اپ

CRI-O и Kubernetes اسی ریلیز اور سپورٹ سائیکل پر عمل کریں (مطابقت میٹرکس بہت آسان ہے: بڑے ورژن Kubernetes и CRI-O موافق)، اور یہ، ڈویلپرز کی طرف سے اس اسٹیک کے آپریشن کی مکمل اور جامع جانچ پر توجہ مرکوز کرتے ہوئے، ہمیں کسی بھی استعمال کے منظر نامے کے تحت آپریشن میں زیادہ سے زیادہ قابل حصول استحکام کی توقع کرنے کا حق دیتا ہے (متعلقہ ہلکا پن بھی یہاں فائدہ مند ہے۔ CRI-O کے مقابلے میں میں Docker فعالیت کی بامقصد حد بندی کی وجہ سے)۔

جب انسٹال کریں Kubernetes "صحیح راستہ" طریقہ (او سی آئی کے مطابق، یقینا) استعمال کرتے ہوئے CRI-O پر CentOS 8 ہمیں کچھ معمولی مشکلات کا سامنا کرنا پڑا، تاہم، ہم نے کامیابی سے قابو پالیا۔ مجھے آپ کے ساتھ انسٹالیشن اور کنفیگریشن کی ہدایات شیئر کرنے میں خوشی ہوگی، جس میں مجموعی طور پر تقریباً 10 منٹ لگیں گے۔

CRI-O فریم ورک کا استعمال کرتے ہوئے CentOS 8 پر Kubernetes کو کیسے تعینات کریں۔

شرائط: کم از کم ایک میزبان کی موجودگی (2 کور، 4 جی بی ریم، کم از کم 15 جی بی اسٹوریج) انسٹال کے ساتھ CentOS 8 ("سرور" انسٹالیشن پروفائل کی سفارش کی جاتی ہے)، نیز مقامی DNS میں اس کے لیے اندراجات (آخری حربے کے طور پر، آپ /etc/hosts میں اندراج کے ذریعے حاصل کر سکتے ہیں)۔ اور مت بھولنا تبادلہ کو غیر فعال کریں۔.

ہم روٹ صارف کے طور پر میزبان پر تمام کارروائیاں کرتے ہیں، محتاط رہیں۔

  1. پہلے مرحلے میں، ہم OS کو ترتیب دیں گے، CRI-O کے لیے ابتدائی انحصار کو انسٹال اور ترتیب دیں گے۔
    • آئیے OS کو اپ ڈیٹ کریں:
      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جیسا کہ پہلے ہی ذکر کیا گیا ہے، مطلوبہ ورژن سے مماثل ہے۔ 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

    • تیسرا اہم نکتہ جس کا ہمیں تنصیب کے دوران سامنا کرنا پڑتا ہے: اس حقیقت کے باوجود کہ ہم نے استعمال شدہ ڈرائیور کی نشاندہی کی ہے۔ سی گروپ، اور اس کی ترتیب دلائل کے ذریعے گزر گئی۔ کیوبلیٹ پرانا ہے (جیسا کہ دستاویزات میں واضح طور پر کہا گیا ہے)، ہمیں فائل میں دلائل شامل کرنے کی ضرورت ہے، بصورت دیگر ہمارا کلسٹر شروع نہیں کیا جائے گا:
      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) انسٹال کریں۔ میں استعمال کرنے کی سفارش کرتا ہوں۔ کیلیکو۔. ممکنہ طور پر زیادہ مقبول فلالین کے ساتھ مطابقت کے مسائل ہیں۔ 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 کے اقدامات چند سالوں میں کیا لے جائیں گے، لیکن ہم خوشی سے دیکھ رہے ہوں گے۔ آپ اپنی رائے ابھی کمنٹس میں بتا سکتے ہیں۔

دیکھتے رہنا!

یہ مضمون درج ذیل ذرائع کی بدولت شائع ہوا:



ماخذ: www.habr.com

نیا تبصرہ شامل کریں