SUSE by Ingram

Google แนะ 7 Best Practice สำหรับการสร้าง Container

เมื่อ Container และ Kubernetes ได้รับความนิยมมากขึ้นเรื่อยๆ ทาง Google เองก็ได้ออกมาแนะนำถึงหลัก 7 ประการในการสร้าง Container ให้ดี ซึ่งทางทีมงาน TechTalkThai เห็นว่าเป็นเนื้อหาที่เป็นประโยชน์ จึงนำมาสรุปเป็นภาษาไทยให้อ่านกันได้ง่ายๆ ดังนี้ครับ

 

1. มี 1 Application ต่อ 1 Container เท่านั้น

ใน Container หนึ่งๆ นั้นควรจะมี Application เดียวที่มี Parent Process ร่วมกันเท่านั้น ตัวอย่างเช่น ไม่ควรใช้งานทั้ง PHP และ MySQL ใน Container เดียวกัน เพราะจะทำให้แก้ปัญหาได้ยาก, ไม่สามารถจัดการ Linux Signal ได้ดี และไม่สามารถ Scale ระบบเฉพาะส่วนได้

Credit: Google

 

2. จัดการกับ PID 1, Signal Handling และ Zombie Process ให้ดี

Kubernetes และ Docker นั้นอาศัยการส่ง Signal เข้าไปเพื่อหยุดการทำงานของ Application ใน Container โดย Signal ดังกล่าวจะถูกส่งไปยัง Process ที่มี PID 1 ดังนั้นหากต้องการให้ Application หยุดการทำงานได้ทันทีที่ต้องการ ก็ต้องออกแบบ Container ให้สามารถรับ Signal เหล่านี้ให้ได้ดีๆ

 

3. ใช้ Docker Build Cache ให้มีประสิทธิภาพ

Docker นั้นสามารถทำการ Cache ข้อมูลใน Layer ต่างๆ ภายใน Image เพื่อช่วยให้การ Build ภายหลังทำได้เร็วขึ้น แต่การจะใช้ความสามารถนี้ก็จำเป็นต้องมีความรู้ความเข้าใจในการเขียน Dockerfile อยู่บ้าง เช่น การใส่ Source Code ของเราลงไปนั้นควรใส่เป็นบรรทัดท้ายๆ เท่าที่จะทำได้ เพื่อให้ Base Image และ Dependency ต่างๆ ถูก Cache ให้มากที่สุด เป็นต้น

 

4. เอาเครื่องมือที่ไม่จำเป็นออกไปจาก Image

