CRI-O salaku gaganti Docker salaku lingkungan runtime pikeun Kubernetes: setup on CentOS 8

Halo! Nami abdi Sergey, abdi DevOps di Surf. Departemén DevOps di Surf tujuanana henteu ngan ukur pikeun ngadegkeun interaksi antara spesialis sareng ngahijikeun prosés kerja, tapi ogé pikeun aktip panalungtikan sareng nerapkeun téknologi ayeuna boh dina infrastruktur sorangan sareng dina infrastruktur palanggan.

Handap kuring bakal ngobrol saeutik ngeunaan parobahan dina tumpukan téhnologi pikeun peti nu urang encountered bari diajar sebaran CentOS 8 sarta ngeunaan naon éta CRI-O jeung kumaha gancang nyetél hiji lingkungan laksana pikeun Kubernetes.

CRI-O salaku gaganti Docker salaku lingkungan runtime pikeun Kubernetes: setup on CentOS 8

Naha Docker henteu kalebet dina CentOS 8?

Saatos masang sékrési utama panganyarna RÉLÉL 8 atawa CentOS 8 hiji teu bisa mantuan tapi perhatikeun: sebaran ieu sareng repositories resmi teu ngandung aplikasi Docker, anu sacara ideologis sareng fungsional ngagentos bungkusan podman, Bangun (hadir dina sebaran sacara standar) jeung CRI-O. Ieu disababkeun ku palaksanaan praktis standar anu dikembangkeun, antara séjén, ku Red Hat salaku bagian tina proyék Open Container Initiative (OCI).

Tujuan OCI, anu mangrupa bagian tina The Linux Foundation, nya éta nyieun standar industri kabuka pikeun format wadahna jeung runtimes nu ngajawab sababaraha masalah sakaligus. Anu mimiti, aranjeunna henteu ngabantah filosofi Linux (contona, dina bagian anu unggal program kedah ngalakukeun hiji tindakan, sareng Docker mangrupakeun jenis gabungan sadaya-dina-hiji). Kadua, aranjeunna tiasa ngaleungitkeun sadaya kakurangan anu aya dina parangkat lunak Docker. Katilu, aranjeunna bakal sapinuhna cocog sareng sarat bisnis platform komérsial ngarah pikeun nyebarkeun, ngatur sareng ngalayanan aplikasi wadahna (contona, Red Hat OpenShift).

shortcomings Docker sareng kaunggulan parangkat lunak énggal parantos dijelaskeun sacara rinci dina artikel ieu, sareng pedaran lengkep ngeunaan tumpukan parangkat lunak anu ditawarkeun dina proyék OCI sareng fitur arsitékturna tiasa dipendakan dina dokuméntasi resmi sareng tulisan ti Red Hat sorangan (henteu parah. artikel dina blog Red Hat) sareng di pihak katilu ulasan.

Kadé dicatet pungsionalitas naon komponén tumpukan diusulkeun gaduh:

  • podman - interaksi langsung jeung peti jeung neundeun gambar ngaliwatan prosés runC;
  • Bangun - assembly jeung unggah gambar ka pendaptaran;
  • CRI-O - lingkungan laksana pikeun sistem orkestrasi wadahna (contona, Kubernetes).

Jigana nu ngartos skéma umum interaksi antara komponén tumpukan, éta sasaena nyadiakeun diagram sambungan dieu. Kubernetes c lumpatC jeung perpustakaan-tingkat low ngagunakeun CRI-O:

CRI-O salaku gaganti Docker salaku lingkungan runtime pikeun Kubernetes: setup on CentOS 8

CRI-O и Kubernetes taat kana sékrési sareng siklus dukungan anu sami (matriks kasaluyuan saderhana pisan: versi utama Kubernetes и CRI-O coincide), sarta ieu, nyokot kana akun fokus kana nguji lengkep jeung komprehensif ngeunaan operasi tumpukan ieu ku pamekar, méré urang hak nyangka stabilitas achievable maksimum dina operasi dina sagala skenario pamakéan (lightness relatif ogé mangpaat di dieu. CRI-O dibandingkeun Docker kusabab watesan fungsionalitas anu tujuanana).

Nalika masang Kubernetes "jalan katuhu" cara (nurutkeun OCI, tangtu) ngagunakeun CRI-O dina CentOS 8 Urang encountered sababaraha kasusah minor, nu kitu, urang hasil overcame. Kuring bakal senang babagi sareng anjeun parentah instalasi tur konfigurasi, nu dina total bakal nyandak ngeunaan 10 menit.

Kumaha cara nyebarkeun Kubernetes dina CentOS 8 nganggo kerangka CRI-O

Prasyarat: ayana sahanteuna hiji host (2 cores, 4 GB RAM, sahenteuna 15 GB gudang) kalawan dipasang. CentOS 8 (Profil instalasi "Server" disarankeun), kitu ogé éntri pikeun éta dina DNS lokal (salaku jalan terakhir, anjeun tiasa nampi éntri dina /etc/hosts). Jeung ulah poho nganonaktipkeun swap.

