CRI-O Docker جي بدلي جي طور تي ڪبرنيٽس لاءِ رن ٽائم ماحول جي طور تي: سيٽ اپ CentOS 8 تي

سلام! منهنجو نالو سرجي آهي، مان سرف ۾ DevOps آهيان. سرف ۾ DevOps ڊپارٽمينٽ جو مقصد نه رڳو ماهرن جي وچ ۾ رابطي کي قائم ڪرڻ ۽ ڪم جي عملن کي ضم ڪرڻ، پر موجوده ٽيڪنالاجيز کي فعال طور تي تحقيق ڪرڻ ۽ ان تي عمل ڪرڻ ٻنهي جي پنهنجي انفراسٽرڪچر ۽ گراهڪ جي انفراسٽرڪچر ۾.

هيٺ آئون ٿورڙي ڳالهائيندس ٽيڪنالاجي اسٽيڪ ۾ تبديلين جي باري ۾ ڪنٽينرز لاءِ جيڪي اسان ورهائڻ دوران محسوس ڪيون CentOS 8 ۽ ان بابت ڇا آهي CRI-O ۽ ڪيئن تڪڙو هڪ قابل عمل ماحول قائم ڪرڻ لاء ڪوبنيٿس.

CRI-O Docker جي بدلي جي طور تي ڪبرنيٽس لاءِ رن ٽائم ماحول جي طور تي: سيٽ اپ CentOS 8 تي

ڇو Docker CentOS 8 ۾ شامل نه آهي؟

تازه ترين مکيه ريليز انسٽال ڪرڻ کان پوء رڇيل 8 يا CentOS 8 ڪو به مدد نه ٿو ڪري سگهي پر نوٽيس: اهي تقسيم ۽ سرڪاري ذخيرا ايپليڪيشن تي مشتمل نه آهن Docker، جيڪو نظرياتي ۽ فنڪشنل طور تي پيڪيجز کي تبديل ڪري ٿو پوڊيم, اڏاوت (موجوده تقسيم ۾ ڊفالٽ) ۽ CRI-O. اهو ٻين شين جي وچ ۾، Red Hat پاران اوپن ڪنٽينر انيشيئيٽو (OCI) منصوبي جي حصي طور ترقي يافته معيارن جي عملي عمل جي ڪري آهي.

OCI جو مقصد، جيڪو لينڪس فائونڊيشن جو حصو آهي، ڪنٽينر فارميٽ ۽ رن ٽائمز لاءِ اوپن انڊسٽري معيار ٺاهڻ آهي جيڪي هڪ ئي وقت ۾ ڪيترائي مسئلا حل ڪن ٿا. پهرين، اهي لينڪس جي فلسفي جي تضاد نه ڪندا هئا (مثال طور، حصو ۾ ته هر پروگرام کي هڪ عمل ڪرڻ گهرجي، ۽ Docker هڪ قسم جي آل ان ون گڏيل). ٻيو، اهي سافٽ ويئر ۾ موجود سڀني خامين کي ختم ڪري سگھن ٿا Docker. ٽيون، اهي مڪمل طور تي مطابقت رکن ٿيون ڪاروباري گهرجن سان جيڪي اڳواٽ تجارتي پليٽ فارمن پاران مقرر ڪيل ڪنٽينر ٿيل ايپليڪيشنن کي ترتيب ڏيڻ، انتظام ڪرڻ ۽ خدمت ڪرڻ لاءِ (مثال طور، Red Hat OpenShift).

shortcomings Docker ۽ نئين سافٽ ويئر جا فائدا اڳ ۾ ئي ڪجهه تفصيل سان بيان ڪيا ويا آهن اهو مضمون، ۽ او سي آءِ پروجيڪٽ جي اندر پيش ڪيل پوري سافٽ ويئر اسٽيڪ جو تفصيلي تفصيل ۽ ان جي تعميراتي خصوصيتن کي سرڪاري دستاويزن ۽ آرٽيڪلز ۾ ڳولهي سگهجي ٿو ريڊ هيٽ پاڻ (نه خراب ناهي. هڪ مضمون Red Hat بلاگ ۾) ۽ ٽئين پارٽي ۾ جائزو.

اهو نوٽ ڪرڻ ضروري آهي ته تجويز ڪيل اسٽيڪ جا اجزاء ڪهڙي ڪارڪردگي آهن:

  • پوڊيم رن سي پروسيس ذريعي ڪنٽينرز ۽ تصويري اسٽوريج سان سڌو رابطو؛
  • اڏاوت - اسيمبلي ۽ رجسٽري ۾ تصويرون اپ لوڊ ڪرڻ؛
  • CRI-O - ڪنٽينر آرڪيسٽريشن سسٽم لاءِ هڪ قابل عمل ماحول (مثال طور، ڪبرنيٽس).

