CRI-O Kubernetes uchun ish vaqti muhiti sifatida Docker o'rniga: CentOS 8 da o'rnatish

Salom! Mening ismim Sergey, men Surfdagi DevOpsman. Surfdagi DevOps bo'limi nafaqat mutaxassislar o'rtasidagi o'zaro aloqani o'rnatish va ish jarayonlarini integratsiyalash, balki o'z infratuzilmasida ham, mijozning infratuzilmasida ham joriy texnologiyalarni faol tadqiq qilish va joriy etishni maqsad qilgan.

Quyida men tarqatishni o'rganishda duch kelgan konteynerlar uchun texnologiya stekidagi o'zgarishlar haqida bir oz gaplashaman. CentOS 8 va bu nima haqida CRI-O va bajariladigan muhitni qanday tezda sozlash Kubernetes.

CRI-O Kubernetes uchun ish vaqti muhiti sifatida Docker o'rniga: CentOS 8 da o'rnatish

Nima uchun Docker CentOS 8 ga kiritilmagan?

Eng so'nggi yirik versiyalarni o'rnatgandan so'ng REL 8 yoki CentOS 8 E'tibor bermaslik mumkin emas: bu tarqatishlar va rasmiy omborlarda dastur mavjud emas Docker, mafkuraviy va funktsional jihatdan paketlarni almashtiradi podman, Buildah (sukut bo'yicha taqsimotda mavjud) va CRI-O. Bu Red Hat tomonidan boshqa narsalar qatori Open Container Initiative (OCI) loyihasi doirasida ishlab chiqilgan standartlarning amaliy tatbiq etilishi bilan bog'liq.

Linux fondining bir qismi bo'lgan OCI maqsadi bir vaqtning o'zida bir nechta muammolarni hal qiladigan konteyner formatlari va ish vaqtlari uchun ochiq sanoat standartlarini yaratishdir. Birinchidan, ular Linux falsafasiga zid emas edi (masalan, har bir dastur bitta amalni bajarishi kerak bo'lgan qismida va Docker yaxlit kombaynning bir turi). Ikkinchidan, ular dasturiy ta'minotdagi barcha mavjud kamchiliklarni bartaraf etishlari mumkin edi Docker. Uchinchidan, ular konteynerlashtirilgan ilovalarni (masalan, Red Hat OpenShift) joylashtirish, boshqarish va ularga xizmat ko‘rsatish bo‘yicha yetakchi tijorat platformalarining biznes talablariga to‘liq mos keladi.

kamchiliklar Docker va yangi dasturiy ta'minotning afzalliklari allaqachon batafsil tavsiflangan Ushbu maqola, va OCI loyihasi doirasida taqdim etilgan barcha dasturiy ta'minot to'plamining batafsil tavsifi va uning arxitektura xususiyatlari Red Hatning o'zidan rasmiy hujjatlar va maqolalarda (yomon emas) maqola Red Hat blogida) va uchinchi tomonda sharhlar.

Taklif etilayotgan stekning tarkibiy qismlari qanday funksiyalarga ega ekanligini ta'kidlash muhimdir:

  • podman — RunC jarayoni orqali konteynerlar va tasvirlarni saqlash bilan bevosita o‘zaro aloqa qilish;
  • Buildah — tasvirlarni yig‘ish va reestrga yuklash;
  • CRI-O — konteyner orkestrlash tizimlari uchun bajariladigan muhit (masalan, Kubernetes).

O'ylaymanki, stekning tarkibiy qismlari o'rtasidagi o'zaro ta'sirning umumiy sxemasini tushunish uchun bu erda ulanish diagrammasini taqdim etish tavsiya etiladi. Kubernetes c yugurishC va past darajadagi kutubxonalar yordamida CRI-O:

CRI-O Kubernetes uchun ish vaqti muhiti sifatida Docker o'rniga: CentOS 8 da o'rnatish

CRI-O и Kubernetes bir xil chiqarish va qo'llab-quvvatlash tsikliga rioya qiling (moslik matritsasi juda oddiy: asosiy versiyalar Kubernetes и CRI-O mos keladi) va bu ishlab chiquvchilar tomonidan ushbu stekning ishlashini to'liq va har tomonlama sinovdan o'tkazishga e'tiborni hisobga olgan holda, har qanday foydalanish stsenariylarida ishlashda maksimal erishish mumkin bo'lgan barqarorlikni kutish huquqini beradi (nisbiy engillik bu erda ham foydalidir) CRI-O bilan solishtirganda Docker funksionallikning maqsadli cheklanishi tufayli).

O'rnatish paytida Kubernetes "to'g'ri yo'l" usuli (OCI bo'yicha, albatta) foydalanish CRI-O haqida CentOS 8 Biz kichik qiyinchiliklarga duch keldik, ammo ularni muvaffaqiyatli yengib chiqdik. Men siz bilan o'rnatish va sozlash bo'yicha ko'rsatmalarni baham ko'rishdan xursand bo'laman, jami 10 daqiqa davom etadi.

CRI-O ramkasidan foydalangan holda CentOS 8-da Kubernetes-ni qanday joylashtirish mumkin

Majburiy shartlar: o'rnatilgan kamida bitta xost (2 yadro, 4 GB RAM, kamida 15 GB saqlash) mavjudligi CentOS 8 ("Server" o'rnatish profili tavsiya etiladi), shuningdek mahalliy DNS-dagi yozuvlar (so'nggi chora sifatida siz /etc/hosts-ga kirish orqali olishingiz mumkin). Va unutmang almashtirishni o'chirish.

Biz hostda barcha operatsiyalarni root foydalanuvchi sifatida bajaramiz, ehtiyot bo'ling.

  1. Birinchi bosqichda biz operatsion tizimni sozlaymiz, CRI-O uchun dastlabki bog'liqliklarni o'rnatamiz va sozlaymiz.
    • Keling, operatsion tizimni yangilaymiz:
      dnf -y update
      

    • Keyin xavfsizlik devori va SELinux-ni sozlashingiz kerak. Bu erda hamma narsa bizning xostimiz yoki xostlarimiz ishlaydigan muhitga bog'liq. Siz tavsiyalarga muvofiq xavfsizlik devorini o'rnatishingiz mumkin hujjatlar, yoki, agar siz ishonchli tarmoqda boʻlsangiz yoki uchinchi tomon xavfsizlik devoridan foydalansangiz, standart zonani ishonchli qilib oʻzgartiring yoki xavfsizlik devorini oʻchirib qoʻying:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Xavfsizlik devorini o'chirish uchun siz quyidagi buyruqdan foydalanishingiz mumkin:

      systemctl disable --now firewalld
      

      SELinux o'chirilishi yoki "ruxsat beruvchi" rejimga o'tkazilishi kerak:

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

    • Kerakli yadro modullari va paketlarini yuklang, tizim ishga tushganda “br_netfilter” modulining avtomatik yuklanishini sozlang:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Paketlarni yo'naltirishni faollashtirish va trafikni to'g'ri qayta ishlash uchun biz tegishli sozlamalarni qilamiz:
      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
      

      qilingan sozlamalarni qo'llang:

      sysctl --system

    • kerakli versiyani o'rnating CRI-O (asosiy versiya CRI-O, allaqachon aytib o'tilganidek, kerakli versiyaga mos keladi Kubernetes), so'nggi barqaror versiyadan beri Kubernetes hozirda 1.18:
      export REQUIRED_VERSION=1.18
      

      kerakli omborlarni qo'shing:

      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

    • endi biz o'rnatishimiz mumkin CRI-O:
      dnf -y install cri-o
      

      O'rnatish jarayonida biz duch keladigan birinchi nuancega e'tibor bering: siz konfiguratsiyani tahrirlashingiz kerak CRI-O xizmatni boshlashdan oldin, chunki kerakli umumiy komponent ko'rsatilganidan boshqa joyga ega:

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

      Endi siz demonni faollashtirishingiz va ishga tushirishingiz mumkin CRI-O:

      systemctl enable --now crio
      

      Demon holatini tekshirishingiz mumkin:

      systemctl status crio
      

  2. O'rnatish va faollashtirish Kubernetes.
    • Kerakli omborni qo'shamiz:
      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
      

      Endi biz o'rnatishimiz mumkin Kubernetes (yuqorida aytib o'tilganidek, 1.18 versiyasi):

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

    • Ikkinchi muhim nuance: chunki biz demondan foydalanmaymiz Docker, lekin biz demondan foydalanamiz CRI-O, ishga tushirish va ishga tushirishdan oldin Kubernetes avval kerakli katalogni yaratgandan so'ng /var/lib/kubelet/config.yaml konfiguratsiya faylida tegishli sozlamalarni o'rnatishingiz kerak:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • O'rnatish paytida biz duch keladigan uchinchi muhim nuqta: biz foydalanilgan drayverni ko'rsatganimizga qaramay guruh, va o'tkazilgan argumentlar orqali uning konfiguratsiyasi kublet eskirgan (hujjatlarda aniq ko'rsatilgan), biz faylga argumentlar qo'shishimiz kerak, aks holda bizning klasterimiz ishga tushirilmaydi:
      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

    • Endi biz demonni faollashtirishimiz mumkin kublet:
      sudo systemctl enable --now kubelet
      

      Moslashtirish uchun boshqaruv tekisligi yoki ishchi daqiqalarda tugunlar, siz foydalanishingiz mumkin bu skript bilan.

  3. Klasterimizni ishga tushirish vaqti keldi.
    • Klasterni ishga tushirish uchun quyidagi buyruqni bajaring:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Chiqish oxirida ishlatishingiz so'raladigan "kubeadm join ..." klasteriga qo'shilish buyrug'ini yoki hech bo'lmaganda belgilangan tokenlarni yozishni unutmang.

    • Pod tarmog'i uchun plaginni (CNI) o'rnatamiz. Men foydalanishni tavsiya qilaman Calico. Ehtimol, mashhurroq Flanel bilan muvofiqlik muammolari mavjud nftables, ha va Calico - loyiha tomonidan tavsiya etilgan va to'liq sinovdan o'tgan yagona CNI dasturi Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Ishchi tugunni bizning klasterimizga ulash uchun siz uni 1 va 2 ko'rsatmalarga muvofiq sozlashingiz yoki foydalanishingiz kerak. skript, keyin biz oldingi bosqichda yozgan "kubeadm init..." chiqishidan buyruqni ishga tushiring:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Keling, bizning klasterimiz ishga tushirilganligini va ishlay boshlaganini tekshiramiz:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Tayyor! Siz allaqachon K8s klasteringizda foydali yuklarni joylashtirishingiz mumkin.

Oldinda bizni nima kutmoqda

Umid qilamanki, yuqoridagi ko'rsatmalar sizga biroz vaqt va asablarni tejashga yordam berdi.
Sanoatda sodir bo'ladigan jarayonlarning natijasi ko'pincha oxirgi foydalanuvchilar va tegishli tarmoqdagi boshqa dasturiy ta'minotni ishlab chiquvchilar tomonidan qanday qabul qilinishiga bog'liq. OCI tashabbuslari bir necha yil ichida nimaga olib kelishi hozircha aniq emas, lekin biz zavq bilan kuzatamiz. O'z fikringizni izohlarda hoziroq baham ko'rishingiz mumkin.

Yangiliklarni kuzatib boring, xabardor bo'lib boring; Biz bilan qoling!

Ushbu maqola quyidagi manbalar tufayli paydo bo'ldi:



Manba: www.habr.com

a Izoh qo'shish