కుబెర్నెట్స్ కోసం ఎక్జిక్యూటబుల్ ఎన్విరాన్‌మెంట్‌గా డాకర్‌కి బదులుగా CRI-O: సెంటప్ సెంటప్ 8

హలో! నా పేరు సెర్గీ, నేను సర్ఫ్‌లో DevOps. సర్ఫ్‌లోని DevOps విభాగం స్పెషలిస్ట్‌ల మధ్య పరస్పర చర్యను ఏర్పాటు చేయడం మరియు పని ప్రక్రియలను ఏకీకృతం చేయడం మాత్రమే కాకుండా, దాని స్వంత అవస్థాపనలో మరియు కస్టమర్ యొక్క అవస్థాపనలో ప్రస్తుత సాంకేతికతలను చురుకుగా పరిశోధించడం మరియు అమలు చేయడం కూడా లక్ష్యంగా పెట్టుకుంది.

పంపిణీని అధ్యయనం చేస్తున్నప్పుడు మేము ఎదుర్కొన్న కంటైనర్‌ల కోసం టెక్నాలజీ స్టాక్‌లో మార్పుల గురించి నేను క్రింద కొంచెం మాట్లాడతాను CentOS 8 మరియు అది ఏమిటో గురించి CRI-O మరియు ఎక్జిక్యూటబుల్ వాతావరణాన్ని త్వరగా ఎలా సెటప్ చేయాలి Kubernetes.

కుబెర్నెట్స్ కోసం ఎక్జిక్యూటబుల్ ఎన్విరాన్‌మెంట్‌గా డాకర్‌కి బదులుగా CRI-O: సెంటప్ సెంటప్ 8

సెంటొస్ 8లో డాకర్ ఎందుకు చేర్చబడలేదు?

తాజా ప్రధాన విడుదలలను ఇన్‌స్టాల్ చేసిన తర్వాత RHEL 8 లేదా CentOS 8 ఎవరూ గమనించకుండా ఉండలేరు: ఈ పంపిణీలు మరియు అధికారిక రిపోజిటరీలు అప్లికేషన్‌ను కలిగి ఉండవు డాకర్, ఇది సైద్ధాంతికంగా మరియు క్రియాత్మకంగా ప్యాకేజీలను భర్తీ చేస్తుంది పోడ్మాన్, బిల్డా (డిఫాల్ట్‌గా పంపిణీలో ఉంది) మరియు CRI-O. ఇది ఓపెన్ కంటైనర్ ఇనిషియేటివ్ (OCI) ప్రాజెక్ట్‌లో భాగంగా Red Hat ద్వారా అభివృద్ధి చేయబడిన ప్రమాణాల ఆచరణాత్మక అమలు కారణంగా ఉంది.

ది లైనక్స్ ఫౌండేషన్‌లో భాగమైన OCI యొక్క లక్ష్యం, ఒకేసారి అనేక సమస్యలను పరిష్కరించే కంటైనర్ ఫార్మాట్‌లు మరియు రన్‌టైమ్‌ల కోసం ఓపెన్ ఇండస్ట్రీ ప్రమాణాలను రూపొందించడం. ముందుగా, అవి Linux యొక్క తత్వశాస్త్రానికి విరుద్ధంగా లేవు (ఉదాహరణకు, ప్రతి ప్రోగ్రామ్ ఒక చర్యను నిర్వహించాలి, మరియు డాకర్ ఒక రకమైన ఆల్ ఇన్ వన్ కలయిక). రెండవది, వారు సాఫ్ట్‌వేర్‌లో ఉన్న అన్ని లోపాలను తొలగించగలరు డాకర్. మూడవది, కంటెయినరైజ్డ్ అప్లికేషన్‌లను (ఉదాహరణకు, Red Hat OpenShift) అమలు చేయడం, నిర్వహించడం మరియు అందించడం కోసం ప్రముఖ వాణిజ్య ప్లాట్‌ఫారమ్‌ల వ్యాపార అవసరాలకు అవి పూర్తిగా అనుకూలంగా ఉంటాయి.

లోపాలను డాకర్ మరియు కొత్త సాఫ్ట్‌వేర్ యొక్క ప్రయోజనాలు ఇప్పటికే కొంత వివరంగా వివరించబడ్డాయి ఈ వ్యాసం, మరియు OCI ప్రాజెక్ట్‌లో అందించబడిన మొత్తం సాఫ్ట్‌వేర్ స్టాక్ యొక్క వివరణాత్మక వర్ణన మరియు దాని నిర్మాణ లక్షణాలు అధికారిక డాక్యుమెంటేషన్ మరియు Red Hat నుండి వచ్చిన కథనాలలో చూడవచ్చు (చెడ్డది కాదు. వ్యాసం Red Hat బ్లాగులో) మరియు మూడవ పక్షంలో సమీక్షలు.

