CRI-O ma ke ʻano he pani no Docker ma ke ʻano he runtime environment no Kubernetes: hoʻonohonoho ma CentOS 8

Aloha! ʻO Sergey koʻu inoa, ʻo DevOps wau ma Surf. ʻAʻole makemake ka ʻoihana DevOps ma Surf e hoʻokumu i ka pilina ma waena o nā loea a hoʻohui i nā kaʻina hana, akā no ka noiʻi ikaika ʻana a hoʻokō i nā ʻenehana o kēia manawa ma kāna ʻoihana ponoʻī a me ka ʻoihana o ka mea kūʻai aku.

Ma lalo wau e kamaʻilio liʻiliʻi e pili ana i nā loli o ka ʻenehana ʻenehana no nā ipu i ʻike mākou i ke aʻo ʻana i ka hāʻawi ʻana CentOS 8 a e pili ana i ia mea CRI-O a pehea e hoʻonohonoho koke ai i kahi kaiapuni hoʻokō no Kubernetes.

CRI-O ma ke ʻano he pani no Docker ma ke ʻano he runtime environment no Kubernetes: hoʻonohonoho ma CentOS 8

No ke aha ʻaʻole i hoʻokomo ʻia ʻo Docker i CentOS 8?

Ma hope o ka hoʻokomo ʻana i nā hoʻokuʻu nui hou loa rhel 8 ai ole ia, CentOS 8 ʻAʻole hiki i kekahi ke hoʻomaopopo: ʻaʻole i loaʻa i kēia mau māhele a me nā waihona waihona mana ka noi Docker, ka mea e hoʻololi i nā pūʻolo me ka ideologically a me ka hana ʻO Podman, Buildah (i kēia manawa i ka hāʻawi ʻana ma ka paʻamau) a CRI-O. ʻO kēia ma muli o ka hoʻokō pono o nā kūlana i kūkulu ʻia, ma waena o nā mea ʻē aʻe, e Red Hat ma ke ʻano he ʻāpana o ka papahana Open Container Initiative (OCI).

ʻO ka pahuhopu o OCI, ʻo ia kahi ʻāpana o ka Linux Foundation, ʻo ia ka hana ʻana i nā kūlana ʻoihana wehe no nā ʻano pahu pahu a me nā manawa holo e hoʻoponopono i nā pilikia i ka manawa hoʻokahi. ʻO ka mea mua, ʻaʻole lākou i kūʻē i ka manaʻo o Linux (no ka laʻana, ma ka ʻāpana e hana ai kēlā me kēia papahana i hoʻokahi hana, a Docker he ʻano hui like ʻole). ʻO ka lua, hiki iā lākou ke hoʻopau i nā hemahema āpau o ka polokalamu Docker. ʻO ke kolu, e kūpono loa lākou me nā koi ʻoihana o ke alakaʻi ʻana i nā kahua pāʻoihana no ka lawe ʻana, ka mālama ʻana a me ka lawelawe ʻana i nā noi containerized (no ka laʻana, Red Hat OpenShift).

