Kubernetes အတွက် runtime ပတ်ဝန်းကျင်အဖြစ် Docker အတွက် အစားထိုးအဖြစ် CRI-O- CentOS 8 တွင် စနစ်ထည့်သွင်းခြင်း

မင်္ဂလာပါ! ကျွန်တော့်နာမည် Sergey ပါ၊ Surf မှာ DevOps ပါ။ Surf ရှိ DevOps ဌာနသည် ကျွမ်းကျင်သူများကြား အပြန်အလှန် တုံ့ပြန်မှုကို တည်ဆောက်ရန်နှင့် အလုပ်လုပ်ငန်းစဉ်များကို ပေါင်းစပ်ရန်သာမက ၎င်း၏ကိုယ်ပိုင် အခြေခံအဆောက်အဦနှင့် ဖောက်သည်၏ အခြေခံအဆောက်အဦများတွင် လက်ရှိနည်းပညာများကို တက်ကြွစွာ သုတေသနပြုကာ အကောင်အထည်ဖော်ရန်လည်း ရည်ရွယ်ပါသည်။

အောက်တွင်ကျွန်ုပ်တို့သည်ဖြန့်ဖြူးမှုကိုလေ့လာနေစဉ်ကျွန်ုပ်တို့ကြုံတွေ့ခဲ့ရသောကွန်တိန်နာများအတွက်နည်းပညာအစုအဝေးတွင်ပြောင်းလဲမှုများအကြောင်းအနည်းငယ်ပြောပါမည်။ CentOS 8 အဘယ်သို့နည်း CRI-O နှင့် အကောင်ထည်ဖော်နိုင်သော ပတ်ဝန်းကျင်ကို မည်ကဲ့သို့ လျင်မြန်စွာ သတ်မှတ်နိုင်မည်နည်း။ Kubernetes.

Kubernetes အတွက် runtime ပတ်ဝန်းကျင်အဖြစ် Docker အတွက် အစားထိုးအဖြစ် CRI-O- CentOS 8 တွင် စနစ်ထည့်သွင်းခြင်း

Docker သည် CentOS 8 တွင် အဘယ်ကြောင့် မပါဝင်သနည်း။

နောက်ဆုံးထွက်ရှိမှုများကို ထည့်သွင်းပြီးနောက် ရထား ၈.၃ သို့မဟုတ် CentOS 8 သတိပြုမိရုံမှတစ်ပါး မကူညီနိုင်ပါ- ဤဖြန့်ဖြူးမှုများနှင့်တရားဝင်သိုလှောင်ရုံများတွင် အပလီကေးရှင်းမပါဝင်ပါ။ Dockerပက်ကေ့ဂျ်များကို အတွေးအခေါ်အရ နှင့် လုပ်ဆောင်နိုင်စွမ်းရှိစွာ အစားထိုးပေးသော၊ podman, Buildah (ပုံမှန်အားဖြင့် ဖြန့်ဖြူးမှုတွင် ရှိနေသည်) နှင့် CRI-O. ၎င်းသည် Open Container Initiative (OCI) ပရောဂျက်၏ တစ်စိတ်တစ်ပိုင်းအနေဖြင့် Red Hat မှ တီထွင်ထားသော စံချိန်စံညွှန်းများကို လက်တွေ့အကောင်အထည်ဖော်ခြင်းကြောင့် ဖြစ်သည်။

Linux Foundation ၏ တစ်စိတ်တစ်ပိုင်းဖြစ်သည့် OCI ၏ ရည်မှန်းချက်မှာ ပြဿနာများစွာကို တစ်ပြိုင်နက်တည်း ဖြေရှင်းနိုင်သော container formats များနှင့် runtime များအတွက် ပွင့်လင်းသော လုပ်ငန်းစံနှုန်းများကို ဖန်တီးရန်ဖြစ်သည်။ ပထမဦးစွာ၊ ၎င်းတို့သည် Linux ၏ ဒဿနကို ဆန့်ကျင်ခြင်းမရှိခဲ့ (ဥပမာ၊ ပရိုဂရမ်တစ်ခုစီသည် လုပ်ဆောင်ချက်တစ်ခု လုပ်ဆောင်ရမည့် အပိုင်း၊ Docker All-in-one ပေါင်းစပ်မှုတစ်မျိုးဖြစ်သည်။) ဒုတိယအနေနှင့်၊ ၎င်းတို့သည် ဆော့ဖ်ဝဲလ်တွင် ရှိပြီးသား ချို့ယွင်းချက်အားလုံးကို ဖယ်ရှားပစ်နိုင်သည်။ Docker. တတိယ၊ ၎င်းတို့သည် ကွန်တိန်နာတင်ထားသော အပလီကေးရှင်းများကို ဖြန့်ကျက်ခြင်း၊ စီမံခန့်ခွဲခြင်းနှင့် ဝန်ဆောင်မှုပေးခြင်းအတွက် ထိပ်တန်းစီးပွားရေးပလပ်ဖောင်းများ၏ လုပ်ငန်းလိုအပ်ချက်များနှင့် အပြည့်အဝသဟဇာတဖြစ်စေမည်ဖြစ်သည်။

