CRI-O Kubernetes üçün iş vaxtı kimi Docker-in əvəzi olaraq: CentOS 8-də quraşdırma

Salam! Mənim adım Sergey, mən Surf-da DevOps. Surf-da DevOps departamenti təkcə mütəxəssislər arasında qarşılıqlı əlaqə yaratmaq və iş axınlarını inteqrasiya etmək deyil, həm də öz infrastrukturunda və müştəri infrastrukturunda müvafiq texnologiyaların aktiv şəkildə tədqiqi və tətbiqi məqsədi daşıyır.

Aşağıda paylamanı öyrənərkən qarşılaşdığımız konteynerlər üçün texnoloji yığındakı dəyişikliklər haqqında bir az danışacağam. CentOS 8 və nə haqqında CRI-O və bununla tez bir zamanda icra edilə bilən mühiti necə qurmaq olar Kubernetes.

CRI-O Kubernetes üçün iş vaxtı kimi Docker-in əvəzi olaraq: CentOS 8-də quraşdırma

Niyə Docker CentOS 8-in standart paylanmasında yoxdur?

Ən son əsas buraxılışları quraşdırdıqdan sonra rhel 8 və ya CentOS 8 nəzərdən qaçırılmamalıdır: bu paylamalar və rəsmi depolar tətbiqdən məhrumdur yükvuran, ideoloji və funksional olaraq paketləri əvəz edir podman, Buildah (standart olaraq paylamada təqdim olunur) və CRI-O. Bu, Red Hat tərəfindən Açıq Konteyner Təşəbbüsü (OCI) layihəsinin bir hissəsi kimi digər məsələlərlə yanaşı işlənmiş standartların praktiki tətbiqi ilə bağlıdır.

Linux Fondunun bir hissəsi olan OCI-nin məqsədi konteyner formatları və icra edilə bilən mühitlər üçün açıq sənaye standartları yaratmaqdır ki, bu da eyni anda bir neçə problemi həll edir. Birincisi, onlar Linux fəlsəfəsi ilə ziddiyyət təşkil etmirdilər (məsələn, onun bu hissəsində hər bir proqram bir hərəkət etməlidir və yükvuran bir növ kombinlərdir). İkincisi, proqram təminatında mövcud olan bütün çatışmazlıqları aradan qaldıra bildik yükvuran. Üçüncüsü, onlar konteynerləşdirilmiş proqramların (məsələn, Red Hat OpenShift) yerləşdirilməsi, idarə edilməsi və saxlanması üçün aparıcı kommersiya platformaları tərəfindən irəli sürülən biznes tələblərinə tam uyğun olacaqlar.

Məhdudiyyətlər yükvuran və yeni proqram təminatının üstünlükləri artıq bir qədər ətraflı şəkildə təsvir edilmişdir Bu məqalə, və OCI layihəsinin bir hissəsi kimi təklif olunan bütün proqram stəkanının və onun memarlıq xüsusiyyətlərinin ətraflı təsviri rəsmi sənədlərdə və Red Hat-ın özündən (yaxşı) məqalələrdə tapıla bilər. məqalə Red Hat bloqunda) və üçüncü tərəfdə rəylər.

Təklif olunan yığının komponentlərinin hansı funksionallığa malik olduğunu qeyd etmək vacibdir:

  • podman - runC prosesi vasitəsilə konteynerlər və təsvirin saxlanması ilə birbaşa qarşılıqlı əlaqə;
  • Buildah - şəkillərin yığılması və reyestrinə yüklənməsi;
  • CRI-O - konteyner orkestrasiya sistemləri üçün işləmə mühiti (məsələn, Kubernetes).

Hesab edirəm ki, yığının komponentləri arasında qarşılıqlı əlaqənin ümumi sxemini başa düşmək üçün burada əlaqə diaqramını vermək məqsədəuyğundur. Kubernetes c runC və aşağı səviyyəli kitabxanalardan istifadə edir CRI-O:

