CRI-O kòm yon ranplasman pou Docker kòm yon anviwònman ègzekutabl pou Kubernetes: konfigirasyon sou CentOS 8

Bonjou! Non mwen se Sergey, mwen se DevOps nan Surf. Depatman DevOps nan Surf vize pa sèlman etabli entèraksyon ant espesyalis ak entegre pwosesis travay, men tou, aktivman rechèch ak aplike teknoloji aktyèl tou de nan enfrastrikti pwòp li yo ak nan enfrastrikti kliyan an.

Anba a mwen pral pale yon ti kras sou chanjman ki fèt nan pil teknoloji pou resipyan ke nou te rankontre pandan n ap etidye distribisyon an. Santos 8 ak sou sa li ye CRI-O ak kouman yo byen vit mete kanpe yon anviwònman ègzèkutabl pou Kubernetes.

CRI-O kòm yon ranplasman pou Docker kòm yon anviwònman ègzekutabl pou Kubernetes: konfigirasyon sou CentOS 8

Poukisa Docker pa enkli nan CentOS 8?

Apre enstale dènye gwo degaje yo rèl 8 oswa Santos 8 yon moun pa ka pa remake: distribisyon sa yo ak depo ofisyèl yo pa genyen aplikasyon an Koupre, ki ideolojikman ak fonksyonèl ranplase pakè yo podman, Buildah (prezante nan distribisyon an pa default) ak CRI-O. Sa a se akòz aplikasyon pratik estanda ki te devlope, pami lòt bagay, pa Red Hat nan kad pwojè Open Container Initiative (OCI).

Objektif OCI, ki se yon pati nan Linux Foundation, se kreye estanda endistri ouvè pou fòma veso ak ègzekutabl ki rezoud plizyè pwoblèm nan yon fwa. Premyèman, yo pa t kontredi filozofi Linux (pa egzanp, nan pati ke chak pwogram ta dwe fè yon aksyon, ak Koupre se yon kalite tout-an-yon konbine). Dezyèmman, yo ta ka elimine tout defisyans ki egziste deja nan lojisyèl an Koupre. Twazyèmman, yo ta totalman konpatib ak egzijans biznis dirijan platfòm komèsyal pou deplwaye, jere ak sèvi aplikasyon nan kontenè (pa egzanp, Red Hat OpenShift).

Limit Koupre ak avantaj ki genyen nan nouvo lojisyèl an te deja dekri nan kèk detay nan atik sa a, ak yon deskripsyon detaye sou tout pil lojisyèl yo ofri nan pwojè OCI a ak karakteristik achitekti li yo ka jwenn nan dokiman ofisyèl la ak atik ki soti nan Red Hat li menm (pa yon move atik nan Red Hat blog) ak nan twazyèm pati revizyon.

Li enpòtan sonje ki fonksyonalite eleman yo nan chemine yo pwopoze a genyen:

  • podman — entèraksyon dirèk ak resipyan ak depo imaj atravè pwosesis runC la;
  • Buildah — asanble ak telechaje imaj nan rejis la;
  • CRI-O — yon anviwònman ègzekutabl pou sistèm orchestrasyon veso (pa egzanp, Kubernetes).

Mwen panse ke yo konprann konplo a jeneral nan entèraksyon ant eleman yo nan chemine a, li se konseye yo bay yon dyagram koneksyon isit la. Kubernetes c kouriC ak bibliyotèk ba nivo lè l sèvi avèk CRI-O:

CRI-O kòm yon ranplasman pou Docker kòm yon anviwònman ègzekutabl pou Kubernetes: konfigirasyon sou CentOS 8

CRI-O и Kubernetes konfòme yo ak menm lage ak sik sipò (matris konpatibilite a trè senp: vèsyon pi gwo Kubernetes и CRI-O kowenside), ak sa a, pran an kont konsantre sou tès konplè ak konplè sou operasyon an nan chemine sa a pa devlopè, ban nou dwa pou atann estabilite maksimòm posib nan operasyon nan nenpòt senaryo itilizasyon (lèjèr relatif tou se benefisye isit la. CRI-O konpare ak Koupre akòz limitasyon objektif nan fonksyonalite).

Lè w ap enstale Kubernetes "dwa fason" fason (dapre OCI, nan kou) lè l sèvi avèk CRI-O sou Santos 8 Nou te rankontre kèk difikilte minè, ki, sepandan, nou te simonte avèk siksè. Mwen pral kontan pataje avèk ou enstalasyon ak enstriksyon konfigirasyon, ki an total pral pran apeprè 10 minit.

Ki jan yo deplwaye Kubernetes sou CentOS 8 lè l sèvi avèk fondasyon CRI-O

Kondisyon: prezans nan omwen yon lame (2 nwayo, 4 GB RAM, omwen 15 GB depo) ak enstale Santos 8 (pwofil enstalasyon "Sèvè a" rekòmande), osi byen ke antre pou li nan DNS lokal la (kòm yon dènye rekou, ou ka jwenn ak yon antre nan /etc/hosts). Epi pa bliye enfim swap.