hewa Docker a ua wehewehe mua ʻia nā pono o ka polokalamu hou i kekahi kikoʻī ma kēiaʻatikala, a me ka wehewehe kikoʻī o ka waihona lako polokalamu holoʻokoʻa i hāʻawi ʻia i loko o ka papahana OCI a me kāna mau hiʻohiʻona hoʻolālā hiki ke loaʻa i nā palapala a me nā ʻatikala mai Red Hat ponoʻī (ʻaʻole hewa. 'atikala ma Red Hat blog) a ma ka ʻaoʻao ʻekolu hōʻike manaʻo.

He mea nui e hoʻomaopopo i ka hana o nā ʻāpana o ka waihona i manaʻo ʻia:

  • ʻO Podman - ka pilina pololei me nā ipu a me ka mālama kiʻi ma o ke kaʻina hana runC;
  • Buildah - hui a hoʻouka i nā kiʻi i ke kākau inoa;
  • CRI-O - kahi kaiapuni hiki ke hoʻokō ʻia no nā ʻōnaehana orchestration ipu (no ka laʻana, Kubernetes).

Manaʻo wau e hoʻomaopopo i ka hoʻolālā maʻamau o ka launa pū ʻana ma waena o nā ʻāpana o ka waihona, pono e hāʻawi i kahi kiʻi pili ma aneʻi Kubernetes c holoC a me nā hale waihona puke haʻahaʻa e hoʻohana ana CRI-O:

CRI-O ma ke ʻano he pani no Docker ma ke ʻano he runtime environment no Kubernetes: hoʻonohonoho ma CentOS 8

CRI-O и Kubernetes pili i ka hoʻokuʻu like ʻana a me ka pōʻai kākoʻo (maʻalahi loa ka matrix compatibility: nā mana nui Kubernetes и CRI-O coincide), a ʻo kēia, e noʻonoʻo ana i ka nānā ʻana i ka hoʻāʻo piha ʻana o ka hana o kēia pūʻulu e nā mea hoʻomohala, hāʻawi iā mākou i ke kuleana e manaʻo i ka paʻa loa e hiki ke loaʻa i ka hana ma lalo o nā hiʻohiʻona hoʻohana (ʻoi aku ka maikaʻi o ka māmā pili ma aneʻi. CRI-O hoʻohālikelike ʻia me Docker ma muli o ka palena o ka hana).

Ke kau nei Kubernetes "ala pololei" ala (e like me ka OCI, ʻoiaʻiʻo) me ka hoʻohana ʻana CRI-O maluna o CentOS 8 Ua loaʻa iā mākou kekahi mau pilikia liʻiliʻi, akā naʻe, ua lanakila mākou. E hauʻoli wau e kaʻana like me ʻoe i nā ʻōlelo aʻoaʻo hoʻonohonoho a me ka hoʻonohonoho ʻana, ʻo ia ka nui o 10 mau minuke.

Pehea e kau ai i nā Kubernetes ma CentOS 8 me ka hoʻohana ʻana i ka CRI-O framework

Nā mea e pono ai: ke alo o ka liʻiliʻi o hoʻokahi host (2 cores, 4 GB RAM, kahi e waiho ai ma kahi o 15 GB) me ka hoʻokomo CentOS 8 (ʻO ka ʻōlelo hoʻonohonoho "Server" ua ʻōlelo ʻia), a me nā mea hoʻokomo iā ia i ka DNS kūloko (ma ke ʻano he hopena hope loa, hiki iā ʻoe ke loaʻa me kahi komo i /etc/hosts). A mai poina disable swap.

Hana mākou i nā hana āpau ma luna o ka mea hoʻohana ma ke ʻano he kumu hoʻohana, e makaʻala.

  1. I ka hana mua, e hoʻonohonoho mākou i ka OS, hoʻokomo a hoʻonohonoho i nā hilinaʻi mua no CRI-O.
    • E hoʻohou i ka OS:
      dnf -y update
      

    • A laila pono ʻoe e hoʻonohonoho i ka pā ahi a me SELinux. Eia nā mea a pau e pili ana i ke kaiapuni kahi e hana ai kā mākou mea hoʻokipa a mea hoʻokipa paha. Hiki iā ʻoe ke hoʻonohonoho i kahi pā ahi e like me nā ʻōlelo aʻoaʻo mai palapala, a i ʻole, inā ʻoe ma kahi pūnaewele hilinaʻi a hoʻohana paha i kahi pā ahi ʻaoʻao ʻekolu, e hoʻololi i ka ʻāpana paʻamau i hilinaʻi a hoʻopau paha i ka pā ahi:
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      No ka hoʻopau ʻana i ka pā ahi hiki iā ʻoe ke hoʻohana i kēia kauoha:

      systemctl disable --now firewalld
      

      Pono ʻo SELinux e hoʻopau a hoʻololi ʻia i ke ʻano "ʻae":

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

    • E hoʻouka i nā modula kernel pono a me nā pūʻolo, e hoʻonohonoho i ka hoʻouka ʻana o ka module "br_netfilter" i ka hoʻomaka ʻana o ka ʻōnaehana:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • No ka ho'ā ʻana i ka packet forwarding a me ka hoʻoponopono ʻana i nā kaʻa, e hana mākou i nā hoʻonohonoho kūpono:
      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
      

      e hoʻohana i nā hoʻonohonoho i hana ʻia:

      sysctl --system

    • hoʻonoho i ka mana i makemake ʻia CRI-O (ka mana nui CRI-O, e like me ka mea i ʻōlelo mua ʻia, e hoʻohālikelike i ka mana i makemake ʻia Kubernetes), mai ka mana hou loa Kubernetes i kēia manawa 1.18:
      export REQUIRED_VERSION=1.18
      

      hoʻohui i nā waihona e pono ai:

      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

    • i kēia manawa hiki iā mākou ke hoʻouka CRI-O:
      dnf -y install cri-o
      

      E hoʻolohe i ka nuance mua a mākou e hālāwai ai i ke kaʻina hana: pono e hoʻoponopono i ka hoʻonohonoho CRI-O ma mua o ka hoʻomaka ʻana i ka lawelawe, no ka mea he wahi ʻokoʻa ka mea conmon i makemake ʻia ma mua o ka mea i kuhikuhi ʻia:

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

      I kēia manawa hiki iā ʻoe ke hoʻāla a hoʻomaka i ka daemon CRI-O:

      systemctl enable --now crio
      

      Hiki iā ʻoe ke nānā i ke kūlana daemon:

      systemctl status crio
      

  2. Hoʻokomo a hoʻāla Kubernetes.
    • E hoʻohui i ka waihona i makemake ʻia:
      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
      

      I kēia manawa hiki iā mākou ke hoʻouka Kubernetes (Nā mana 1.18, e like me ka mea i ʻōlelo ʻia ma luna):

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

    • ʻO ka lua o ka nuance nui: no ka mea ʻaʻole mākou e hoʻohana i kahi daemon Docker, akā hoʻohana mākou i ka daemon CRI-O, ma mua o ka hoʻomaka ʻana a me ka hoʻomaka ʻana Kubernetes Pono ʻoe e hana i nā hoʻonohonoho kūpono i ka faila hoʻonohonoho /var/lib/kubelet/config.yaml, i ka hana mua ʻana i ka papa kuhikuhi makemake:
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • ʻO ke kolu koʻikoʻi koʻikoʻi a mākou e hālāwai ai i ka wā o ka hoʻonohonoho ʻana: ʻoiai ke hōʻike nei mākou i ka mea hoʻokele i hoʻohana ʻia c hui, a me kāna hoʻonohonoho ʻana ma o nā hoʻopaʻapaʻa i hala kubelet ua kahiko ʻia (e like me ka mea i hōʻike ʻia ma ka palapala), pono mākou e hoʻohui i nā manaʻo i ka faila, inā ʻaʻole e hoʻomaka ʻia kā mākou hui:
      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

    • I kēia manawa hiki iā mākou ke hoʻoikaika i ka daemon kubelet:
      sudo systemctl enable --now kubelet
      

      E hoʻopilikino mokulele hoʻomalu ai ole ia, paʻahana nodes i mau minuke, hiki iā ʻoe ke hoʻohana me keia palapala.

  3. ʻO ka manawa kēia e hoʻomaka ai i kā mākou hui.
    • No ka hoʻomaka ʻana i ka pūʻulu, e holo i ke kauoha:
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      E ʻoluʻolu e kākau i ke kauoha e hui pū i ka pūʻulu "kubeadm join ...", i noi ʻia iā ʻoe e hoʻohana ma ka hopena o ka hopena, a i ʻole nā ​​​​hōʻailona i kuhikuhi ʻia.

    • E hoʻokomo i ka plugin (CNI) no ka pūnaewele Pod. Manaʻo wau e hoʻohana ʻO Kalico. Ua kaulana paha Flannel loaʻa nā pilikia pili me lawe lima, ʻae a ʻO Kalico - ka hoʻokō CNI wale nō i ʻōlelo ʻia a hoʻāʻo piha ʻia e ka papahana Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • No ka hoʻopili ʻana i kahi node limahana i kā mākou puʻupuʻu, pono ʻoe e hoʻonohonoho iā ia e like me nā kuhikuhi 1 a me 2, a i ʻole e hoʻohana. palapala, a laila e holo i ke kauoha mai ka "kubeadm init ..." i kākau ai mākou i lalo i ka pae mua:
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • E nānā i ka hoʻomaka ʻana o kā mākou pūʻulu a hoʻomaka e hana:
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    Mākaukau! Hiki iā ʻoe ke hoʻokipa i nā uku uku ma kāu hui K8s.

He aha ka mea e kali nei iā mākou ma mua

Manaʻo wau ua kōkua nā ʻōlelo aʻoaʻo ma luna iā ʻoe e mālama i kekahi manawa a me nā aʻalolo.
ʻO ka hopena o nā kaʻina hana i hana ʻia ma ka ʻoihana e hilinaʻi pinepine ʻia i ka ʻae ʻia ʻana e ka hapa nui o nā mea hoʻohana hope a me nā mea hoʻomohala o nā polokalamu ʻē aʻe i ka niche pili. ʻAʻole maopopo loa i ka mea e alakaʻi ai nā hana OCI i kekahi mau makahiki, akā e nānā mākou me ka hauʻoli. Hiki iā ʻoe ke kaʻana like i kou manaʻo i kēia manawa ma nā manaʻo.

E noho ʻoe!

Ua puka mai kēia ʻatikala ma muli o nā kumu penei:



Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka