CRI-O-ն որպես Docker-ի փոխարինում՝ որպես Kubernetes-ի գործարկվող միջավայր. կարգավորում CentOS 8-ում

Բարեւ Ձեզ! Ես Սերգեյն եմ, ես DevOps եմ Surf-ում: Surf-ի DevOps բաժինը նպատակ ունի ոչ միայն ստեղծել մասնագետների միջև փոխգործակցություն և ինտեգրել աշխատանքային գործընթացները, այլև ակտիվորեն ուսումնասիրել և ներդնել ընթացիկ տեխնոլոգիաները ինչպես սեփական ենթակառուցվածքում, այնպես էլ հաճախորդի ենթակառուցվածքում:

Ստորև ես մի փոքր կխոսեմ բեռնարկղերի տեխնոլոգիական փաթեթի փոփոխությունների մասին, որոնք մենք հանդիպեցինք բաշխումն ուսումնասիրելիս: CentOS 8- ը և այն մասին, թե ինչ է դա CRI-O և ինչպես արագ ստեղծել գործարկվող միջավայր Կուբերնետես.

CRI-O-ն որպես Docker-ի փոխարինում՝ որպես Kubernetes-ի գործարկվող միջավայր. կարգավորում CentOS 8-ում

Ինչու՞ Docker-ը ներառված չէ CentOS 8-ում:

Վերջին հիմնական թողարկումները տեղադրելուց հետո RHEL 8 կամ CentOS 8- ը չի կարելի չնկատել. այս բաշխումները և պաշտոնական պահոցները չեն պարունակում հավելվածը դոկեր, որոնք գաղափարապես և ֆունկցիոնալորեն փոխարինում են փաթեթներին Պոդման, Բիլդա (կանխադրված բաշխման մեջ առկա է) և CRI-O. Սա պայմանավորված է ստանդարտների գործնական կիրառմամբ, որոնք մշակվել են, ի թիվս այլ բաների, Red Hat-ի կողմից՝ Open Container Initiative (OCI) նախագծի շրջանակներում:

The Linux հիմնադրամի մաս կազմող OCI-ի նպատակն է ստեղծել բաց արդյունաբերական ստանդարտներ կոնտեյների ձևաչափերի և գործարկման ժամանակների համար, որոնք միանգամից մի քանի խնդիր են լուծում: Նախ, դրանք չէին հակասում Linux-ի փիլիսոփայությանը (օրինակ, այն մասով, որ յուրաքանչյուր ծրագիր պետք է կատարի մեկ գործողություն, և դոկեր մի տեսակ «բոլորը մեկում» կոմբինատ է): Երկրորդ, նրանք կարող էին վերացնել ծրագրային ապահովման բոլոր առկա թերությունները դոկեր. Երրորդ, դրանք լիովին համատեղելի կլինեն առաջատար առևտրային հարթակների բիզնես պահանջներին՝ կոնտեյներային հավելվածների տեղակայման, կառավարման և սպասարկման համար (օրինակ՝ Red Hat OpenShift):

Սահմանափակումները դոկեր իսկ նոր ծրագրաշարի առավելությունները արդեն որոշ մանրամասն նկարագրված են այս հոդվածըև OCI նախագծի շրջանակներում առաջարկվող ծրագրային ապահովման ամբողջ փաթեթի մանրամասն նկարագրությունը և դրա ճարտարապետական ​​առանձնահատկությունները կարելի է գտնել հենց Red Hat-ի պաշտոնական փաստաթղթերում և հոդվածներում (վատ չէ հոդված Red Hat բլոգում) և երրորդ կողմում ակնարկներ.

Կարևոր է նշել, թե ինչ գործառույթներ ունեն առաջարկվող կույտի բաղադրիչները.

  • Պոդման — ուղղակի փոխազդեցություն բեռնարկղերի հետ և պատկերի պահպանում runC գործընթացի միջոցով.
  • Բիլդա — պատկերների հավաքում և վերբեռնում գրանցամատյանում.
  • CRI-O — գործարկվող միջավայր կոնտեյներային նվագախմբային համակարգերի համար (օրինակ՝ Kubernetes):

Կարծում եմ, որ կույտի բաղադրիչների միջև փոխազդեցության ընդհանուր սխեման հասկանալու համար նպատակահարմար է այստեղ տրամադրել կապի դիագրամ Կուբերնետես c runC և ցածր մակարդակի գրադարանների օգտագործումը 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 ԳԲ օպերատիվ հիշողություն, առնվազն 15 ԳԲ պահեստ) տեղադրված CentOS 8- ը (Խորհուրդ է տրվում «Սերվերի» տեղադրման պրոֆիլը), ինչպես նաև դրա համար գրառումներ տեղական DNS-ում (որպես վերջին միջոց՝ կարող եք մուտք գործել /etc/hosts-ում մուտքագրելով): Եվ մի մոռացեք անջատել փոխանակումը.

Մենք կատարում ենք բոլոր գործողությունները հոսթի վրա որպես արմատային օգտվող, զգույշ եղեք:

  1. Առաջին քայլում մենք կկազմաձևենք ՕՀ-ն, կտեղադրենք և կկարգավորենք CRI-O-ի նախնական կախվածությունները:
    • Եկեք թարմացնենք ՕՀ-ը.
      dnf -y update
      

    • Հաջորդը դուք պետք է կարգավորեք firewall-ը և SELinux-ը: Այստեղ ամեն ինչ կախված է այն միջավայրից, որտեղ կաշխատեն մեր հյուրընկալողը կամ հոսթերը: Դուք կարող եք կամ ստեղծել firewall՝ համաձայն առաջարկությունների փաստաթղթավորում, կամ, եթե վստահելի ցանցում եք կամ օգտագործում եք երրորդ կողմի firewall, փոխեք լռելյայն գոտին վստահելի կամ անջատեք firewall-ը.
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Firewall-ն անջատելու համար կարող եք օգտագործել հետևյալ հրամանը.

      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

    • Երրորդ կարևոր կետը, որը մենք հանդիպում ենք տեղադրման ժամանակ. չնայած այն հանգամանքին, որ մենք նշել ենք օգտագործված վարորդը cgroup, և դրա կազմաձևումը փոխանցված փաստարկների միջոցով կուբելետ հնացած է (ինչպես հստակորեն նշված է փաստաթղթերում), մենք պետք է ֆայլին արգումենտներ ավելացնենք, հակառակ դեպքում մեր կլաստերը չի սկզբնավորվի.
      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 ցանցի համար։ Խորհուրդ եմ տալիս օգտագործել Calico- ն. Հնարավոր է ավելի հայտնի Ֆլանել հետ համատեղելիության խնդիրներ ունի nftables, այո եւ այո Calico- ն - ծրագրի կողմից առաջարկված և ամբողջությամբ փորձարկված միակ 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-ի նախաձեռնությունները մի քանի տարի հետո, բայց մենք հաճույքով կհետևենք: Դուք կարող եք կիսվել ձեր կարծիքով հենց հիմա մեկնաբանություններում։

Մնացեք մեզ հետ!

Այս հոդվածը հայտնվել է հետևյալ աղբյուրների շնորհիվ.



Source: www.habr.com

Добавить комментарий