ప్రతిపాదిత స్టాక్ యొక్క భాగాలు ఏ కార్యాచరణను కలిగి ఉన్నాయో గమనించడం ముఖ్యం:

  • పోడ్మాన్ - runC ప్రక్రియ ద్వారా కంటైనర్లు మరియు ఇమేజ్ నిల్వతో ప్రత్యక్ష పరస్పర చర్య;
  • బిల్డా - అసెంబ్లీ మరియు రిజిస్ట్రీకి చిత్రాలను అప్‌లోడ్ చేయడం;
  • CRI-O — కంటైనర్ ఆర్కెస్ట్రేషన్ సిస్టమ్స్ కోసం ఎక్జిక్యూటబుల్ ఎన్విరాన్మెంట్ (ఉదాహరణకు, కుబెర్నెట్స్).

స్టాక్ యొక్క భాగాల మధ్య పరస్పర చర్య యొక్క సాధారణ పథకాన్ని అర్థం చేసుకోవడానికి, ఇక్కడ కనెక్షన్ రేఖాచిత్రాన్ని అందించడం మంచిది అని నేను భావిస్తున్నాను Kubernetes c రన్C మరియు తక్కువ-స్థాయి లైబ్రరీలను ఉపయోగిస్తున్నారు CRI-O:

కుబెర్నెట్స్ కోసం ఎక్జిక్యూటబుల్ ఎన్విరాన్‌మెంట్‌గా డాకర్‌కి బదులుగా CRI-O: సెంటప్ సెంటప్ 8

CRI-O и Kubernetes అదే విడుదల మరియు మద్దతు చక్రానికి కట్టుబడి ఉండండి (అనుకూలత మాతృక చాలా సులభం: ప్రధాన సంస్కరణలు Kubernetes и CRI-O ఏకీభవిస్తుంది), మరియు ఇది డెవలపర్‌లచే ఈ స్టాక్ యొక్క ఆపరేషన్ యొక్క పూర్తి మరియు సమగ్ర పరీక్షపై దృష్టిని పరిగణనలోకి తీసుకుంటే, ఏదైనా ఉపయోగ పరిస్థితులలో (సాపేక్ష తేలిక కూడా ఇక్కడ ప్రయోజనకరంగా ఉంటుంది) ఆపరేషన్‌లో గరిష్టంగా సాధించగల స్థిరత్వాన్ని ఆశించే హక్కును మాకు అందిస్తుంది. CRI-O పోలిస్తే డాకర్ కార్యాచరణ యొక్క ఉద్దేశపూర్వక పరిమితి కారణంగా).

ఇన్‌స్టాల్ చేస్తున్నప్పుడు Kubernetes "సరైన మార్గం" మార్గం (OCI ప్రకారం, కోర్సు యొక్క) ఉపయోగించడం CRI-OCentOS 8 మేము కొన్ని చిన్న సమస్యలను ఎదుర్కొన్నాము, అయినప్పటికీ, మేము విజయవంతంగా అధిగమించాము. ఇన్‌స్టాలేషన్ మరియు కాన్ఫిగరేషన్ సూచనలను మీతో పంచుకోవడానికి నేను సంతోషిస్తాను, దీనికి మొత్తం 10 నిమిషాలు పడుతుంది.

CRI-O ఫ్రేమ్‌వర్క్‌ని ఉపయోగించి CentOS 8లో కుబెర్నెట్‌లను ఎలా అమలు చేయాలి

అవసరమైనవి: ఇన్‌స్టాల్ చేయబడిన కనీసం ఒక హోస్ట్ (2 కోర్లు, 4 GB RAM, కనీసం 15 GB నిల్వ) ఉనికి CentOS 8 (“సర్వర్” ఇన్‌స్టాలేషన్ ప్రొఫైల్ సిఫార్సు చేయబడింది), అలాగే స్థానిక DNSలో దాని కోసం ఎంట్రీలు (చివరి ప్రయత్నంగా, మీరు /etc/hostsలో నమోదు ద్వారా పొందవచ్చు). మరియు మర్చిపోవద్దు మార్పిడిని నిలిపివేయండి.

మేము హోస్ట్‌లో అన్ని కార్యకలాపాలను రూట్ యూజర్‌గా నిర్వహిస్తాము, జాగ్రత్తగా ఉండండి.

  1. మొదటి దశలో, మేము OSని కాన్ఫిగర్ చేస్తాము, CRI-O కోసం ప్రిలిమినరీ డిపెండెన్సీలను ఇన్‌స్టాల్ చేస్తాము మరియు కాన్ఫిగర్ చేస్తాము.
    • OSని అప్‌డేట్ చేద్దాం:
      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

    • రెండవ ముఖ్యమైన స్వల్పభేదాన్ని: మేము డెమోన్‌ని ఉపయోగించము కాబట్టి డాకర్, కానీ మేము డెమోన్‌ని ఉపయోగిస్తాము 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

    • ఇన్‌స్టాలేషన్ సమయంలో మనం ఎదుర్కొనే మూడవ ముఖ్యమైన విషయం: మేము ఉపయోగించిన డ్రైవర్‌ను సూచించినప్పటికీ 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)ని ఇన్‌స్టాల్ చేద్దాం. నేను ఉపయోగించమని సిఫార్సు చేస్తున్నాను కాలికో. బహుశా మరింత ప్రజాదరణ పొందింది ఒక దినుసు సన్నకంబళి తో అనుకూలత సమస్యలు ఉన్నాయి 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

ఒక వ్యాఖ్యను జోడించండి