ချို့ယွင်းချက် Docker ဆော့ဖ်ဝဲအသစ်၏ အားသာချက်များကို အချို့သောအသေးစိတ်တွင် ဖော်ပြထားပြီးဖြစ်သည်။ ဤဆောင်းပါးတွင်နှင့် OCI ပရောဂျက်အတွင်း ကမ်းလှမ်းထားသော ဆော့ဖ်ဝဲအစုအစည်းတစ်ခုလုံး၏ အသေးစိတ်ဖော်ပြချက်နှင့် ၎င်း၏ဗိသုကာအင်္ဂါရပ်များကို Red Hat ကိုယ်တိုင်မှ တရားဝင်စာရွက်စာတမ်းနှင့် ဆောင်းပါးများတွင် တွေ့နိုင်သည် (မကောင်းပါ။ ဆောင်းပါး Red Hat blog တွင်) နှင့် Third-party တွင် သုံးသပ်ချက်.

အဆိုပြုထားသော stack ၏ အစိတ်အပိုင်းများတွင် မည်သည့်လုပ်ဆောင်နိုင်စွမ်းကို မှတ်သားထားရန် အရေးကြီးသည်-

  • podman - runC လုပ်ငန်းစဉ်မှတဆင့် containers နှင့် image storage တို့နှင့် တိုက်ရိုက်အပြန်အလှန်ဆက်သွယ်မှု၊
  • Buildah - စုစည်းခြင်းနှင့် မှတ်ပုံတင်ခြင်းသို့ ပုံများတင်ခြင်း၊
  • CRI-O — ကွန်တိန်နာစုစည်းမှုစနစ်များ (ဥပမာ Kubernetes) အတွက် အကောင်အထည်ဖော်နိုင်သော ပတ်ဝန်းကျင်။

stack ၏အစိတ်အပိုင်းများအကြားအပြန်အလှန်အကျိုးသက်ရောက်မှု၏အထွေထွေအစီအမံကိုနားလည်ရန်၊ ဤနေရာတွင်ချိတ်ဆက်မှုပုံစံတစ်ခုကိုဖော်ပြရန်အကြံပြုလိုသည် Kubernetes c runC နှင့် အဆင့်နိမ့် စာကြည့်တိုက်များကို အသုံးပြုသည်။ CRI-O:

Kubernetes အတွက် runtime ပတ်ဝန်းကျင်အဖြစ် Docker အတွက် အစားထိုးအဖြစ် CRI-O- CentOS 8 တွင် စနစ်ထည့်သွင်းခြင်း

CRI-O и Kubernetes တူညီသောထုတ်ဝေမှုနှင့်ပံ့ပိုးမှုစက်ဝန်းကိုလိုက်နာပါ (သဟဇာတမက်ထရစ်သည်အလွန်ရိုးရှင်းသည်- အဓိကဗားရှင်းများ Kubernetes и CRI-O တိုက်ဆိုင်သည်)၊ ၎င်းသည် developer များမှ ဤ stack ၏လုပ်ဆောင်မှုကို ပြီးပြည့်စုံပြီး ကျယ်ကျယ်ပြန့်ပြန့်စမ်းသပ်ခြင်းအပေါ် အာရုံစိုက်ခြင်းဖြင့်၊ မည်သည့်အသုံးပြုမှုအခြေအနေများအောက်တွင်မဆို လည်ပတ်မှုတွင် အများဆုံးရနိုင်သောတည်ငြိမ်မှုကို မျှော်လင့်ရန် အခွင့်အရေးပေးသည် (နှိုင်းရအလင်းသည် ဤနေရာတွင်လည်း အကျိုးရှိပါသည် CRI-O နှိုင်းယှဉ်မှု Docker ရည်ရွယ်ချက်ရှိရှိ လုပ်ဆောင်နိုင်စွမ်း ကန့်သတ်ချက်ကြောင့်)။

install လုပ်တဲ့အခါမှာ Kubernetes "မှန်ကန်သောနည်းလမ်း" နည်းလမ်း (OCI အရ၊ ဟုတ်ပါတယ်) သုံးပြီး CRI-O အပေါ် CentOS 8 အခက်​အခဲ​လေး​တွေ​ကြုံ​တွေ့​ရ​ပေမဲ့ အောင်​မြင်​စွာ​ကျော်​ဖြတ်​ခဲ့​တယ်။ စုစုပေါင်း 10 မိနစ်ခန့် ကြာမည့် တပ်ဆင်မှုနှင့် ဖွဲ့စည်းမှုဆိုင်ရာ ညွှန်ကြားချက်များကို သင့်အား မျှဝေလိုပါသည်။

