วันนี้เป็นวันที่ได้นำระบบที่ใช้ RedHat 8 และมีการนำเทคโนโลยีใหม่อย่าง Container โดยใช้ Container Engine Podman ไปแล้ว 2 เดือนครับ ส่วนตัว Site นี้น่าจะเป็น Site แรกของไทยที่ได้ใช้ RedHat 8 และ Podman Container Engine บน Production ครับ ผมมีบันทึกประเด็นที่พบไว้ เผื่อจะเป็นประโยชน์กับท่านอื่นๆที่ Search เจอครับ
RedHat 8
- ไม่มี locale th_TH.tis620
- ลองดู locale ที่เป็น tis620 ด้วยคำสั่ง
[root@invsdevapp01 ~]#localectl list-locales | grep TH
th_TH
th_TH.utf8
- ผลลัพธ์ที่ได้ ไม่มี locales th_TH.tis620 (ทดสอบ RedHat 8.0-8.3) ตรงนี้ผมเป็นจุดสังเกตุสำหรับระบบที่ต้องการ tis620 ครับ เปลี่ยนมาใช้ utf8 เถอะครับ
- สำหรับเคสนี้ ผมแก้ปัญหาโดยใช้กำหนด locales เป็น th_TH และทดสอบใช้งานกับ IBM DB2 11.5.4 โดยกำหนดตัว Database เป็น tis620 พบว่าระบบใช้งานได้ครับ
- ลองดู locale ที่เป็น tis620 ด้วยคำสั่ง
- ไม่มี ntpd ให้ใช้แล้ว ตรงนี้ System Admin ของลูกค้าโวยพอสมควร แต่มันมาจาก RedHat8 ครับ ที่ยกเลิกการใช้ ntpd และแนะนำให้ใช้ chronyd แทนครับ
systemctl stop chronyd chronyc tracking date --set "2010-01-01" #Set Date ย้อนไปอีก เพื่อแก้ไขบางอย่าง timedatectl systemctl start chronyd chronyc tracking timedatectl
- ด้าน Security มี System-wide cryptographic policies เพิ่มเข้ามาครับ
- สำหรับเรื่องอื่นๆของ RedHat 8 สามารถดู Release Note ประกอบการตัดสินใจ ติดตั้ง หรือ Upgrade ครับ
Podman
- ตัว Podman จำเป็นต้องใช้ เนื่องจากเป็น Container Engine กึ่งๆบังคับบน RedHat 8 ครับ โดยจริงๆ ยังสามารถใช้ docker ได้ครับ แต่ต้องเลือก Option เป็น --nobest (บังคับติดตั้ง แม้ว่าบน Library ที่ใช้งานอาจจะมีปัญหาบ้าง เช่น ไม่ Compatible / Dependency ไม่ครบครับ)
sudo dnf install --nobest docker-ce
- ดังนั้นทีมจึงเลือกใช้ Podman แทนครับ โดย Podman มีจุดเด่น ไม่ได้ใช้ Service daemon (Service ที่เป็น background Process ส่วนมากมักลงท้ายด้วย d และต้องใช้ user ที่มีสิทธิ root จัดการครับ)
- ดังนั้นทุก User สามารถใช้งาน Container ได้หมดครับ ไม่ต้องมีการตั้งค่าอะไรเพิ่มครับ
- โดย non-root user สามารถสร้าง จัดการ Container ได้ครับ โดยมีอยู่ใน mode rootless ครับ ซึ่งแนวคิดนี้ตอบโจทย์ด้าน Security เลยครับ เพราะ ทีม admin ไม่จำเป็นต้องใช้ User ที่มีสิทธิสูงจัดการ Container ลดความเสี่ยงไปได้เยอะครับ
- สำหรับแนวคิดของ rootless คือ การใช้ความสามารถของ User Namespaces ใน Linux Kernel ที่ช่วย Remap remap UID และ GID เช่น user ที่ host สมมติว่าชื่อ invsbch มี UID เป็น 1001 และ user ใน container เป็น invsbchc มี UID เป็น 1009 ก็จะทำการ map 1001 จาก host ไปเป็น 1009 ใน container ครับ
- ใครที่ใช้ docker ไม่ต้องน้อยใจไปครับ ว่าไม่มี rootless mode ทาง docker ทำตาม podman แล้วครับ
- docker มี docker compose แต่ Podman บน RedHat 8.0 - 8.3 ไม่มี Feature นี้ครับ
- ถ้าจำเป็นต้องใช้ RedHat 8.0 - 8.3 ต้องเหนื่อยนิดนึงครับ
- RedHat 8.4 + Podman 3.0 มีตัว podman compose เข้ามาแล้วครับ
- ค่า Default Setting ของ Podman ใช้งานไม่ได้ครับ เพราะระหว่างที่ลอง POC ตัว Podman ผมเจอปัญหาว่า Container Run ไป 7-10 วัน อยู่ๆ Container ดับแบบไม่ทราบสาเหตุครับ
- สาเหตุ เกิดจาก Default ของ Podman Property runroot ถูกกำหนดไว้ที่ tmp เช่น Path /tmp/run-001 พอมันอยู่ใน Path /tmp ใช้ไปสักพักแล้ว Service tmpfs เข้ามา Clear ข้อมูลออกครับ
- การแก้ไข ปรับ Property runroot ใน storage.conf ให้ไปใช้ Path อื่นแทนครับ (ต้องดูไม่ให้ขัดกับ Hardening OS ด้วยครับ)
Reference
- Product Documentation for Red Hat Enterprise Linux 8 - Red Hat Customer Portal
- New features for running containers on NFS with rootless Podman | Enable Sysadmin (redhat.com)
- podman(1) — Podman documentation
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.