CRI-O Kubernetes üçün iş vaxtı kimi Docker-in əvəzi olaraq: CentOS 8-də quraşdırma

CRI-O и Kubernetes eyni buraxılış və dəstək dövrünə əməl edin (uyğunluq matrisi çox sadədir: əsas buraxılışlar Kubernetes и CRI-O üst-üstə düşür) və bu, tərtibatçılar tərəfindən bu yığının işinin tam və hərtərəfli sınaqdan keçirilməsinə diqqəti nəzərə alaraq, bizə istənilən istifadə ssenarilərində işdə maksimum əldə edilə bilən sabitliyi gözləmək hüququ verir (nisbi yüngüllük burada da faydalıdır). CRI-O müqayisədə yükvuran funksionallığın məqsədyönlü məhdudlaşdırılması ilə əlaqədar).

Quraşdırarkən Kubernetes "doğru yol" yolu (əlbəttə ki, OCI görə) istifadə edərək CRI-O haqqında CentOS 8 Bəzi xırda çətinliklərlə üzləşdik, lakin onların öhdəsindən uğurla gəldik. Ümumilikdə maksimum 10 dəqiqə çəkəcək quraşdırma və konfiqurasiya təlimatlarını sizinlə bölüşməkdən məmnun olaram.

CRI-O mühitindən istifadə edərək CentOS 8-də Kubernetes-i necə yerləşdirmək olar

Tələblər: Ən azı bir host (2 nüvə, 4 GB RAM, ən azı 15 GB yaddaş) olmalıdır. CentOS 8 (tövsiyə olunan quraşdırma profili "Server"), həmçinin yerli DNS-də onun üçün qeydlər (ekstremal hallarda, /etc/hosts-a girişlə əldə edə bilərsiniz). Və unutma dəyişdirməni söndürün.