CRI-O မူဘောင်ကို အသုံးပြု၍ CentOS 8 တွင် Kubernetes ကို မည်သို့အသုံးပြုရမည်နည်း။

ကြိုတင်လိုအပ်ချက်များ- ထည့်သွင်းထားပြီး အနည်းဆုံး host တစ်ခု (2 cores၊ 4 GB RAM၊ အနည်းဆုံး 15 GB storage) ရှိခြင်း။ CentOS 8 (“ဆာဗာ” တပ်ဆင်မှုပရိုဖိုင်ကို အကြံပြုထားသည်)၊ ၎င်းအပြင် ဒေသတွင်း DNS တွင် ထည့်သွင်းမှုများ (နောက်ဆုံးအားကိုးရာအနေဖြင့်၊ သင်သည် /etc/hosts တွင် ထည့်သွင်းမှုဖြင့် ရနိုင်သည်)။ မမေ့ပါနှင့် လဲလှယ်မှုကို ပိတ်ပါ။.

ကျွန်ုပ်တို့သည် root အသုံးပြုသူအနေဖြင့် host ပေါ်တွင်လုပ်ဆောင်မှုများအားလုံးကိုလုပ်ဆောင်သည်၊ သတိထားပါ။

  1. ပထမအဆင့်တွင်၊ ကျွန်ုပ်တို့သည် OS ကို configure လုပ်ပြီး၊ CRI-O အတွက် ပဏာမမှီခိုအားထားမှုများကို တပ်ဆင်ပြီး configure လုပ်ပါမည်။
    • OS ကို အပ်ဒိတ်လုပ်ကြရအောင်။
      dnf -y update
      

    • ထို့နောက် firewall နှင့် SELinux ကို configure လုပ်ရန် လိုအပ်သည်။ ဤနေရာတွင် အရာအားလုံးသည် ကျွန်ုပ်တို့၏ အိမ်ရှင် သို့မဟုတ် အိမ်ရှင်များ အလုပ်လုပ်မည့် ပတ်ဝန်းကျင်အပေါ် မူတည်ပါသည်။ အကြံပြုချက်များအရ firewall ကို setup လုပ်နိုင်သည်။ စာရွက်စာတမ်းသို့မဟုတ်၊ သင်သည် ယုံကြည်ရသော ကွန်ရက်တစ်ခုပေါ်တွင် သို့မဟုတ် ပြင်ပအဖွဲ့အစည်း firewall ကိုအသုံးပြုပါက၊ ပုံသေဇုန်ကို ယုံကြည်စိတ်ချရသောအဖြစ်သို့ ပြောင်းပါ သို့မဟုတ် firewall ကို ပိတ်ပါ-
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      Firewall ကိုပိတ်ရန် အောက်ပါ command ကိုသုံးနိုင်သည်။

      systemctl disable --now firewalld
      

      SELinux ကို ပိတ်ရန် သို့မဟုတ် "ခွင့်ပြုချက်" မုဒ်သို့ ပြောင်းရန် လိုအပ်သည်-

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

    • လိုအပ်သော kernel မော်ဂျူးများနှင့် ပက်ကေ့ဂျ်များကို တင်ပါ၊ စနစ်စတင်ချိန်တွင် “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
      

      လိုအပ်သော repositories ကိုထည့်ပါ။

      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 ဝန်ဆောင်မှုကို မစတင်မီ၊ လိုအပ်သော conmon အစိတ်အပိုင်းသည် သတ်မှတ်ထားသော တစ်ခုနှင့်တစ်ခုထက် မတူညီသောကြောင့်၊

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

      ယခုသင် daemon ကိုဖွင့်ပြီးစတင်နိုင်သည်။ CRI-O:

      systemctl enable --now crio
      

      daemon အခြေအနေကို သင်စစ်ဆေးနိုင်သည်-

      systemctl status crio
      

  2. တပ်ဆင်ခြင်းနှင့် အသက်သွင်းခြင်း။ Kubernetes.
    • လိုအပ်သော repository ကို ထည့်ကြပါစို့။
      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

    • ဒုတိယအရေးကြီးသောအချက်- ကျွန်ုပ်တို့သည် daemon ကိုမသုံးသောကြောင့်ဖြစ်သည်။ Dockerဒါပေမယ့် ငါတို့က daemon ကိုသုံးတယ်။ 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, နှင့်၎င်း၏ configuration ကိုအငြင်းအခုံများမှတဆင့်လွန် kubelet ခေတ်နောက်ကျနေပြီ (စာရွက်စာတမ်းတွင် အတိအလင်းဖော်ပြထားသည့်အတိုင်း) ကျွန်ုပ်တို့သည် ဖိုင်သို့ အကြောင်းပြချက်များထည့်ရန် လိုအပ်သည်၊ သို့မဟုတ်ပါက ကျွန်ုပ်တို့၏အစုအဝေးကို စတင်မည်မဟုတ်ပါ-
      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

    • ယခု ကျွန်ုပ်တို့သည် daemon ကို အသက်သွင်းနိုင်ပါပြီ။ kubelet:
      sudo systemctl enable --now kubelet
      

      စိတ်ကြိုက်ပြင်ဆင်ရန် ထိန်းချုပ်ရေးလေယာဉ် သို့မဟုတ် အလုပ်သမား nodes များကို မိနစ်ပိုင်းအတွင်း အသုံးပြုနိုင်ပါတယ်။ ဒီဇာတ်ညွှန်းနဲ့.

  3. ကျွန်ုပ်တို့၏ အစုအဝေးကို စတင်ရန် အချိန်တန်ပြီ။
    • အစုအဝေးကို စတင်ရန်၊ အမိန့်ကို run ပါ။
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      output ၏အဆုံးတွင်၊ သို့မဟုတ် အနည်းဆုံး သတ်မှတ်ထားသော တိုကင်များကို အသုံးပြုရန် တောင်းဆိုထားသော အစုအဝေး “kubeadm join …” တွင် ပါဝင်ရန် အမိန့်ကို ရေးမှတ်ပါ။

    • Pod ကွန်ရက်အတွက် ပလပ်အင် (CNI) ကို တပ်ဆင်ကြပါစို့။ ငါအသုံးပြုရန်အကြံပြုပါသည်။ Calico. ပိုနာမည်ကြီးလာနိုင်တယ်။ Flannel လိုက်ဖက်ညီမှုပြဿနာများရှိသည်။ nftablesဟုတ်ကဲ့ နှင့် Calico - ပရောဂျက်မှ အကြံပြုထားသော တစ်ခုတည်းသော CNI အကောင်အထည်ဖော်မှုနှင့် အပြည့်အဝစမ်းသပ်မှု Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • ကျွန်ုပ်တို့၏ အစုအဝေးသို့ အလုပ်သမား node တစ်ခုကို ချိတ်ဆက်ရန်၊ ညွှန်ကြားချက် 1 နှင့် 2 အရ ၎င်းကို configure လုပ်ရန် လိုအပ်သည်၊ သို့မဟုတ် အသုံးပြုပါ။ ဇာတ်ညွှန်းထို့နောက် ယခင်အဆင့်တွင် ကျွန်ုပ်တို့ရေးထားသော “kubeadm init…” output မှ command ကို run ပါ။
      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 အစုအဝေးတွင် payload များကို လက်ခံဆောင်ရွက်ပေးပြီးဖြစ်သည်။

