1 คะแนน โดย chcv0313 2025-12-26 | 8 ความคิดเห็น | แชร์ทาง WhatsApp

มีเซิร์ฟเวอร์เครื่องหนึ่งที่มีผู้ใช้ร่วมกันหลายสิบคน

แต่ละคนกำลังให้บริการโปรเจกต์ของตัวเองผ่านคอนเทนเนอร์

เมื่อเกิดปัญหาอย่างเช่นการรีบูตเซิร์ฟเวอร์ ผู้ดูแลระบบจะรับมือกับคอนเทนเนอร์เหล่านี้ได้ค่อนข้างลำบาก

ควรให้แต่ละคนส่งคำสั่งสำหรับรัน Docker container ที่ใช้อยู่เป็นประจำมา แล้วให้ผู้ดูแลรันให้ทีละอันหรือไม่
หรือควรทำเป็น Docker Compose แล้วต้องเข้าไปในโฟลเดอร์ของแต่ละโปรเจกต์ทีละอันเพื่อ compose up ให้ หรือแนวทางอื่น ๆ

ในฐานะผู้ดูแลระบบ ขอคำแนะนำว่าควรบริหารจัดการคอนเทนเนอร์จำนวนมากอย่างไร

8 ความคิดเห็น

 
selene 2025-12-29

ผมก็คิดคล้ายกับคุณ tujuc เช่นกัน แต่ผมมองว่าการนำ k8s มาใช้คนเดียวโดยไม่มีผู้เชี่ยวชาญ แล้วจะดูแลระบบให้เสถียรโดยไม่เกิดปัญหาเลยนั้นมีความเสี่ยงพอสมควร

แต่กรณีนี้คุณบอกว่าเป็นสถานการณ์ที่มีการใช้เซิร์ฟเวอร์ร่วมกัน 4 เครื่องโดยคนหลายสิบคน เลยค่อนข้างตัดสินใจยากอยู่บ้าง
อย่างไรก็ตาม แทนที่จะตัดสินจากจำนวนคนที่เกี่ยวข้อง ถ้าสถานการณ์คือมีจำนวนโปรแกรมฝั่งเซิร์ฟเวอร์มากเกินไปและซับซ้อนมาก ก็น่าจะคุ้มที่จะพิจารณาเรียนรู้ k8s ครับ

ถ้าเป็นผมและอยู่ในสถานการณ์เดียวกับเจ้าของโพสต์ ผมน่าจะค่อย ๆ ปรับปรุงสภาพแวดล้อมตามขั้นตอนด้านล่างนี้

  1. จัดการให้โปรแกรมฝั่งเซิร์ฟเวอร์ไม่มีปัญหาแม้จะถูกปิดเมื่อใดก็ตาม => รวมถึงการทำ graceful shutdown, รีแฟกเตอร์ให้ทำงานแบบ stateless เป็นต้น (หรือขอให้วิศวกรช่วยดำเนินการ)
  2. ทำให้โปรแกรมฝั่งเซิร์ฟเวอร์เป็นคอนเทนเนอร์และทำให้เป็นมาตรฐาน => เขียน Dockerfile และไฟล์ docker compose สำหรับแต่ละบริการ เพื่อบังคับให้เมื่อรันด้วยคำสั่งเดียวกันแล้วต้องสามารถเริ่มทำงานได้แน่นอน
  3. จัดการให้วิศวกรคนอื่นนอกจากผู้ดูแลไม่จำเป็นต้องเข้าถึงเซิร์ฟเวอร์โดยตรง => สามารถใช้แพลตฟอร์ม CI/CD ที่ต้องการ เช่น Jenkins/GitHub Actions/AWS CodePipeline เพื่อสร้างระบบในลักษณะคล้าย GitOps ได้ แค่ทำได้ถึงระดับนี้ วิศวกรก็สามารถควบคุมการ deploy ใหม่/รีบูตใหม่ได้มากพอในระดับแค่รัน pipeline อีกครั้ง
  4. หลังจากนั้นค่อยยกระดับเพิ่มเติมตามที่ท่านอื่นกล่าวไว้ (เช่น นำ K8s และ ArgoCD มาใช้)
 
chcv0313 2025-12-31

ขอบคุณทุกท่านที่ช่วยตอบครับ/ค่ะ เป้าหมายของปีนี้คงต้องตั้งไว้เป็นการนำ Kubernetes มาใช้งานแล้วครับ/ค่ะ

 
popopo 2025-12-28

