CRI-O แทนที่ Docker เป็นสภาพแวดล้อมรันไทม์สำหรับ Kubernetes: การตั้งค่าบน CentOS 8

สวัสดี! ฉันชื่อเซอร์เกย์ ฉันเป็น DevOps ที่ Surf แผนก DevOps ที่ Surf มีเป้าหมายไม่เพียงเพื่อสร้างปฏิสัมพันธ์ระหว่างผู้เชี่ยวชาญและผสานรวมเวิร์กโฟลว์เท่านั้น แต่ยังมุ่งวิจัยและนำเทคโนโลยีที่เกี่ยวข้องไปใช้อย่างแข็งขันทั้งในโครงสร้างพื้นฐานของตนเองและในโครงสร้างพื้นฐานของลูกค้า

ด้านล่างนี้ฉันจะพูดถึงการเปลี่ยนแปลงเล็กน้อยในกลุ่มเทคโนโลยีสำหรับคอนเทนเนอร์ที่เราพบในขณะที่ศึกษาการกระจาย 8 CentOS และเกี่ยวกับสิ่งที่เป็น ซีอาร์ไอ-โอ และวิธีตั้งค่าสภาพแวดล้อมที่เรียกใช้งานได้อย่างรวดเร็วด้วย Kubernetes.

CRI-O แทนที่ Docker เป็นสภาพแวดล้อมรันไทม์สำหรับ Kubernetes: การตั้งค่าบน CentOS 8

เหตุใด Docker จึงหายไปจากการกระจายมาตรฐานของ CentOS 8

หลังจากติดตั้งรีลีสหลักล่าสุดแล้ว RHEL 8 หรือ 8 CentOS ไม่ควรมองข้าม: การแจกแจงเหล่านี้และที่เก็บข้อมูลอย่างเป็นทางการไม่มีแอปพลิเคชัน นักเทียบท่าซึ่งแทนที่แพ็คเกจในเชิงอุดมการณ์และเชิงหน้าที่ พอดแมน, บิวดาห์ (มีอยู่ในการกระจายตามค่าเริ่มต้น) และ ซีอาร์ไอ-โอ. นี่เป็นเพราะการนำมาตรฐานที่พัฒนาโดยเร้ดแฮทไปปฏิบัติจริง ซึ่งเป็นส่วนหนึ่งของโครงการ Open Container Initiative (OCI)

เป้าหมายของ OCI ซึ่งเป็นส่วนหนึ่งของ The Linux Foundation คือการสร้างมาตรฐานอุตสาหกรรมแบบเปิดสำหรับรูปแบบคอนเทนเนอร์และสภาพแวดล้อมที่เรียกใช้งานได้ซึ่งจะแก้ปัญหาต่างๆ ได้พร้อมกัน ประการแรก พวกเขาไม่ได้ขัดแย้งกับปรัชญาของลินุกซ์ (เช่น ในส่วนของมันที่ว่าแต่ละโปรแกรมต้องดำเนินการอย่างใดอย่างหนึ่ง และ นักเทียบท่า เป็นการรวมแบบ all-in-one) ประการที่สอง เราสามารถกำจัดข้อบกพร่องที่มีอยู่ในซอฟต์แวร์ได้ทั้งหมด นักเทียบท่า. ประการที่สาม พวกเขาจะเข้ากันได้อย่างสมบูรณ์กับข้อกำหนดทางธุรกิจที่นำเสนอโดยแพลตฟอร์มเชิงพาณิชย์ชั้นนำสำหรับการปรับใช้ การจัดการ และการบำรุงรักษาแอปพลิเคชันคอนเทนเนอร์ (เช่น Red Hat OpenShift)

ข้อ จำกัด นักเทียบท่า และข้อดีของซอฟต์แวร์ใหม่ได้อธิบายไว้ในรายละเอียดแล้ว บทความนี้และคำอธิบายโดยละเอียดเกี่ยวกับวิธีที่ซอฟต์แวร์สแต็กทั้งหมดที่นำเสนอเป็นส่วนหนึ่งของโครงการ OCI และคุณลักษณะทางสถาปัตยกรรมสามารถพบได้ในเอกสารอย่างเป็นทางการและบทความทั้งจาก Red Hat เอง (ดี บทความ ในบล็อก Red Hat) และในบุคคลที่สาม บทวิจารณ์.

สิ่งสำคัญคือต้องสังเกตว่าส่วนประกอบของสแต็กที่เสนอมีฟังก์ชันการทำงานใดบ้าง:

  • พอดแมน - การโต้ตอบโดยตรงกับคอนเทนเนอร์และที่เก็บรูปภาพผ่านกระบวนการ runC
  • บิวดาห์ - ประกอบและโหลดลงในรีจิสตรีของรูปภาพ
  • ซีอาร์ไอ-โอ - สภาพแวดล้อมรันไทม์สำหรับระบบการจัดการคอนเทนเนอร์ (เช่น Kubernetes)

