CRI-O нь Docker-ийг орлох Kubernetes-ийн ажиллах цагийн орчин болгон: CentOS 8 дээрх тохиргоо

Сайн уу? Намайг Сергей гэдэг, би Surf-ийн DevOps. Surf дахь DevOps хэлтэс нь мэргэжилтнүүдийн хоорондын харилцаа холбоог бий болгох, ажлын процессыг нэгтгэх зорилготой төдийгүй өөрийн дэд бүтэц болон хэрэглэгчийн дэд бүтцэд одоогийн технологийг идэвхтэй судалж, хэрэгжүүлэх зорилготой юм.

Доор би түгээлтийг судлах явцад бидэнд тохиолдсон савны технологийн стек дэх өөрчлөлтүүдийн талаар бага зэрэг ярих болно. CentOS 8 мөн энэ нь юу болох талаар CRI-O болон гүйцэтгэх боломжтой орчинг хэрхэн хурдан тохируулах талаар Kubernetes.

CRI-O нь Docker-ийг орлох Kubernetes-ийн ажиллах цагийн орчин болгон: CentOS 8 дээрх тохиргоо

Docker яагаад CentOS 8-д ороогүй вэ?

Хамгийн сүүлийн үеийн томоохон хувилбаруудыг суулгасны дараа RHEL 8 буюу CentOS 8 Үүнийг анзаарахгүй байхын аргагүй: эдгээр түгээлтүүд болон албан ёсны репозиторууд нь програмыг агуулаагүй болно Docker, үзэл суртлын болон үйл ажиллагааны хувьд багцуудыг орлуулдаг Подман, Биллах (өгөгдмөл байдлаар түгээлтэд байгаа) ба CRI-O. Энэ нь Red Hat-аас Нээлттэй Контейнер Санаачлага (OCI) төслийн хүрээнд боловсруулсан стандартуудыг бодитоор хэрэгжүүлж байгаатай холбоотой юм.

Линуксийн сангийн нэг хэсэг болох OCI-ийн зорилго нь хэд хэдэн асуудлыг нэг дор шийддэг чингэлэг формат болон ажиллах хугацааны нээлттэй салбарын стандартыг бий болгох явдал юм. Нэгдүгээрт, тэд Линуксийн философитой зөрчилдөөгүй (жишээлбэл, програм бүр нэг үйлдлийг гүйцэтгэх ёстой гэсэн хэсэгт). Docker нэг төрлийн комбайн юм). Хоёрдугаарт, тэд програм хангамжийн одоо байгаа бүх дутагдлыг арилгах боломжтой Docker. Гуравдугаарт, тэдгээр нь чингэлэгжүүлсэн програмуудыг (жишээ нь Red Hat OpenShift) байрлуулах, удирдах, үйлчлэхэд зориулагдсан тэргүүлэх арилжааны платформуудын бизнесийн шаардлагад бүрэн нийцэх болно.

дутагдлууд Docker шинэ програм хангамжийн давуу талуудыг аль хэдийн дэлгэрэнгүй тайлбарласан болно энэ нийтлэл, мөн OCI төслийн хүрээнд санал болгож буй бүх програм хангамжийн стек болон түүний архитектурын онцлогуудын нарийвчилсан тайлбарыг Red Hat-ийн албан ёсны баримт бичиг, нийтлэлээс олж болно (муу биш). нийтлэл Red Hat блогт) болон гуравдагч этгээдэд тойм.

Санал болгож буй стекийн бүрэлдэхүүн хэсгүүд ямар функцтэй болохыг анхаарах нь чухал юм.

  • Подман — runC процессоор дамжуулан контейнер, дүрс хадгалах шууд харилцан үйлчлэл;
  • Биллах - зураг цуглуулах, бүртгэлд оруулах;
  • CRI-O - контейнер зохион байгуулах системд зориулсан гүйцэтгэх орчин (жишээлбэл, Kubernetes).

Стекийн бүрэлдэхүүн хэсгүүдийн харилцан үйлчлэлийн ерөнхий схемийг ойлгохын тулд холболтын диаграммыг энд өгөх нь зүйтэй гэж би бодож байна. Kubernetes c гүйхC болон доод түвшний номын сангуудыг ашиглан CRI-O:

CRI-O нь Docker-ийг орлох Kubernetes-ийн ажиллах цагийн орчин болгон: CentOS 8 дээрх тохиргоо

CRI-O и Kubernetes ижил хувилбар, дэмжлэгийн мөчлөгийг дагаж мөрдөх (нийцтэй байдлын матриц нь маш энгийн: үндсэн хувилбарууд Kubernetes и CRI-O давхцаж байгаа) бөгөөд энэ нь хөгжүүлэгчид энэхүү стекийн ажиллагааг бүрэн, иж бүрэн туршихад анхаарлаа хандуулж байгаа нь ашиглалтын ямар ч хувилбарт ажиллахад хамгийн дээд хэмжээнд хүрч болох тогтвортой байдлыг хүлээх эрхийг бидэнд олгодог (харьцангуй хөнгөн байдал нь энд бас ашигтай байдаг) CRI-O тай харьцуулахад Docker функциональ хязгаарлалттай холбоотой).

Суулгах үед Kubernetes "Зөв арга зам" арга зам (мэдээж OCI дагуу) ашиглах CRI-O тухай CentOS 8 Бид бага зэргийн бэрхшээлтэй тулгарсан ч бид үүнийг амжилттай даван туулсан. Нийтдээ 10 минут шаардагдах суулгах, тохируулах зааврыг би тантай хуваалцахдаа баяртай байх болно.

CRI-O хүрээг ашиглан CentOS 8 дээр Kubernetes-ийг хэрхэн байрлуулах вэ

Тавигдах шаардлага: суулгасан дор хаяж нэг хост (2 цөм, 4 ГБ RAM, дор хаяж 15 ГБ санах ой) байх CentOS 8 ("Сервер" суулгацын профайлыг ашиглахыг зөвлөж байна), түүнчлэн локал DNS-д оруулах оруулгууд (хамгийн сүүлчийн арга бол та /etc/hosts-д нэвтрэх боломжтой). Мөн мартаж болохгүй солилцоог идэвхгүй болгох.

Бид үндсэн хэрэглэгчийн хувьд хост дээрх бүх үйлдлийг гүйцэтгэдэг тул болгоомжтой байгаарай.

  1. Эхний алхамд бид үйлдлийн системээ тохируулж, CRI-O-ийн урьдчилсан хамаарлыг суулгаж, тохируулах болно.
    • Үйлдлийн системээ шинэчилье:
      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 Үйлчилгээг эхлүүлэхийн өмнө шаардлагатай нийтлэг бүрэлдэхүүн хэсэг нь зааснаас өөр байршилтай тул:

      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 ..." кластерт нэгдэх командыг эсвэл ядаж заасан жетонуудыг бичихээ мартуузай.

    • Pod сүлжээнд зориулсан залгаасыг (CNI) суулгацгаая. Би ашиглахыг зөвлөж байна Калико. Илүү алдартай байж магадгүй Flannel нийцтэй байдлын асуудал байна 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

сэтгэгдэл нэмэх