Kubernetes के लिए निष्पादन योग्य वातावरण के रूप में डॉकर के प्रतिस्थापन के रूप में CRI-O: CentOS 8 पर सेटअप

नमस्ते! मेरा नाम सर्गेई है, मैं सर्फ में DevOps हूं। सर्फ में DevOps विभाग का लक्ष्य न केवल विशेषज्ञों के बीच बातचीत स्थापित करना और कार्य प्रक्रियाओं को एकीकृत करना है, बल्कि अपने स्वयं के बुनियादी ढांचे और ग्राहक के बुनियादी ढांचे में वर्तमान प्रौद्योगिकियों पर सक्रिय रूप से शोध और कार्यान्वयन करना भी है।

नीचे मैं कंटेनरों के लिए प्रौद्योगिकी स्टैक में उन परिवर्तनों के बारे में थोड़ी बात करूंगा जिनका वितरण का अध्ययन करते समय हमें सामना करना पड़ा 8 CentOS और क्या है के बारे में सीआरआई-ओ और शीघ्रता से निष्पादन योग्य वातावरण कैसे स्थापित करें Kubernetes.

Kubernetes के लिए निष्पादन योग्य वातावरण के रूप में डॉकर के प्रतिस्थापन के रूप में CRI-O: CentOS 8 पर सेटअप

डॉकर को CentOS 8 में क्यों शामिल नहीं किया गया है?

नवीनतम प्रमुख रिलीज़ स्थापित करने के बाद RHEL 8 या 8 CentOS कोई भी मदद नहीं कर सकता लेकिन ध्यान दे सकता है: इन वितरणों और आधिकारिक रिपॉजिटरी में एप्लिकेशन शामिल नहीं है डाक में काम करनेवाला मज़दूर, जो वैचारिक और कार्यात्मक रूप से पैकेजों को प्रतिस्थापित करता है पोडमैन, बिल्डाह: (डिफ़ॉल्ट रूप से वितरण में मौजूद) और सीआरआई-ओ. यह अन्य बातों के अलावा, ओपन कंटेनर इनिशिएटिव (ओसीआई) परियोजना के हिस्से के रूप में रेड हैट द्वारा विकसित मानकों के व्यावहारिक कार्यान्वयन के कारण है।

ओसीआई का लक्ष्य, जो लिनक्स फाउंडेशन का हिस्सा है, कंटेनर प्रारूपों और रनटाइम के लिए खुले उद्योग मानक बनाना है जो एक साथ कई समस्याओं का समाधान करते हैं। सबसे पहले, उन्होंने लिनक्स के दर्शन का खंडन नहीं किया (उदाहरण के लिए, इस भाग में कि प्रत्येक प्रोग्राम को एक क्रिया करनी चाहिए, और डाक में काम करनेवाला मज़दूर एक प्रकार का ऑल-इन-वन संयोजन है)। दूसरे, वे सॉफ़्टवेयर में मौजूद सभी कमियों को दूर कर सकते हैं डाक में काम करनेवाला मज़दूर. तीसरा, वे कंटेनरीकृत अनुप्रयोगों (उदाहरण के लिए, रेड हैट ओपनशिफ्ट) की तैनाती, प्रबंधन और सेवा के लिए अग्रणी वाणिज्यिक प्लेटफार्मों की व्यावसायिक आवश्यकताओं के साथ पूरी तरह से संगत होंगे।

सीमाएं डाक में काम करनेवाला मज़दूर और नए सॉफ़्टवेयर के फ़ायदों का पहले ही कुछ विस्तार से वर्णन किया जा चुका है यह लेख, और OCI प्रोजेक्ट के भीतर पेश किए गए संपूर्ण सॉफ़्टवेयर स्टैक और इसकी वास्तुशिल्प विशेषताओं का विस्तृत विवरण Red Hat के आधिकारिक दस्तावेज़ और लेखों में पाया जा सकता है (कोई बुरी बात नहीं) लेख Red Hat ब्लॉग में) और तृतीय-पक्ष में समीक्षा.

यह नोट करना महत्वपूर्ण है कि प्रस्तावित स्टैक के घटकों की क्या कार्यक्षमता है:

  • पोडमैन - रनसी प्रक्रिया के माध्यम से कंटेनरों और छवि भंडारण के साथ सीधा संपर्क;
  • बिल्डाह: — छवियों को रजिस्ट्री में असेंबल करना और अपलोड करना;
  • सीआरआई-ओ - कंटेनर ऑर्केस्ट्रेशन सिस्टम के लिए एक निष्पादन योग्य वातावरण (उदाहरण के लिए, कुबेरनेट्स)।

मुझे लगता है कि स्टैक के घटकों के बीच बातचीत की सामान्य योजना को समझने के लिए, यहां एक कनेक्शन आरेख प्रदान करना उचित है Kubernetes c रनसी और निम्न-स्तरीय पुस्तकालयों का उपयोग कर रहे हैं सीआरआई-ओ:

Kubernetes के लिए निष्पादन योग्य वातावरण के रूप में डॉकर के प्रतिस्थापन के रूप में CRI-O: CentOS 8 पर सेटअप

