เชื่อว่าเหล่ามือใหม่สายเดฟ คงเคยได้ยินคำว่า Kubernetes กันมาบ้าง โดยเฉพาะใครที่ใช้ Docker อยู่ด้วย ว่าแต่มันคืออะไรล่ะ? วันนี้ borntoDev จะมาสรุป ให้ทุกคนอ่านเองค่า
เขียนโดย
Phanpaporn Z. – BorntoDev Co., Ltd.
คุ้นจังคำว่า Container แต่มันคืออะไรนะ?
ก่อนจะไปพูดถึง Kubernetes ขอพูดถึง Container สักนิดแบบเร็ว ๆ ดีกว่า
Image from Kubernetes
ภาพข้างต้นจะพูดถึงวิวัฒนาการจากยุค Traditional Deployment ที่จะติดตั้ง OS และ App ทั้งหมดบนตัวเครื่อง Server จริง จึงมีปัญหาเรื่องแบ่งและจัดการ Resource ให้แต่ละ App กระทั่งปรับไปสู่ยุค Virtualized Deployment หรือยุคของ VM ที่จะจำลองเครื่องเสมือนหลาย ๆ เครื่องบน Server จริง 1 ตัว ทำให้เราบริหารจัดการ Resource ได้ดียิ่งขึ้น
ส่วนยุคของ Container Deployment นั้น มาจากปัญหาการใช้ VM แล้วกิน Resource จำนวนมาก เมื่อเราต้องการรันซอฟต์แวร์โดยไม่กระทบกับซอฟต์แวร์อื่นในเครื่อง จากประเด็นที่ VM ต้องแบ่ง Resource ของ Server ให้กับทุก ๆ เครื่องจำลองเสมือน จึงมีแนวคิดสร้างตู้ Container นี้เกิดขึ้น
โดยภายในตู้นี้ เราจะใส่แค่ Services และ Libraries เท่าที่จำเป็น ทำให้ทุกตู้เป็นอิสระต่อกัน และแชร์ส่วนที่ใช้งานร่วมกันอย่างเช่น OS ได้ โดยที่แต่ละตู้ไม่ได้กระทบซึ่งกันและกัน จึงไม่เปลือง Resource แบบ VM ทั้งยังเลือกรันเพียงตู้ที่ต้องการได้ สะดวกตอน Deploy สุด ๆ
และเจ้าตลาด Container ยอดนิยมในตอนนี้ คงจะหนีไม่พ้น Docker ชื่อที่เรามักได้ยินกันบ่อย ๆ ยังไงล่ะ!
Image by dendoktoor from Pixabay
เอาล่ะ พอรู้จัก Container กันแล้ว เราก็กลับมาที่ Kubernetes เครื่องมือยอดฮิตแห่งวงการ DevSecOps กันเถอะ
Kubernetes คืออะไร?
Kubernetes หรือที่มักเรียกย่อ ๆ ว่า “K8s” ไม่ก็ “Kube” นั้นเป็นศัพท์ภาษากรีก แปลว่า ผู้ถือหางเสือเรือ ดังนั้นจึงเป็นเครื่องมือที่เปรียบดั่งผู้สั่งการของเหล่า Container นั่นเอง พัฒนาขึ้นโดย Google และเป็น Open Source ด้วย โดย K8s จะใช้เพื่อจัดการ Container ในเรื่อง Deployment และ Scaling Application แบบอัตโนมัติ เพื่อให้การทำงานระบบเป็นไปอย่างมีประสิทธิภาพมากขึ้น
Kubernetes ทำอะไรได้บ้าง?
แน่นอนว่าเมื่อซอฟต์แวร์ของเราถูก Deploy ขึ้นสู่ Production แล้ว ก็คงมีหลาย ๆ Containers และ Servers ที่ต้องดูแล การจัดการ Container แต่ละตัวจึงเป็นเรื่องที่ยากยิ่งขึ้น เช่น จะเอา Container ไปรันที่เครื่องไหนดี? เราจะ Scale ระบบยังไงถ้ามี Workload เข้ามา? หรือถ้ามีสักเครื่องพังล่ะ? ทั้งหมดนี้คือสิ่งที่ K8s จะมาช่วยเรา
ฟีเจอร์หลัก ๆ ที่ K8s มีก็คือ Scaling เพื่อจัดการ Traffic ภายในระบบแบบอัตโนมัติ โดยลดหรือเพิ่ม Resource ให้กับแต่ละ Container ตาม Load ที่มีได้อย่างเหมาะสม นอกจากนี้ ถ้ามี Containers ไหนทำงานได้ไม่ถูกต้อง ไม่ตอบสนอง หรือเครื่องไหนเกิดพังขึ้นมา K8s ก็ช่วยจัดการได้ ไม่ว่าจะ Kill ทิ้ง ทำการ Restart หรือสร้างใหม่ เพื่อให้การทำงานในระบบเป็นไปตามปกติ
อ่านฟีเจอร์ของ K8s เพิ่มเติมได้ที่ https://kubernetes.io/
ซึ่งการจะ Scale หรือ Limit รวมถึงการสร้าง Cluster และ Container หรืออยากจะทำอะไรบ้างนั้น เราสามารถ Config เพื่อจัดการสิ่งเหล่านั้นได้ตามที่ต้องการเลย