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 пайхас кардан мумкин нест: ин дистрибюторхо ва анборхои расмй аризаро дарбар намегиранд Доктор, ки аз чихати идеявй ва функсиона-лй иваз кардани пакетхо Подман, Buildah (дар тақсимот бо нобаёнӣ мавҷуд аст) ва CRI-O. Ин ба татбиқи амалии стандартҳои аз ҷониби Red Hat дар доираи лоиҳаи Ташаббуси Open Container (OCI) таҳияшуда вобаста аст.

Ҳадафи OCI, ки қисми Фонди Linux мебошад, эҷоди стандартҳои кушоди саноатӣ барои форматҳои контейнерӣ ва вақтҳои корӣ мебошад, ки дар як вақт якчанд мушкилотро ҳал мекунанд. Аввалан, онҳо ба фалсафаи Linux мухолифат намекарданд (масалан, дар қисмате, ки ҳар як барнома бояд як амалро иҷро кунад ва Доктор як навъ комбайни якхела мебошад). Дуюм, онҳо метавонистанд ҳамаи камбудиҳои мавҷудаи нармафзорро бартараф кунанд Доктор. Сеюм, онҳо бо талаботи тиҷоратии платформаҳои пешрафтаи тиҷоратӣ барои ҷойгиркунӣ, идоракунӣ ва хидматрасонии замимаҳои контейнерӣ комилан мувофиқ хоҳанд буд (масалан, Red Hat OpenShift).

Нобудӣ Доктор ва бартариҳои нармафзори нав аллакай дар баъзе муфассал тавсиф шудаанд ин мақола, ва тавсифи муфассали тамоми стек нармафзори дар доираи лоиҳаи OCI пешниҳодшуда ва хусусиятҳои меъмории онро дар ҳуҷҷатҳои расмӣ ва мақолаҳои худи Red Hat пайдо кардан мумкин аст (бад нест. мақола дар блоги Red Hat) ва дар тарафи сеюм баррасихо.

Бояд қайд кард, ки ҷузъҳои стек пешниҳодшуда кадом функсияҳоро доранд:

  • Подман — ҳамкории мустақим бо контейнерҳо ва нигоҳдории тасвир тавассути раванди runC;
  • Buildah — ҷамъоварӣ ва боркунии тасвирҳо ба реестр;
  • CRI-O — муҳити иҷрошаванда барои системаҳои оркестрсозии контейнер (масалан, Kubernetes).

Ман фикр мекунам, ки барои фаҳмидани нақшаи умумии ҳамкории байни ҷузъҳои стек тавсия дода мешавад, ки диаграммаи пайвастшавӣ дар ин ҷо пешниҳод карда шавад. Кубернитель c давиданC ва китобхонаҳои сатҳи паст истифода мебаранд 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 ГБ RAM, ҳадди аққал 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, чунон ки аллакай зикр гардид, ба версияи зарурӣ мувофиқат кунед Кубернитель), аз версияи охирини устувор Кубернитель айни замон 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

    • Нуқтаи сеюми муҳиме, ки мо ҳангоми насб дучор мешавем: сарфи назар аз он, ки мо ронандаи истифодашударо нишон додаем гурӯҳ, ва конфигуратсияи он тавассути далелҳои гузашта кубелет кӯҳна аст (чунон ки дар ҳуҷҷатҳо возеҳ гуфта шудааст), мо бояд ба файл аргументҳо илова кунем, вагарна кластери мо оғоз карда намешавад:
      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 насб кунем. Ман тавсия медиҳам, ки истифода баранд Калико. Эҳтимол маъмултар Flannel мушкилоти мутобиқат бо 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 пас аз чанд сол ба чӣ оварда мерасонанд, аммо мо бо хушнудӣ тамошо хоҳем кард. Шумо метавонед фикри худро худи ҳозир дар шарҳҳо мубодила кунед.

Гӯш ба занг бош!

Ин мақола ба шарофати сарчашмаҳои зерин пайдо шудааст:



Манбаъ: will.com

Илова Эзоҳ