सीआरआई-ओ и Kubernetes समान रिलीज़ और समर्थन चक्र का पालन करें (संगतता मैट्रिक्स बहुत सरल है: प्रमुख संस्करण Kubernetes и सीआरआई-ओ संयोग), और यह, डेवलपर्स द्वारा इस स्टैक के संचालन के पूर्ण और व्यापक परीक्षण पर ध्यान केंद्रित करते हुए, हमें किसी भी उपयोग परिदृश्य के तहत संचालन में अधिकतम प्राप्त स्थिरता की उम्मीद करने का अधिकार देता है (सापेक्ष हल्कापन यहां भी फायदेमंद है) सीआरआई-ओ की तुलना में डाक में काम करनेवाला मज़दूर कार्यक्षमता की उद्देश्यपूर्ण सीमा के कारण)।

इंस्टॉल करते समय Kubernetes "सही तरीका" तरीका (निश्चित रूप से ओसीआई के अनुसार) का उपयोग करना सीआरआई-ओ पर 8 CentOS हमें कुछ छोटी-मोटी कठिनाइयों का सामना करना पड़ा, हालाँकि, हमने सफलतापूर्वक उन पर काबू पा लिया। मुझे आपके साथ इंस्टॉलेशन और कॉन्फ़िगरेशन निर्देश साझा करने में खुशी होगी, जिसमें कुल मिलाकर लगभग 10 मिनट लगेंगे।

CRI-O फ्रेमवर्क का उपयोग करके CentOS 8 पर कुबेरनेट्स को कैसे तैनात करें

आवश्यक शर्तें: स्थापित के साथ कम से कम एक होस्ट (2 कोर, 4 जीबी रैम, कम से कम 15 जीबी स्टोरेज) की उपस्थिति 8 CentOS ("सर्वर" इंस्टॉलेशन प्रोफ़ाइल अनुशंसित है), साथ ही स्थानीय DNS में इसके लिए प्रविष्टियाँ (अंतिम उपाय के रूप में, आप /etc/hosts में एक प्रविष्टि के साथ काम कर सकते हैं)। और मत भूलो स्वैप अक्षम करें.

हम होस्ट पर सभी ऑपरेशन रूट यूजर के रूप में करते हैं, सावधान रहें।

  1. पहले चरण में, हम ओएस को कॉन्फ़िगर करेंगे, सीआरआई-ओ के लिए प्रारंभिक निर्भरताएं स्थापित और कॉन्फ़िगर करेंगे।
    • आइए 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

    • आवश्यक संस्करण सेट करें सीआरआई-ओ (प्रमुख संस्करण सीआरआई-ओ, जैसा कि पहले ही उल्लेख किया गया है, आवश्यक संस्करण से मेल खाता है 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

    • अब हम इंस्टॉल कर सकते हैं सीआरआई-ओ:
      dnf -y install cri-o
      

      इंस्टॉलेशन प्रक्रिया के दौरान हमारे सामने आने वाली पहली बारीकियों पर ध्यान दें: आपको कॉन्फ़िगरेशन को संपादित करने की आवश्यकता है सीआरआई-ओ सेवा शुरू करने से पहले, चूंकि आवश्यक कॉनमोन घटक का निर्दिष्ट स्थान से भिन्न स्थान है:

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

      अब आप डेमॉन को सक्रिय और प्रारंभ कर सकते हैं सीआरआई-ओ:

      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

    • दूसरी महत्वपूर्ण बारीकियाँ: चूँकि हम डेमॉन का उपयोग नहीं करते हैं डाक में काम करनेवाला मज़दूर, लेकिन हम डेमॉन का उपयोग करते हैं सीआरआई-ओ, लॉन्च और आरंभीकरण से पहले 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

    • तीसरा महत्वपूर्ण बिंदु जो हमें इंस्टॉलेशन के दौरान मिलता है: इस तथ्य के बावजूद कि हमने उपयोग किए गए ड्राइवर का संकेत दिया है सीग्रुप, और पारित तर्कों के माध्यम से इसका विन्यास क्यूबलेट पुराना है (जैसा कि दस्तावेज़ में स्पष्ट रूप से बताया गया है), हमें फ़ाइल में तर्क जोड़ने की आवश्यकता है, अन्यथा हमारा क्लस्टर प्रारंभ नहीं किया जाएगा:
      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, हाँ और हाँ कैलिकौ - परियोजना द्वारा अनुशंसित और पूरी तरह से परीक्षण किया गया एकमात्र सीएनआई कार्यान्वयन 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 क्लस्टर पर पेलोड होस्ट कर सकते हैं।

आगे हमारा क्या इंतजार है

मुझे आशा है कि ऊपर दिए गए निर्देशों से आपका कुछ समय और परेशानी बचाने में मदद मिली होगी।
उद्योग में होने वाली प्रक्रियाओं का परिणाम अक्सर इस बात पर निर्भर करता है कि उन्हें संबंधित क्षेत्र में अन्य सॉफ़्टवेयर के अधिकांश अंतिम उपयोगकर्ताओं और डेवलपर्स द्वारा कैसे स्वीकार किया जाता है। यह अभी तक पूरी तरह से स्पष्ट नहीं है कि कुछ वर्षों में ओसीआई की पहल से क्या होगा, लेकिन हम खुशी के साथ इसे देखते रहेंगे। आप अपनी राय अभी टिप्पणियों में साझा कर सकते हैं।

बने रहें!

यह लेख निम्नलिखित स्रोतों की बदौलत सामने आया:



स्रोत: www.habr.com

एक टिप्पणी जोड़ें