Kubernetes
เชื่อว่าหลายคนคงเคยได้ยินชื่อ Kubernetes กันมาบ้างแล้วแต่ไม่รู้ว่ามันคืออะไร ใช้ทำหน้าที่อะไรกันแน่ ในบทความนี้เราก็จะมาพูดถึง Kubernetes โซลูชันที่นำเสนอการจัดการ Container กัน
Kubernetes คืออะไร
Kubernetes เรียกย่อๆว่า K8s เป็น Open Source Orchestration Tool ที่ออกแบบมาเพื่อทำให้การปรับใช้ การปรับขนาด และการจัดการแอปพลิเคชัน Container เป็นไปโดยอัตโนมัติ Kubernetes ถูกพัฒนาโดย Google และได้บริจาคให้กับ Cloud Native Computing Foundation (CNCF) ในเวลาต่อมา Kubernetes มอบ Framework ที่มีประสิทธิภาพสำหรับการจัดการทรัพยากรของโครงสร้างพื้นฐานที่ซับซ้อนและยังช่วยให้แอปพลิเคชันสามารถทำงานบน Container ได้ตลอดเวลาอีกด้วย
เข้าใจแนวคิดหลักของ Kubernetes
โครงสร้างของ Kubernetes
Kubernetes ประกอบไปด้วย Master Node และ Worker Nodes ตัว Master Node จะจัดการการทำงานของ Cluster ทั้งหมด ในขณะที่ Worker Nodes จะทำหน้าที่ Run Container
ส่วนประกอบของ Master Node
API Server
- เป็นจุดเริ่มต้นของการติดต่อกับ Cluster ทั้งหมด โดยจะทำหน้าที่คอยตรวจสอบและประมวลผลคำขอของ API
Etcd
- ระบบ Distributed Key Value Store ทำหน้าที่เก็บรักษาข้อมูลต่างๆที่ใช้ในการบริหารจัดการ Cluster ทั้งหมด
Scheduler
- ทำหน้าที่กำหนด Pod ที่จะไปอยู่ใน Node เพื่อหา Node ที่มีประสิทธิภาพและความพร้อมใช้งานกับ Pod มากที่สุด
Controller Manager
- ทำหน้าที่ตรวจสอบสถานะของ Cluster โดยจะจัดการการทำงานต่างๆ เช่น การจำลอง Pod เป็นต้น
ส่วนประกอบของ Worker Node
Kubelet
- เป็นสื่อกลางที่คอยติดต่อระหว่าง Master Node และ Worker Node โดยจะทำหน้าที่จัดการสถานะของ Nodeแต่ละตัวภายใน Cluster และตรวจสอบให้แน่ใจว่า Container ที่ทำงานบนในแต่ละ Node สามารถทำงานได้อย่างถูกต้อง
Kube Proxy
- ทำหน้าที่ดูแลเครือข่ายการสื่อสารระหว่างบริการภายใน Cluster เพื่อให้บริการต่างๆสามารถเข้าถึงกันได้แม้จะมีการปรับใช้บน Node ที่แตกต่างกันก็ตาม
Container Runtime
- ทำหน้าที่รับผิดชอบการจัดการกับทรัพยากรที่จำเป็นสำหรับ Containers บน Pod นอกจากนี้ยังช่วยจัดการเรื่องเครือข่าย การจัดเก็บข้อมูลและด้านอื่นๆที่ช่วยให้ Containers สามารถทำงานได้ดียิ่งขึ้น โดย Container Runtime ที่พบได้บ่อยมี Docker, Container, rkt และอื่น ๆ
Pod
- หน่วยที่มีความสามารถในการประมวลผลที่เล็กที่สุดใน Kubernetes โดยภายใน Pod จะประกอบไปด้วย Container และทรัพยากรของ Container เช่น IP Address และ Storage เป็นต้น
ReplicaSets and Deployments
- ReplicaSets ทำหน้าที่กำหนดจำนวนของ Pod ที่ต้องการให้มีการทำงาน ส่วนเจ้าตัว Deployments จะทำหน้าที่เป็นตัวกำหนดว่าต้องการ ReplicaSet กี่ชุด และในแต่ละ pods ต้องมีอะไรอยู่ข้างในบ้าง
Services and Networking
- ทำหน้าที่กระจาย Load Balance ไปยัง Pod เพื่อให้มั่นใจได้ว่าแอปพลิเคชันจะยังคงสามารถเข้าถึงได้แม้ว่า Pod จะถูกสร้างใหม่หรือย้ายออกไปก็ตาม และในส่วนของ Networking จะเกี่ยวข้องกับการจัดการการสื่อสารระหว่าง Pod, Service และทรัพยากรเครือข่ายอื่นๆภายใน Cluster โดย Kubernetes จะใช้ Flat Network Model ซึ่ง Pod แต่ละอันจะได้รับที่อยู่ IP ของตัวเองและสามารถสื่อสารโดยตรงกับ Pod อื่น ๆได้เลย
ประโยชน์ของ Kubernetes
1. Scalability
- Kubernetes ช่วยให้แอปพลิเคชันสามารถปรับขนาดได้อย่างง่ายดายยิ่งขึ้น โดยสามารถเพิ่มหรือลบ Container ได้ตามความต้องการ นอกจากจะช่วยจัดการการใช้ทรัพยากรได้อย่างเหมาะสมแล้วยังช่วยจัดการกับจำนวนคนที่เข้าใช้งานที่เพิ่มขึ้นอย่างรวดเร็วให้มีประสิทธิภาพมากขึ้นอีกด้วย
2.High Availability
- Kubernetes รองรับการ Load Balance โดยอัตโนมัติ ทำให้แอปพลิเคชันจะยังคงใช้งานได้แม้ว่า Node หรือ Container บางตัวจะล้มเหลวก็ตาม
3.Container Orchestration
- Kubernetes มีความเชี่ยวชาญในการจัดการและควบคุมแอปพลิเคชันในรูปแบบของ Container ทำให้การปรับใช้ การปรับขนาด และการจัดการบริการของ Container สามารถเป็นไปได้โดยอัตโนมัติ
4.Ecosystem and Community
- Kubernetes มีเครื่องมือและปลั๊กอินมากมายที่ช่วยปรับปรุงฟังก์ชันการทำงาน รวมถึงมีชุมชนขนาดใหญ่ (Community) ที่คอยช่วยกันพัฒนาและสนับสนุนอย่างต่อเนื่อง
______________________________________________________________________________