การลดความเสี่ยงที่อาจทำให้ Host ถูกโจมตีให้เหลือน้อยที่สุดนั้นเป็นสิ่งที่ควรทำเป็นอย่างยิ่ง ดังนั้นจึงควรกำจัดสิ่งที่ Application ของเราไม่ได้ใช้ออกไปจาก Container ให้มากที่สุด หรือจะใช้ Distroless (https://github.com/GoogleContainerTools/distroless) ซึ่งเป็น Image เปล่าๆ ที่ไม่มี Package Manager, Shell หรือโปรแกรมอื่นๆ อยู่เลยในการสร้าง Image ก็ได้เช่นกัน และทาง Google ก็แนะนำให้กำหนดค่า Filesystem ให้เป็นแบบ Read-only เท่านั้น เพื่อให้ปลอดภัยสูงสุด

 

5. สร้าง Image ให้เล็กที่สุดเท่าที่จะเป็นไปได้

การทำ Image ให้มีขนาดเล็กนั้นนอกจากจะประหยัดพื้นที่แล้ว จะยังช่วยลดเวลาที่ต้องใช้ในการ Download Image ลง และยังลดเวลาในการบูทให้น้อยลงอีกด้วย

Credit: Google

 

6. ทำการ Tag Image ที่ใช้ให้เรียบร้อย

การ Tag นั้นจะทำให้ผู้ใช้งานสามารถเลือกใช้ Image ในรุ่นที่ต้องการได้ง่าย ซึ่งไม่ว่าจะใช้การ Tag แบบ Semantic Versioning หรือ Git Commit Hash ก็ตาม ก็ควรที่จะต้องเขียนลงเอกสารให้ชัดเจนพร้อมคำอธิบายเพื่อให้ผู้ใช้งานเลือกใช้งาน Image ได้ถูกรุ่น ที่สำคัญคือ Image รุ่นใดที่ถูก Tag แล้วต้องไม่มีการถูกแก้ไขภายใน Tag เดิมอีก เพื่อไม่ให้ผู้ใช้งานสับสน

 

7. พิจารณาให้ดีก่อนจะเลือกใช้ Public Image ใดๆ

ถึงแม้การใช้ Public Image จะทำให้ง่ายต่อการทำงานในหลายๆ ครั้ง แต่ Public Image เองก็อาจไม่ได้ถูกปรับแต่งมาให้ใช้ทรัพยากรน้อยหรือปลอดภัยก็เป็นได้ ดังนั้นการสร้าง Image เองสำหรับทุกๆ ส่วนของระบบ Software เองก็จะช่วยให้มั่นใจในประเด็นเหล่านี้ได้ดีขึ้น อย่างไรก็ดี ต้องเลือกให้ดีว่ากรณีไหนควรจะใช้ Public Image และกรณีไหนควรจะสร้าง Image เอง

 

ผู้ที่สนใจรายละเอียดเชิงลึก สามารถอ่านเนื้อหาฉบับเต็มได้ที่ https://cloudplatform.googleblog.com/2018/07/7-best-practices-for-building-containers.html ครับ

About techtalkthai

ทีมงาน TechTalkThai เป็นกลุ่มบุคคลที่ทำงานในสาย Enterprise IT ที่มีความเชี่ยวชาญทางด้าน Network, Security, Server, Storage, Operating System และ Virtualization มารวมตัวกันเพื่ออัพเดตข่าวสารทางด้าน Enterprise IT ให้แก่ชาว IT ในไทยโดยเฉพาะ

Check Also

รู้จัก AI Incident Database แหล่งรวมข้อมูลปัญหาที่เคยเกิดขึ้นกับระบบ AI สำหรับใช้เป็นกรณีศึกษา

สำหรับนักวิจัยทางด้าน AI การสร้าง AI ให้สามารถใช้งานได้โดยไม่มีความผิดพลาดเกิดขึ้นเลยนั้นถือเป็นเรื่องยาก และทางเว็บไซต์ AI Incident Database หรือ AIID ก็ได้รวบรวมเอากรณีศึกษาปัญหาที่เคยเกิดขึ้นกับระบบ AI ทั่วโลกเอาไว้ รวมถึงยังเปิดให้สามารถส่งกรณีของปัญหาเข้าไปให้นักวิจัยรายอื่นทั่วโลกได้นำไปศึกษากันได้ด้วย

นักวิจัยเสนอให้ใช้เกม Overcooked เป็นตัวชี้วัดประสิทธิภาพของระบบ Collaborative AI

ระบบ Deep Reinforcement Learning นั้นถือเป็นหนึ่งในระบบ AI หนึ่งที่มีประโยชน์มากโดยเฉพาะอย่างยิ่งในการนำไปประยุตก์ใช้งานร่วมกันหุ่นยนต์ อย่างไรก็ดี ระบบเหล่านี้มักมีปัญหาที่ไม่เคยพบมาก่อนและคาดไม่ถึงในขั้นตอนการพัฒนาเมื่อนำมาใช้งานจริง ทำให้เหล่านักวิจัยต้องมองหาแนวทางในการประเมินศักยภาพของระบบเหล่านี้ และได้เสนอให้ใช้เกม Overcooked เป็นตัวชี้วัดประสิทธิภาพนั่นเอง