مان سمجهان ٿو ته اسٽيڪ جي اجزاء جي وچ ۾ رابطي جي عام اسڪيم کي سمجهڻ لاء، هتي هڪ ڪنيڪشن ڊراگرام مهيا ڪرڻ جي صلاح ڏني وئي آهي ڪوبنيٿس c رن سي ۽ استعمال ڪندي گهٽ-سطح لائبريريون CRI-O:

CRI-O Docker جي بدلي جي طور تي ڪبرنيٽس لاءِ رن ٽائم ماحول جي طور تي: سيٽ اپ CentOS 8 تي

CRI-O и ڪوبنيٿس ساڳئي رليز ۽ سپورٽ چڪر تي عمل ڪريو (مطابقت وارو ميٽرڪس تمام سادو آهي: اهم نسخو ڪوبنيٿس и CRI-O coincide)، ۽ اهو، ڊولپرز طرفان هن اسٽيڪ جي آپريشن جي مڪمل ۽ جامع جانچ تي ڌيان ڏيڻ، اسان کي اهو حق ڏئي ٿو ته ڪنهن به استعمال جي منظرنامي جي تحت آپريشن ۾ وڌ ۾ وڌ حاصل ٿيندڙ استحڪام جي اميد رکون (هتي نسبتي روشني پڻ فائديمند آهي. CRI-O سان مقابلو Docker ڪارڪردگي جي مقصدي حد جي ڪري).

جڏهن انسٽال ٿي رهي آهي ڪوبنيٿس "صحيح رستو" طريقو (OCI جي مطابق، يقينا) استعمال ڪندي CRI-O تي CentOS 8 اسان کي ڪجهه ننڍيون مشڪلاتون پيش آيون، جن کي اسان ڪاميابيءَ سان پار ڪيو. مان توهان سان انسٽاليشن ۽ ترتيب ڏيڻ جي هدايتن سان حصيداري ڪرڻ ۾ خوش ٿيندس، جنهن ۾ مجموعي طور تي 10 منٽ لڳندا.

CRI-O فريم ورڪ استعمال ڪندي CentOS 8 تي ڪبرنيٽس کي ڪيئن ترتيب ڏيڻ

شرطون: گهٽ ۾ گهٽ هڪ ميزبان جي موجودگي (2 ڪور، 4 GB ريم، گهٽ ۾ گهٽ 15 GB اسٽوريج) نصب ٿيل سان CentOS 8 (“سرور” تنصيب جي پروفائيل جي سفارش ڪئي وئي آهي)، انهي سان گڏ مقامي ڊي اين ايس ۾ ان لاءِ داخلائون (آخري رعايت جي طور تي، توهان /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جيئن اڳ ۾ ئي ذڪر ڪيو ويو آهي، گهربل ورزن سان ملائي ڪوبنيٿس)، تازو مستحڪم ورزن کان وٺي ڪوبنيٿس في الحال 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
      

      پهرين nuance تي ڌيان ڏيو جيڪو اسان انسٽاليشن جي عمل دوران محسوس ڪيو: توهان کي ترتيب ڏيڻ جي ضرورت آهي 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

    • ٻيو اهم nuance: ڇاڪاڻ ته اسان هڪ ڊيمون استعمال نه ڪندا آھن Docker، پر اسان ڊيمون استعمال ڪريون ٿا 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
      

      حسب ضرورت ڪرڻ ڪنٽرول جهاز يا ڪم ڪندڙ منٽن ۾ nodes، توهان استعمال ڪري سگهو ٿا هن رسم الخط سان.

  3. اهو اسان جي ڪلستر کي شروع ڪرڻ جو وقت آهي.
    • ڪلستر کي شروع ڪرڻ لاء، حڪم جاري ڪريو:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      پڪ ڪريو ته ڪلستر ۾ شامل ٿيڻ لاءِ حڪم لکو “kubeadm join …”، جيڪو توهان کي استعمال ڪرڻ لاءِ چيو وڃي ٿو ٻاڦ جي آخر ۾، يا گهٽ ۾ گهٽ مخصوص ٽوڪن.

    • اچو ته انسٽال ڪريون پلگ ان (CNI) پوڊ نيٽ ورڪ لاءِ. مان استعمال ڪرڻ جي صلاح ڏيان ٿو ڪيليڪو. ممڪن آهي ته وڌيڪ مشهور فلاليل سان مطابقت جا مسئلا آهن نڪتل، ها ۽ ڪيليڪو - صرف 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

تبصرو شامل ڪريو