วิธีที่ง่ายที่สุดคือทำให้คอนเทนเนอร์รันแบบเดมอน เพื่อให้ตอนที่ OS บูตขึ้นมา คอนเทนเนอร์ก็เริ่มทำงานด้วย

  • และก่อนรีสตาร์ตก็สามารถปิดทีละตัวอย่างถูกต้องได้ด้วย

ถ้าเป็นสาย EL (Enterprise Linux, ใช้เรียกรวมตระกูล RHEL) ก็สามารถลงทะเบียนคอนเทนเนอร์เป็นบริการของ systemd ได้ครับ เห็นว่าเรียกว่า Quadlet

 
bungker 2025-12-27

ถ้าดูจากคำถามอย่างเดียว ก็ดูเหมือนจะแก้ได้ด้วย depend on, restart always หรือ unless stoped แต่ก็น่าจะมีสถานการณ์ยาก ๆ ที่ไม่ได้รวมอยู่ในคำถามนะครับ แต่ถ้ามีระดับหลายสิบคน สุดท้ายก็น่าจะต้องไปใช้ Kubernetes

เอาคำถามนี้ไปถาม AI ตรง ๆ ก็น่าจะหาคำตอบได้ครับ

 
tujuc 2025-12-27
  1. คุณวางโครงสร้างพื้นฐานไว้ที่ไหน? AWS? ดูแลเองหรือเช่าโฮสต์เซิร์ฟเวอร์? Azure?
  2. คุณดูแลคนเดียวหรือเปล่า?
  3. ตอนนี้ทำงานอยู่ในสถานะไหน และทราบข้อมูลไปถึงระดับไหนแล้ว?

ถ้ามีข้อมูลข้างต้น จะคุยกันได้ง่ายขึ้นมากครับ

ถ้าจะตอบโดยยึดจากที่คุณบอกมาแบบตรง ๆ....

ผมไม่แน่ใจว่าทำไมถึงต้องมีคำสั่งรันคอนเทนเนอร์ ขอให้ทำไฟล์ Compose ขึ้นมา แล้วจัดให้ทุกอย่างสามารถรันได้ด้วยคำสั่งเดียวกันทั้งหมด (docker compose command) โดยอิงจากไฟล์นั้นจะดีที่สุด

:) ในเมื่อคุณเป็นผู้ดูแล ก็สั่งให้ทำแบบนั้นได้เลยครับ เดี๋ยวคนอื่นก็ช่วยทำให้เอง ดันต่อไปได้เลย :)

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

 
chcv0313 2025-12-27

มีเซิร์ฟเวอร์ on-premises 4 เครื่องครับ
ทำคนเดียวครับ
ตอนนี้หลังผ่านเรื่องความปลอดภัยแล้ว บริษัทเพิ่งเริ่มนำ Docker มาใช้ได้ 4 เดือน และผมรู้จักแค่แนวคิดของ k8s เท่านั้น การนำ HARBOR สำหรับ Docker เข้ามาใช้ก็คงจะเป็นงานที่ผมต้องทำในเร็ว ๆ นี้ และหลังจากติดตั้ง Harbor แล้วก็น่าจะมีการบล็อก Docker Hub ครับ น่าจะกลายเป็นว่ามีแค่ผมคนเดียวที่เปิดใช้ Docker Hub ได้ แล้วถ้ามีคำขอเข้ามา ผมก็จะเป็นคนดึงอิมเมจจาก Docker Hub แล้วอัปโหลดขึ้น Harbor ภายในบริษัท

ผมมองว่าการฝืนใช้คำสั่ง compose และต้องเข้าไปหาโฟลเดอร์ของแต่ละโปรเจ็กต์เพื่อรัน compose up ทีละตัวเป็นเรื่องที่ไม่สมจริงเลยไม่ได้ทำแบบนั้น แต่แทนที่จะทำแบบนั้น ผมกลับขอให้ใช้คำสั่ง Docker ด้วย absolute path แทน ซึ่งช่วงหลังมานี้ผมเริ่มสลัดความคิดไม่ได้ว่านี่อาจเป็นแนวทางที่ผิดครับ

 
byun1114 2025-12-27

แค่กำหนดตัวเลือกรีสตาร์ตของ Docker ก็พอไม่ใช่เหรอ?

 
click 2025-12-26

ในกรณีแบบนี้ แนะนำให้ใช้ Kubernetes และจัดสรร context ให้กับผู้ใช้แต่ละคนจะดีกว่าครับ
และยังสามารถจำกัดสิทธิ์ให้ผู้ใช้แต่ละคนใช้งานได้เฉพาะ context นั้นได้ด้วย