• Image mode ของ Red Hat Enterprise Linux(RHEL) ช่วยทำให้กระบวนการสร้าง ปรับใช้ และจัดการ RHEL ในรูปแบบคอนเทนเนอร์ที่บูตได้ง่ายขึ้น
  • นักพัฒนา ผู้ปฏิบัติการ และผู้ให้บริการโซลูชันสามารถใช้เครื่องมือและเทคนิคแบบคอนเทนเนอร์เนทีฟชุดเดียวกันเพื่อจัดการทั้งแอปพลิเคชันและระบบปฏิบัติการพื้นฐานได้

การสร้างคอนเทนเนอร์ที่บูตได้ vs. คอนเทนเนอร์แอปพลิเคชัน

  • เช่นเดียวกับคอนเทนเนอร์แอปพลิเคชันทั่วไป คอนเทนเนอร์ที่บูตได้สามารถสร้างได้ด้วยเทคโนโลยีคอนเทนเนอร์ที่มีอยู่แล้ว เช่น Podman, Docker หรือ buildkit
  • อิมเมจสามารถจัดเก็บไว้ในคอนเทนเนอร์รีจิสทรี เช่น Quay.io, Docker Hub, GitHub Container Registry หรือรีจิสทรีคอนเทนเนอร์ภายในองค์กร
  • คอนเทนเนอร์ที่บูตได้เป็นวิวัฒนาการตามธรรมชาติของเทคโนโลยีคอนเทนเนอร์ โดยมอบเวิร์กโฟลว์และประสบการณ์ใช้งานแบบคอนเทนเนอร์เนทีฟที่ครอบคลุม ซึ่งรวมถึงทั้งระบบปฏิบัติการทั้งหมดและ Linux kernel

การใช้ Containerfile

  • Containerfile(หรือที่เรียกว่า Dockerfile) มีข้อมูลทั้งหมดที่จำเป็นต่อการสร้างคอนเทนเนอร์อิมเมจ ซึ่งรวมถึงเบสอิมเมจ คำสั่งติดตั้งแพ็กเกจซอฟต์แวร์ และการคัดลอกไฟล์จาก Git repository
  • เวิร์กโฟลว์และเครื่องมือสำหรับสร้างคอนเทนเนอร์ที่บูตได้นั้นโดยพื้นฐานแล้วเหมือนกับคอนเทนเนอร์แอปพลิเคชัน
  • อย่างไรก็ตาม มีแนวทางปฏิบัติที่ดีบางประการที่ควรใช้เมื่อสร้างคอนเทนเนอร์ที่บูตได้

แนวทางปฏิบัติที่ดีสำหรับการ lint

  • แนะนำให้รันคำสั่ง bootc container lint เป็นขั้นตอนสุดท้ายของ Containerfile
  • คำสั่งนี้จะทำการตรวจสอบหลายอย่างภายในคอนเทนเนอร์อิมเมจ และจะรายงานข้อผิดพลาดหากพบปัญหา
  • ตัวอย่างเช่น ตรวจสอบว่ามีเคอร์เนลหลายตัวอยู่ใน /usr/lib/modules หรือไม่ ตรวจสอบไวยากรณ์ของไฟล์ใน /usr/lib/bootc/kargs.d และตรวจสอบความเรียบร้อย(hygiene) ของ /etc และ /usr/etc

GitHub Actions และพื้นที่ดิสก์

  • เมื่อใช้ GitHub Actions เพื่อสร้างคอนเทนเนอร์ อาจพบปัญหาเกี่ยวกับพื้นที่ดิสก์เนื่องจากขนาดของอิมเมจคอนเทนเนอร์ที่บูตได้
  • เพื่อแก้ปัญหานี้ สามารถเพิ่มขั้นตอนลบไดเรกทอรี /opt/hostedtoolcache ในไฟล์เวิร์กโฟลว์เพื่อเพิ่มพื้นที่ว่างบนดิสก์

ทำความเข้าใจ /var

  • /var เป็นไดเรกทอรีสำหรับข้อมูลและสถานะภายในเครื่องที่คงอยู่และเปลี่ยนแปลงได้ และแม้ระหว่างการอัปเดต เนื้อหา /var ของคอนเทนเนอร์อิมเมจก็จะไม่เปลี่ยนแปลง
  • ดังนั้น หากแอปพลิเคชันเขียนข้อมูลลงใน /var ควรย้ายไปยังไดเรกทอรีอื่น เช่น /usr/share เพื่อหลีกเลี่ยงปัญหาการเมานต์แบบอ่านอย่างเดียว

การใช้คำสั่ง useradd

  • หากมีการเรียก useradd ในสคริปต์แพ็กเกจ อาจเกิด state drift ได้เมื่อ /etc/passwd ถูกแก้ไขภายในเครื่อง
  • เพื่อหลีกเลี่ยงปัญหานี้ สามารถพิจารณาใช้ตัวเลือก DynamicUser=yes ของ systemd เพื่อสร้างผู้ใช้แบบไดนามิก
  • อย่างไรก็ตาม ในกรณีที่ซับซ้อน การเปลี่ยนไปใช้ DynamicUser=yes อาจทำได้ยาก และในกรณีนั้นแนะนำให้ใช้ systemd-sysusers เพื่อสร้างผู้ใช้

การฝังคอนเทนเนอร์ด้วย Quadlet

  • การรันเวิร์กโหลดแบบคอนเทนเนอร์ภายใต้ systemd เป็นวิธีที่เรียบง่ายแต่ทรงพลังสำหรับการปรับใช้ที่เชื่อถือได้
  • Podman มีเครื่องมือชื่อ Quadlet สำหรับการทำงานร่วมกับ systemd ซึ่งช่วยให้สามารถจัดการเวิร์กโหลดแบบคอนเทนเนอร์ได้ในเชิงประกาศ
  • Quadlet ทำงานร่วมกับ image mode ได้อย่างสมบูรณ์ และสามารถใช้อิมเมจที่ผูกกันอย่างมีตรรกะเพื่อนำเข้าอิมเมจคอนเทนเนอร์แอปพลิเคชันล่วงหน้าในช่วงบูตได้

สรุป

  • การใช้ image mode ทำให้เกิดการเปลี่ยนกระบวนทัศน์ในการทำงานของโฮสต์ RHEL
  • สามารถสร้าง ปรับใช้ และจัดการระบบปฏิบัติการด้วยเครื่องมือแบบ cloud-native และจะต้องดูแล OS แบบ immutable ที่ส่วนใหญ่ของระบบถูกเมานต์เป็นแบบอ่านอย่างเดียว

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น