ในโลกของ Containerization และ Kubernetes ทั้ง Container และ Pod เป็นหน่วยที่ใช้วันรันแอปพลิเคชันเหมือนกัน แต่มีระดับชั้น (Abstraction) และหน้าที่ที่ต่างกันอย่างชัดเจนครับ
สรุปความแตกต่างแบบเข้าใจง่าย ได้ดังนี้ครับ
Container (ตู้คอนเทนเนอร์)
Container คือ หน่วยที่เล็กที่สุดในฝั่งของ Runtime/Packaging (เช่น Docker, containerd) มันคือการแพ็กโค้ดของแอปพลิเคชัน, ไลบรารี, และ Dependencies ทั้งหมดที่จำเป็นต้องใช้ รวมเข้าด้วยกันเป็นก้อนเดียว เพื่อให้มั่นใจว่าแอปจะทำงานได้เหมือนกันในทุกสภาพแวดล้อม (Environment)
- ทำงานในระดับ: Operating System (ใช้ Kernel ร่วมกับ Host OS)
- สิ่งที่อยู่ข้างใน: โค้ดแอป, สภาพแวดล้อม (Environment), และไฟล์ระบบที่จำเป็นสำหรับแอปนั้นๆ ตัวเดียว
- ตัวอย่างเทคโนโลยี: Docker Container, Containerd, Podman
Pod (ฝักถั่ว)
Pod คือ หน่วยที่เล็กที่สุดในฝั่งของ Kubernetes (Orchestration) โดย Pod จะทำหน้าที่เป็น “ตัวห่อหุ้ม” (Wrapper) ให้กับ Container อีกทีหนึ่ง โดยใน 1 Pod สามารถมี Container อยู่ข้างในได้ตั้งแต่ 1 ตัว หรือมากกว่านั้น (มักจะเรียกว่า Sidecar Container)
- ทำงานในระดับ: Cluster Management (Kubernetes)
- สิ่งที่อยู่ข้างใน: Container (อย่างน้อย 1 ตัว), Shared Network (IP เดียวกัน), Shared Storage (Volumes) รวมถึงข้อกำหนดในการรันต่างๆ
- พฤติกรรมภายใน Pod: หากมีหลาย Container อยู่ใน Pod เดียวกัน พวกมันจะแชร์ Network Space ร่วมกัน ทำให้คุยกันเองผ่าน
localhostได้ทันที และเกิด-ดับพร้อมกัน
ตารางเปรียบเทียบข้อแตกต่าง
| คุณสมบัติ | Container | Pod |
| แนวคิดหลัก | การแพ็กแอปพลิเคชันและ Dependencies | หน่วยที่เล็กที่สุดที่ Kubernetes ใช้จัดการและสั่งรัน |
| เทคโนโลยีที่จัดการ | Docker, Containerd, Podman | Kubernetes |
| การระบุที่อยู่ (IP) | มี IP เป็นของตัวเองในระดับ Container Network | แชร์ IP ร่วมกัน 1 IP ต่อ 1 Pod (ทุก Container ข้างในใช้ IP นี้ร่วมกัน) |
| การใช้ Storage | Isolated (แยกกัน) ยกเว้นจะต่อ Volume นอก | สามารถแชร์ Volume ร่วมกันระหว่าง Container ข้างในได้ง่าย |
| ความสัมพันธ์ | 1 Container ทำหน้าที่ 1 อย่างเดี่ยวๆ | สามารถรวม Container หลัก และ Container เสริม (เช่น Logger, Proxy) ไว้ด้วยกันได้ |
อุปมาอุปไมยให้เห็นภาพ
- Container เปรียบเหมือน “เมล็ดถั่ว” (หรือเมล็ดข้าวโพด): แต่ละเมล็ดคือแอป 1 ตัวที่มีทุกอย่างพร้อมเติบโต
- Pod เปรียบเหมือน “ฝักถั่ว”: ที่ห่อหุ้มเมล็ดถั่วเอาไว้ บางฝักอาจจะมีเมล็ดถั่วแค่เมล็ดเดียว (Single-container Pod ซึ่งเป็นท่ามาตรฐาน) หรือบางฝักอาจจะมีเมล็ดถั่วเม็ดเล็กๆ พ่วงมาด้วยกัน (Multi-container Pod) แต่เวลา Kubernetes หยิบไปวางหรือสั่งย้าย มันจะหยิบไป “ทั้งฝัก” เสมอ ไม่สามารถสั่งย้ายเฉพาะเมล็ดข้างในแยกกันได้ครับ
อ่านเพิ่มเติม