ငါတို့ရှေ့မှာ ဘာကစောင့်နေတာလဲ။

အထက်ဖော်ပြပါ ညွှန်ကြားချက်များသည် သင့်အား အချိန်နှင့် အာရုံကြောများ သက်သာစေမည်ဟု မျှော်လင့်ပါသည်။
စက်မှုလုပ်ငန်းတွင် ဖြစ်ပေါ်နေသည့် လုပ်ငန်းစဉ်များ၏ ရလဒ်သည် ဆက်စပ်နယ်ပယ်ရှိ အခြားဆော့ဖ်ဝဲလ်များကို အသုံးပြုသူများနှင့် ဆော့ဖ်ဝဲရေးဆွဲသူအများစုမှ ၎င်းတို့အား လက်ခံနိုင်ပုံအပေါ်တွင် မူတည်ပါသည်။ OCI ပဏာမခြေလှမ်းများသည် နှစ်အနည်းငယ်အတွင်း မည်သို့ဖြစ်ပေါ်လာမည်ကို လုံး၀ရှင်းရှင်းလင်းလင်းမသိရသေးသော်လည်း ကျွန်ုပ်တို့သည် ပျော်ရွှင်စွာဖြင့် စောင့်ကြည့်နေပါမည်။ သင့်ထင်မြင်ချက်ကို comment မှာ အခုပဲ မျှဝေနိုင်ပါတယ်။

ဆက်ပြီးနားထောင်ပါ!

ဤဆောင်းပါးသည် အောက်ပါအရင်းအမြစ်များကို ကျေးဇူးတင်ရှိပါသည်-



source: www.habr.com

မှတ်ချက် Add