Nou fè tout operasyon sou lame a kòm itilizatè rasin lan, fè atansyon.

  1. Nan premye etap la, nou pral konfigirasyon eksplwatasyon an, enstale ak konfigirasyon depandans preliminè pou CRI-O.
    • Ann mete ajou OS la:
      dnf -y update
      

    • Apre sa ou bezwen configure pare-feu a ak SELinux. Isit la tout bagay depann sou anviwònman an nan ki lame nou an oswa gen tout pouvwa a ap travay. Ou ka swa mete kanpe yon firewall dapre rekòmandasyon yo soti nan dokiman, oswa, si w se sou yon rezo ki fè konfyans oswa si w itilize yon pare-feu twazyèm pati, chanje zòn default la pou w fè konfyans oswa fèmen firewall la:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Pou fèmen firewall la ou ka itilize lòd sa a:

      systemctl disable --now firewalld
      

      SELinux bezwen etenn oswa chanje nan mòd "permisif":

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

    • Chaje modil nwayo ki nesesè yo ak pakè, konfigirasyon chaj otomatik modil "br_netfilter" nan demaraj sistèm lan:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • Pou aktive transmisyon pake ak korije pwosesis trafik, nou pral fè paramèt ki apwopriye yo:
      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
      

      aplike paramèt yo fè:

      sysctl --system

    • mete vèsyon ki nesesè yo CRI-O (pi gwo vèsyon CRI-O, kòm deja mansyone, matche ak vèsyon ki nesesè yo Kubernetes), depi dènye vèsyon ki estab Kubernetes kounye a 1.18:
      export REQUIRED_VERSION=1.18
      

      ajoute depo nesesè yo:

      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

    • kounye a nou ka enstale CRI-O:
      dnf -y install cri-o
      

      Peye atansyon sou premye nuans ke nou rankontre pandan pwosesis enstalasyon an: ou bezwen modifye konfigirasyon an CRI-O anvan ou kòmanse sèvis la, piske eleman konmon ki nesesè yo gen yon kote ki diferan pase sa ki espesifye a:

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

      Koulye a, ou ka aktive epi kòmanse demon an CRI-O:

      systemctl enable --now crio
      

      Ou ka tcheke estati demon an:

      systemctl status crio
      

  2. Enstalasyon ak aktivasyon Kubernetes.
    • Ann ajoute repozitwa ki nesesè yo:
      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
      

      Koulye a, nou ka enstale Kubernetes (vèsyon 1.18, jan mansyone pi wo a):

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

    • Dezyèm nuans enpòtan an: depi nou pa sèvi ak yon demon Koupre, men nou itilize demon an CRI-O, anvan lansman ak inisyalizasyon Kubernetes ou bezwen fè paramèt ki apwopriye yo nan fichye konfigirasyon /var/lib/kubelet/config.yaml, li te premye kreye anyè a vle:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • Twazyèm pwen enpòtan ke nou rankontre pandan enstalasyon: malgre lefèt ke nou te endike chofè a itilize cgroup, ak konfigirasyon li yo atravè agiman yo te pase kubelet se demode (jan sa endike klèman nan dokiman an), nou bezwen ajoute agiman nan dosye a, otreman gwoup nou an pa pral inisyalize:
      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

    • Koulye a, nou ka aktive demon an kubelet:
      sudo systemctl enable --now kubelet
      

      Pou personnaliser kontwòl-avyon oswa travayè sosyal nœuds nan minit, ou ka itilize ak script sa a.

  3. Li lè pou inisyalize gwoup nou an.
    • Pou inisyalize gwoup la, kouri lòd la:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      Asire ou ke ou ekri kòmandman pou rantre nan gwoup "kubeadm join ...", ke yo mande w pou w itilize nan fen pwodiksyon an, oswa omwen siy espesifye yo.

    • Ann enstale plugin (CNI) pou rezo Pod la. Mwen rekòmande pou itilize endyèn. Petèt pi popilè Flanèl gen pwoblèm konpatibilite ak nftables, wi ak endyèn - sèlman aplikasyon CNI rekòmande ak konplètman teste pa pwojè a Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • Pou konekte yon ne travayè nan gwoup nou an, ou bezwen konfigirasyon li dapre enstriksyon 1 ak 2, oswa itilize script, Lè sa a, kouri kòmandman an soti nan "kubeadm init..." pwodiksyon ke nou te ekri nan etap anvan an:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • Ann tcheke si gwoup nou an inisyalize epi li kòmanse travay:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Pare! Ou ka deja òganize charj sou gwoup K8s ou a.

Sa k ap tann nou devan

Mwen espere ke enstriksyon ki anwo yo te ede sove ou kèk tan ak nè.
Rezilta a nan pwosesis ki fèt nan endistri a souvan depann sou fason yo aksepte pa èstime nan itilizatè fen ak devlopè nan lòt lojisyèl nan Tanporèman nich ki koresponn lan. Li poko klè nèt sou sa inisyativ OCI yo pral mennen nan kèk ane, men nou pral gade ak plezi. Ou ka pataje opinyon w kounye a nan kòmantè yo.

Rete branche!

Atik sa a parèt gras ak sous sa yo:



Sous: www.habr.com

Add nouvo kòmantè