Urang ngalakukeun sagala operasi dina host salaku pamaké root, ati-ati.

  1. Dina lengkah kahiji, urang bakal ngonpigurasikeun OS, masang sareng ngonpigurasikeun katergantungan awal pikeun CRI-O.
    • Hayu urang ngapdet OS:
      dnf -y update
      

    • Salajengna anjeun kedah ngonpigurasikeun firewall sareng SELinux. Di dieu sadayana gumantung kana lingkungan dimana host atanapi host urang bakal jalan. Anjeun tiasa nyetél firewall numutkeun saran ti dokuméntasi, atawa, lamun anjeun dina jaringan dipercaya atawa make firewall pihak katilu, robah zona standar jadi dipercaya atawa mareuman firewall:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Pikeun mareuman firewall anjeun tiasa nganggo paréntah di handap ieu:

      systemctl disable --now firewalld
      

      SELinux kedah dipareuman atanapi gentos kana mode "permisif":

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

    • Muatkeun modul sareng bungkusan kernel anu diperyogikeun, konfigurasikeun beban otomatis modul "br_netfilter" nalika ngamimitian sistem:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Pikeun ngaktipkeun neraskeun pakét sareng ngolah lalu lintas anu leres, kami bakal ngadamel setélan anu pas:
      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
      

      nerapkeun setélan anu dilakukeun:

      sysctl --system

    • nyetel versi diperlukeun CRI-O (versi utama CRI-O, sakumaha geus disebutkeun, cocog versi diperlukeun Kubernetes), saprak versi stabil panganyarna Kubernetes ayeuna 1.18:
      export REQUIRED_VERSION=1.18
      

      tambahkeun repositori anu diperyogikeun:

      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

    • ayeuna urang tiasa install CRI-O:
      dnf -y install cri-o
      

      Nengetan nuansa munggaran nu urang sapatemon salila prosés instalasi: Anjeun kudu ngédit konfigurasi CRI-O sateuacan ngamimitian jasa, sabab komponén conmon anu diperyogikeun ngagaduhan lokasi anu béda ti anu ditunjuk:

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

      Ayeuna anjeun tiasa ngaktipkeun sareng ngamimitian daemon CRI-O:

      systemctl enable --now crio
      

      Anjeun tiasa pariksa status daemon:

      systemctl status crio
      

  2. Pamasangan sareng aktivasina Kubernetes.
    • Hayu urang tambahkeun gudang anu diperyogikeun:
      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
      

      Ayeuna urang tiasa install Kubernetes (versi 1.18, sakumaha anu disebatkeun di luhur):

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

    • Nuansa penting kadua: sabab kami henteu nganggo daemon Docker, tapi kami nganggo daemon CRI-O, sateuacan peluncuran sareng inisialisasi Kubernetes Anjeun kudu nyieun setélan luyu dina file konfigurasi /var/lib/kubelet/config.yaml, sanggeus mimiti nyieun diréktori nu dipikahoyong:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Titik penting katilu anu urang sapatemon nalika pamasangan: sanaos kanyataan yén kami parantos nunjukkeun supir anu dianggo cgroup, jeung konfigurasi na ngaliwatan argumen diliwatan cubelet luntur (sakumaha anu dinyatakeun sacara eksplisit dina dokuméntasi), urang kedah nambihan argumen kana file, upami henteu kluster urang moal diinisialisasi:
      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

    • Ayeuna urang tiasa ngaktipkeun daemon cubelet:
      sudo systemctl enable --now kubelet
      

      Pikeun ngaropéa kontrol-pesawat atawa pagawe titik dina menit, Anjeun tiasa make kalawan ieu naskah.

  3. Waktosna pikeun ngamimitian kluster urang.
    • Pikeun ngamimitian klaster, jalankeun paréntah:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Pastikeun pikeun nuliskeun paréntah pikeun ngiluan klaster "kubeadm gabung ...", anu anjeun dipenta pikeun dianggo dina tungtung kaluaran, atanapi sahenteuna token anu ditangtukeun.

    • Hayu urang pasang plugin (CNI) pikeun jaringan Pod. Abdi nyarankeun ngagunakeun Calico. Bisa jadi leuwih populér Flannel boga masalah kasaluyuan jeung nftables, enya jeung Calico - hijina palaksanaan CNI dianjurkeun jeung pinuh diuji ku proyék Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Pikeun nyambungkeun titik pagawe kana klaster kami, anjeun kedah ngonpigurasikeunana dumasar kana paréntah 1 sareng 2, atanapi nganggo naskah, teras jalankeun paréntah tina kaluaran "kubeadm init ..." anu kami tulis dina léngkah sateuacana:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Hayu urang parios yén klaster kami diinisialisasi sareng ngamimitian damel:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Siap! Anjeun geus bisa host payloads on K8s kluster Anjeun.

Naon awaits kami payun

Abdi ngarepkeun petunjuk di luhur ngabantosan anjeun ngahémat waktos sareng saraf.
Hasil tina prosés anu lumangsung di industri sering gumantung kana kumaha aranjeunna ditampi ku seuseueurna pangguna akhir sareng pamekar parangkat lunak sanés dina niche anu saluyu. Ieu henteu acan sagemblengna jelas naon inisiatif OCI bakal ngakibatkeun dina sababaraha taun, tapi urang bakal ningali kalawan senang. Anjeun tiasa ngabagikeun pendapat anjeun ayeuna dina koméntar.

Tetep di dieu!

Tulisan ieu muncul berkat sumber di handap ieu:



sumber: www.habr.com

Tambahkeun komentar