Biz hostda bütün əməliyyatları kök istifadəçi adından həyata keçiririk, diqqətli olun.

  1. İlk addımda biz OS-ni quraşdıracağıq, CRI-O üçün ilkin asılılıqları quraşdıracaq və konfiqurasiya edəcəyik.
    • ƏS-ni yeniləyin:
      dnf -y update
      

    • Bundan sonra, firewall və SELinux-u konfiqurasiya etməlisiniz. Burada hər şey ev sahibimizin və ya hostumuzun işləyəcəyi mühitdən asılıdır. Ya da tövsiyə edildiyi kimi bir firewall qura bilərsiniz sənədləşdirmə, və ya etibarlı şəbəkədəsinizsə və ya üçüncü tərəfin təhlükəsizlik duvarından istifadə edirsinizsə, defolt zonanı etibarlı zonaya dəyişin və ya təhlükəsizlik duvarını söndürün:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Firewall-u söndürmək üçün aşağıdakı əmrdən istifadə edə bilərsiniz:

      systemctl disable --now firewalld
      

      SELinux-u söndürmək və ya "icazə verən" rejimə qoymaq lazımdır:

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

    • lazımi kernel modullarını və paketlərini yükləyin, sistemin işə salınması zamanı “br_netfilter” modulunun avtomatik yüklənməsini konfiqurasiya edin:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Paket yönləndirməsini aktivləşdirmək və trafiki düzgün emal etmək üçün müvafiq parametrləri edəcəyik:
      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
      

      edilən parametrləri tətbiq edin:

      sysctl --system

    • tələb olunan versiyanı təyin edin CRI-O (əsas versiya CRI-O, artıq qeyd edildiyi kimi, tələb olunan versiya ilə eynidir Kubernetes) ən son stabil versiyadan bəri Kubernetes hazırda 1.18:
      export REQUIRED_VERSION=1.18
      

      lazımi depoları əlavə edin:

      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

    • indi quraşdıra bilərik CRI-O:
      dnf -y install cri-o
      

      Quraşdırma prosesində qarşılaşdığımız ilk nüansa diqqət yetirin: konfiqurasiyanı redaktə etməlisiniz CRI-O xidmətə başlamazdan əvvəl, çünki tələb olunan ümumi komponent göstəriləndən fərqli yerə malikdir:

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

      İndi demonu aktivləşdirib işə başlaya bilərsiniz CRI-O:

      systemctl enable --now crio
      

      Demonun vəziyyətini yoxlaya bilərsiniz:

      systemctl status crio
      

  2. Quraşdırma və aktivləşdirmə Kubernetes.
    • Tələb olunan anbarı əlavə edin:
      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
      

      İndi quraşdıra bilərik Kubernetes (yuxarıda qeyd edildiyi kimi versiya 1.18):

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

    • İkinci vacib nüans: çünki biz demondan istifadə etmirik yükvuran, lakin demondan istifadə edin CRI-O, işə salmadan və işə salmadan əvvəl Kubernetes lazımi kataloqu yaratdıqdan sonra /var/lib/kubelet/config.yaml konfiqurasiya faylında müvafiq parametrləri etməlisiniz:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Quraşdırma zamanı qarşılaşdığımız üçüncü vacib məqam: istifadə etdiyimiz sürücünü göstərməyimizə baxmayaraq qrup, və onun konfiqurasiyası keçən arqumentlər vasitəsilə kubelet köhnəlmiş (sənədlərdə birbaşa göstərilmişdir), biz fayla arqumentlər əlavə etməliyik, əks halda klasterimiz işə salınmayacaq:
      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

    • İndi demonu aktivləşdirə bilərik kubelet:
      sudo systemctl enable --now kubelet
      

      Fərdiləşdirmək üçün idarəetmə təyyarəsi və ya işçi dəqiqələrdə qovşaqlardan istifadə edə bilərsiniz bu skript.

  3. Klasterimizi işə salmağın vaxtı gəldi.
    • Klasteri işə salmaq üçün əmri yerinə yetirin:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Çıxışın sonunda təklif olunan "kubeadm join ..." klasterinə qoşulmaq əmrini və ya ən azı göstərilən tokenləri yazmağınızdan əmin olun.

    • Pod şəbəkəsi üçün plagini (CNI) quraşdırın. istifadə etməyi məsləhət görürəm kolenkor. Ola bilsin ki, daha populyardır Flanel ilə uyğunluq problemləri var nftables, bəli və kolenkor - layihə tərəfindən tövsiyə edilən və tam sınaqdan keçirilmiş yeganə CNI tətbiqi Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • İşçi qovşağını klasterimizə qoşmaq üçün onu 1 və 2 təlimatlara uyğun olaraq konfiqurasiya etməli və ya istifadə etməlisiniz skript, sonra əvvəlki addımda qeyd etdiyimiz "kubeadm init ..." çıxışından əmri işlədin:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Gəlin klasterimizin işə salındığını və işə başladığını yoxlayaq:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Hazır! Siz artıq K8s klasterinizdə faydalı yükləri yerləşdirə bilərsiniz.

Qarşıda bizi nələr gözləyir

Ümid edirəm ki, yuxarıdakı təlimatlar sizə bir az vaxt və əsəblərə qənaət etməyə kömək etdi.
Sənayedə baş verən proseslərin nəticəsi çox vaxt onların son istifadəçilərin əsas kütləsi və müvafiq nişdəki digər proqram təminatının tərtibatçıları tərəfindən necə qəbul edilməsindən asılıdır. OCI təşəbbüslərinin bir neçə ildən sonra hara aparacağı tam aydın deyil, lakin biz bunu məmnuniyyətlə izləyəcəyik. Fikirlərinizi indi şərhlərdə paylaşa bilərsiniz.

Ayıq qalaq!

Bu məqalə aşağıdakı mənbələr sayəsində yaradılmışdır:



Mənbə: www.habr.com

Добавить комментарий