ฉันคิดว่าเพื่อให้เข้าใจรูปแบบทั่วไปของการโต้ตอบระหว่างส่วนประกอบของสแต็กขอแนะนำให้จัดทำแผนภาพการเชื่อมต่อที่นี่ Kubernetes c รันซี และไลบรารีระดับต่ำโดยใช้ ซีอาร์ไอ-โอ:

CRI-O แทนที่ Docker เป็นสภาพแวดล้อมรันไทม์สำหรับ Kubernetes: การตั้งค่าบน CentOS 8

ซีอาร์ไอ-โอ и Kubernetes ทำตามรีลีสและรอบการสนับสนุนเดียวกัน (เมทริกซ์ความเข้ากันได้นั้นง่ายมาก: รีลีสหลัก Kubernetes и ซีอาร์ไอ-โอ ตรงกัน) และสิ่งนี้โดยคำนึงถึงการมุ่งเน้นไปที่การทดสอบงานของสแต็คนี้อย่างเต็มรูปแบบและครอบคลุมโดยนักพัฒนา ทำให้เรามีสิทธิ์ที่จะคาดหวังความเสถียรสูงสุดที่ทำได้ในการทำงานในทุกสถานการณ์การใช้งาน (ความเบาสัมพัทธ์ก็มีประโยชน์เช่นกัน) ซีอาร์ไอ-โอ เมื่อเทียบกับ นักเทียบท่า เนื่องจากข้อจำกัดของฟังก์ชันที่มีจุดประสงค์)

เมื่อทำการติดตั้ง Kubernetes วิธี "ถูก" (ตาม OCI แน่นอน) โดยใช้ ซีอาร์ไอ-โอ บน 8 CentOS เราประสบปัญหาเล็กน้อยซึ่งอย่างไรก็ตามเราเอาชนะได้สำเร็จ ฉันยินดีที่จะแบ่งปันคำแนะนำในการติดตั้งและการกำหนดค่ากับคุณ ซึ่งโดยรวมจะใช้เวลาสูงสุด 10 นาที

วิธีปรับใช้ Kubernetes บน CentOS 8 โดยใช้สภาพแวดล้อม CRI-O

ข้อกำหนดเบื้องต้น: มีอย่างน้อยหนึ่งโฮสต์ (2 คอร์, 4 GB RAM, พื้นที่เก็บข้อมูลอย่างน้อย 15 GB) พร้อมด้วย 8 CentOS (โปรไฟล์การติดตั้งที่แนะนำ "เซิร์ฟเวอร์") รวมถึงรายการใน DNS ในเครื่อง (ในกรณีที่รุนแรงคุณสามารถรับได้ด้วยรายการใน /etc/hosts) และอย่าลืม ปิดการแลกเปลี่ยน.

เราดำเนินการทั้งหมดบนโฮสต์ในนามของผู้ใช้รูท โปรดใช้ความระมัดระวัง

  1. ในขั้นตอนแรก เราจะตั้งค่าระบบปฏิบัติการ ติดตั้งและกำหนดค่าการอ้างอิงเบื้องต้นสำหรับ CRI-O
    • อัปเดตระบบปฏิบัติการ:
      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
      

      ให้ความสนใจกับความแตกต่างเล็กน้อยแรกที่เราพบระหว่างกระบวนการติดตั้ง: คุณต้องแก้ไขการกำหนดค่า ซีอาร์ไอ-โอ ก่อนเริ่มบริการ เนื่องจากคอมโพเนนต์ conmon ที่ต้องการมีตำแหน่งที่แตกต่างจากที่ระบุ:

      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 เข้าร่วม ... " ซึ่งมีให้ที่ส่วนท้ายของเอาต์พุต หรืออย่างน้อยโทเค็นที่ระบุ

    • ติดตั้งปลั๊กอิน (CNI) สำหรับเครือข่าย Pod ฉันแนะนำให้ใช้ ผ้าดิบ. อาจเป็นที่นิยมมากขึ้น สักหลาด มีปัญหาความเข้ากันได้กับ 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
      

    พร้อม! คุณสามารถโฮสต์เพย์โหลดบนคลัสเตอร์ K8 ของคุณได้แล้ว

สิ่งที่รอเราอยู่ข้างหน้า

ฉันหวังว่าคำแนะนำข้างต้นจะช่วยคุณประหยัดเวลาและความกังวลได้
ผลลัพธ์ของกระบวนการที่เกิดขึ้นในอุตสาหกรรมมักขึ้นอยู่กับว่ากระบวนการเหล่านี้ได้รับการยอมรับจากผู้ใช้ปลายทางและผู้พัฒนาซอฟต์แวร์อื่น ๆ ในช่องที่เกี่ยวข้องอย่างไร ยังไม่ชัดเจนว่าโครงการริเริ่ม OCI จะนำไปสู่ที่ใดในอีกไม่กี่ปีข้างหน้า แต่เรายินดีที่จะปฏิบัติตาม คุณสามารถแบ่งปันความคิดเห็นของคุณตอนนี้ในความคิดเห็น

คอยติดตาม!

บทความนี้สร้างขึ้นจากแหล่งที่มาต่อไปนี้:



ที่มา: will.com

เพิ่มความคิดเห็น