ข้ามไปยังเนื้อหาหลัก
กลับไปหน้าบทความ

Kubernetes คืออะไร ?

Kubernetes เป็นระบบ open-source ที่ถูกพัฒนาโดย Google เพื่อช่วยในการจัดการและควบคุมการทำงานของแอปพลิเคชันที่อยู่ใน containers

เผยแพร่เมื่อ

หมวดหมู่
  • cloud computing
  • kubernetes
มุมสูงของลานตู้คอนเทนเนอร์หลากสี

ถ้าทีมคุณรันแอปพลิเคชันบน container ตั้งแต่สองสามตัวขึ้นไป ไม่ช้าก็เร็วจะเจอคำถามเดิมๆ: ใครรีสตาร์ต container ที่ล่มตอนตีสาม ใครเพิ่ม container ตอน traffic พุ่ง และใครดูแลให้ทุกอย่างรันอยู่บนเครื่องที่ทรัพยากรยังเหลือพอ Kubernetes ถูกสร้างมาเพื่อตอบคำถามพวกนี้โดยอัตโนมัติ

Kubernetes คืออะไร

Kubernetes (มักเขียนย่อว่า K8s) เป็นระบบ open-source สำหรับจัดการ container จำนวนมาก ทั้งการรัน การกระจาย และการกู้คืน เดิมพัฒนาโดย Google จากประสบการณ์รันระบบขนาดใหญ่มาหลายปี ปัจจุบันเป็นโปรเจกต์ open-source ที่มีชุมชนและ ecosystem รองรับกว้างมาก ทั้งบน cloud สาธารณะและเครื่องในองค์กรเอง

ชื่อ Kubernetes มาจากภาษากรีก แปลว่า “คนถือหางเสือเรือ” (helmsman) — คนที่ควบคุมทิศทางเรือ ตรงกับบทบาทของระบบที่คอยกำกับ container หลายร้อยตัวให้ทำงานตามที่ตั้งใจ

ประเด็นสำคัญ: Kubernetes ไม่ได้รันแอปของคุณให้เอง แต่ดูแลว่า container ที่บรรจุแอปของคุณ รันอยู่ พร้อมใช้งาน และมีทรัพยากรเพียงพอ ตามสเปกที่คุณประกาศไว้เสมอ

แผนผัง Kubernetes แสดง control plane, worker nodes และองค์ประกอบภายใน cluster
ที่มาภาพ: CNCF — How Kubernetes works ภาพประกอบปี 2019 ที่บทความต้นฉบับอ้างอิง

ทำไมถึงสำคัญ และแก้ปัญหาอะไร

พอจำนวน container เริ่มเยอะ การจัดการด้วยมือจะกลายเป็นภาระ:

  • Container ล่มแล้วใครรีสตาร์ต — กลางคืน วันหยุด ไม่มีใครนั่งเฝ้า
  • Traffic พุ่งแล้วขยายยังไง — เปิดเครื่องเพิ่มทีละตัวเองไม่ทัน
  • เครื่องบางตัวแน่น บางตัวว่าง — ทรัพยากรถูกใช้ไม่เต็มที่ จ่ายเงินเปล่า
  • อัปเดตเวอร์ชันใหม่ยังไงให้ผู้ใช้ไม่เจ็บ — หยุดระบบทั้งหมดแล้วเปิดใหม่ยังเสี่ยง

Kubernetes จัดการทั้งหมดนี้จากไฟล์กำหนดค่า (manifest) ชุดเดียว คุณประกาศว่าระบบควรเป็นอย่างไร — ใช้ container image อะไร กี่ตัว ใช้ CPU และหน่วยความจำเท่าไร Kubernetes คอยรักษาสถานะนั้นให้คงอยู่ตลอดเวลา ถ้ามีอะไรเบี่ยงไป ระบบแก้ให้เอง

ผลลัพธ์คือระบบที่กู้ตัวได้เองเมื่อเกิดความผิดปกติ ใช้ทรัพยากรคุ้มค่าขึ้น และทีมมีเวลาไปทำงานพัฒนาแทนการนั่งจัดการ server

ความสามารถหลักที่ใช้บ่อย

Self-healing — ถ้า container ล่ม Kubernetes รีสตาร์ตให้เอง ถ้า node ทั้งเครื่องดับ container ที่เคยรันอยู่จะถูกย้ายไป node อื่นที่ยังใช้ได้

Auto-scaling — เพิ่มหรือลดจำนวน container ตาม load จริง รองรับ traffic ที่ขึ้นลง โดยไม่ต้องกันทรัพยากรสำรองไว้ตลอดเวลา

Deployment และ rolling update — สั่งปล่อยเวอร์ชันใหม่แล้วระบบค่อยๆ เปลี่ยนทีละส่วน ผู้ใช้ไม่เจอ downtime เวอร์ชันใหม่มีปัญหาก็ rollback กลับไปเวอร์ชันเดิมได้ทันที

Service discovery และ load balancing — container หากันเจอผ่านชื่อ DNS ภายใน cluster และ request ถูกกระจายไปตาม container ที่พร้อมใช้งานโดยอัตโนมัติ

Resource management — กำหนดค่า CPU และ memory ขั้นต่ำ-สูงสุดให้แต่ละ workload ระบบจัดลำดับการวาง container บน node ให้เหมาะสม

Monitoring และ logging — สถานะของทุก workload ทั้ง health check และ log พร้อมดูผ่านเครื่องมือมาตรฐาน เช่น Prometheus และ Grafana

ใช้จริงเมื่อไหร่

เว็บแอปที่กำลังจะเปิดตัว — ทีมไม่ต้องเดาว่าผู้ใช้จะเข้ามากี่คน ตั้ง auto-scaling ไว้ ระบบขยายตาม traffic จริง และถ้า instance ไหนตาย ระบบเปิดตัวใหม่ให้เองระหว่างที่ทีมยังไม่ทันรู้ตัว

ทีมที่ทำ CI/CD ต่อเนื่อง — pipeline build และ test เสร็จก็ deploy ต่อได้เลยด้วย manifest เดียวกันทุก environment ระบบแยกเวอร์ชันใหม่ออกจากเดิมชัดเจน ทำให้ release ได้บ่อยขึ้น

ระบบที่แตกเป็นหลาย microservices — แต่ละ service รันแยกอิสระ สเกลต่างกันได้ตาม load ของมันเอง และคุยกันผ่าน service discovery ของ Kubernetes พอ service หนึ่งล่ม ระบบกู้ให้เองโดยส่วนอื่นยังทำงานต่อ

สังเกตว่าทั้งสามกรณีไม่ได้ต่างกันที่เทคโนโลยี แต่ต่างที่ปัญหาที่ทีมต้องการปล่อยมือ — Kubernetes จัดการเรื่องนั้นให้อัตโนมัติ

สรุป

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

Zotect ให้คำปรึกษาและวางระบบ Kubernetes รวมถึง container orchestration ตั้งแต่ออกแบบ cluster ให้เหมาะกับ workload จนถึงวางระบบ monitoring หลัง deploy — ดูรายละเอียดที่หน้า Modern Infrastructure หรือ ติดต่อทีมงาน