เจาะลึก Kubernetes Architecture: พื้นฐานที่โปรแกรมเมอร์ต้องรู้ก่อนเข้าสู่โลก DevOps

5 นาที 17 views บันทึกเป็น PDF
เจาะลึก Kubernetes Architecture: พื้นฐานที่โปรแกรมเมอร์ต้องรู้ก่อนเข้าสู่โลก DevOps

ทำความรู้จัก Kubernetes Architecture แบบเข้าใจง่าย สำหรับมือใหม่ที่อยากเข้าใจการทำงานของ Control Plane และ Worker Nodes เพื่อเตรียมตัวสู่สายงาน DevOps

ทำความรู้จักกับ Kubernetes Architecture: หัวใจสำคัญของระบบจัดการ Container

หากน้อง ๆ กำลังก้าวเข้าสู่โลกของ DevOps หรือการพัฒนาซอฟต์แวร์ระดับองค์กร คำว่า Kubernetes Architecture คือสิ่งที่หลีกเลี่ยงไม่ได้เลยครับ เปรียบเทียบง่าย ๆ ว่าถ้า Container (หน่วยบรรจุแอปพลิเคชัน) คือกล่องพัสดุ Kubernetes ก็คือ "ระบบจัดการคลังสินค้าอัตโนมัติ" ที่คอยดูว่ากล่องไหนต้องวางตรงไหน ถ้ากล่องไหนเสียหายต้องรีบเปลี่ยนใหม่ หรือถ้ามีออเดอร์เข้ามาเยอะขึ้นต้องเพิ่มพนักงานยกของอย่างไร

การเข้าใจโครงสร้างของมันจะช่วยให้เราเลิกมองว่าแอปพลิเคชันเป็นแค่ไฟล์โค้ด แต่เห็นภาพว่ามันรันอยู่บนโครงสร้างพื้นฐานที่ซับซ้อนได้อย่างไร Kubernetes ทำงานในรูปแบบของ Cluster (กลุ่มของเครื่องคอมพิวเตอร์ที่ทำงานร่วมกัน) ซึ่งแบ่งหน้าที่ออกเป็นสองส่วนหลักคือ Control Plane (สมองสั่งการ) และ Worker Nodes (แรงงานผู้ปฏิบัติงาน) โดยแต่ละส่วนมีหน้าที่เฉพาะตัวที่ต้องทำงานประสานกันตลอดเวลา

ส่วนสมองสั่งการ: Control Plane (Master Node)

Control Plane คือศูนย์กลางการควบคุมทั้งหมดของคลัสเตอร์ เปรียบเสมือนผู้จัดการคลังสินค้าที่คอยรับคำสั่งและวางแผนงานต่าง ๆ ภายในนี้ประกอบด้วยส่วนประกอบสำคัญอย่าง API Server (ประตูหน้าด่านที่รับคำสั่งจากเรา), Scheduler (ตัวตัดสินใจว่าจะเอาแอปไปวางไว้ที่เครื่องไหน), Controller Manager (ผู้คอยตรวจสอบว่าระบบยังทำงานปกติไหม) และ etcd (ฐานข้อมูลเก็บสถานะของระบบ)

เวลาที่เราต้องการสั่ง Deploy แอปพลิเคชัน เราจะคุยผ่าน kubectl (เครื่องมือสั่งการผ่าน Terminal) ซึ่งคำสั่งนั้นจะวิ่งเข้าหา API Server เป็นที่แรก หากคำสั่งถูกต้อง Scheduler จะคำนวณหาเครื่องที่เหมาะสมที่สุดโดยดูจาก CPU และ Memory ที่เหลืออยู่ ส่วน etcd จะทำหน้าที่บันทึกทุกอย่างไว้ว่า ณ เวลานี้ แอปเรากี่ตัวกำลังรันอยู่ ถ้ามีตัวไหนตายไป Controller Manager จะรู้ทันทีและสั่งให้ระบบกู้คืนกลับมาครับ

ตัวอย่าง: สมมติเราสั่งให้รันเว็บแอปฯ 3 ชุด ระบบจะบันทึกสถานะนี้ลงใน etcd หากมีชุดใดหนึ่งพังลงมา Controller Manager จะพบความผิดปกติและแจ้งให้ Scheduler หาที่ว่างเพื่อรันตัวใหม่ขึ้นมาแทนทันทีโดยอัตโนมัติ

ส่วนแรงงานผู้ปฏิบัติงาน: Worker Nodes

Worker Nodes คือเครื่องคอมพิวเตอร์ที่แอปพลิเคชันของเราไปรันอยู่จริง ๆ ครับ ในแต่ละโหนดจะมีกระบวนการทำงานหลัก 3 อย่างคือ Container Runtime (ตัวรัน Container เช่น containerd), Kubelet (ตัวแทนผู้จัดการที่คุยกับ Control Plane), และ Kube-proxy (ตัวจัดการเครือข่าย) ทั้งหมดนี้ต้องติดตั้งอยู่บนทุกโหนดเพื่อให้ระบบทำงานได้อย่างราบรื่น

Kubelet คือหัวใจสำคัญของโหนด มันคอยรายงานสถานะกลับไปยัง Control Plane ว่า "ตอนนี้งานที่สั่งทำเสร็จแล้วนะ" หรือ "เครื่องนี้เริ่มเต็มแล้วนะ" ส่วน Kube-proxy ทำหน้าที่เหมือนพนักงานรับส่งเอกสาร คอยจัดการเรื่อง IP Address และ Load Balancing (การกระจายงาน) เพื่อให้ผู้ใช้งานเข้าถึงแอปพลิเคชันของเราได้ถูกต้องไม่ว่าจะรันอยู่บนโหนดไหนก็ตาม

# ตัวอย่างคำสั่งพื้นฐานในการตรวจสอบสถานะของ Node
kubectl get nodes

# คำสั่งนี้จะแสดงรายชื่อ Worker Nodes ทั้งหมดในคลัสเตอร์
# ถ้าสถานะเป็น Ready แปลว่า Kubelet ทำงานปกติและพร้อมรับงาน

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

สรุป: การนำไปใช้จริงสำหรับโปรแกรมเมอร์

การเข้าใจ Kubernetes Architecture ช่วยให้เราเขียนแอปพลิเคชันได้ "ฉลาดขึ้น" ครับ แทนที่จะเขียนโค้ดแบบรอรับ Request ทั่วไป เราจะเริ่มคิดถึงการทำ Health Check (เช็คว่าแอปยังหายใจอยู่ไหม) เพื่อให้ Kubelet ตรวจสอบได้ หรือการออกแบบให้แอปเป็น Stateless (ไม่เก็บข้อมูลไว้ในเครื่องตัวเอง) เพื่อให้ Scheduler สามารถย้ายแอปไปรันที่โหนดอื่นได้โดยที่ข้อมูลไม่หาย

หัวใจสำคัญคือการมองระบบให้เป็นองค์รวม ไม่ว่าจะเป็นการเลือกใช้ทรัพยากรให้เหมาะสม หรือการเข้าใจว่าทำไมแอปของเราถึงเข้าถึงไม่ได้หาก Kube-proxy มีปัญหา การเป็นโปรแกรมเมอร์ที่เข้าใจสถาปัตยกรรมจะช่วยให้เราแก้บั๊กได้เร็วกว่าคนอื่น เพราะเราไม่ได้แค่ดูโค้ดที่เขียน แต่เรามองเห็นถึง "บ้าน" ที่โค้ดของเราอาศัยอยู่ด้วยครับ

ลองเริ่มฝึกจากการติดตั้ง Minikube (เครื่องมือจำลอง Kubernetes คลัสเตอร์ในเครื่องตัวเอง) แล้วลองสั่ง kubectl create deployment ดูครับ การได้เห็นว่า Pod ถูกสร้างขึ้นมาอย่างไรผ่านคำสั่ง kubectl get pods จะช่วยให้สิ่งที่อ่านมาทั้งหมดกลายเป็นประสบการณ์จริงที่ติดตัวน้องไปตลอดการทำงานสายนี้ครับ


ที่มา: Kubernetes Architecture — DEV Community

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

จัดการเซิร์ฟเวอร์ผ่าน VS Code ให้ง่ายขึ้นด้วย Easy SSH พร้อมฟีเจอร์โหลดไฟล์ผ่านคลิกเดียว

จัดการเซิร์ฟเวอร์ผ่าน VS Code ให้ง่ายขึ้นด้วย Easy SSH พร้อมฟีเจอร์โหลดไฟล์ผ่านคลิกเดียว

เบื่อไหมที่ต้องสลับหน้าจอไปมาเพื่อจัดการเซิร์ฟเวอร์? มาลองใช้ Easy SSH ปลั๊กอิน VS Code ที่ช่วยให้คุณรีโมทผ่าน Terminal ได้สะดวก แถมโหลดไฟล์ได้ง่ายแค่กด Ctrl+click

ที่มา: DEV Community

4 hours ago 11 นาที
3 views
วิธีดึงข้อมูลราคาจาก Google Hotels ด้วย API สำหรับนักพัฒนา

วิธีดึงข้อมูลราคาจาก Google Hotels ด้วย API สำหรับนักพัฒนา

อยากทำแอปท่องเที่ยวแต่ดึงข้อมูลราคาจาก Google Hotels ไม่ได้? มาดูวิธีใช้ Apify Actor ช่วยดึงข้อมูลแบบอัตโนมัติด้วย Python ง่ายๆ ไม่ต้องกลัวเว็บพัง

ที่มา: DEV Community

8 hours ago 8 นาที
5 views
วิธีเช็กความพร้อมโปรเจกต์ก่อนปล่อยงานจริงด้วย ReleaseReady

วิธีเช็กความพร้อมโปรเจกต์ก่อนปล่อยงานจริงด้วย ReleaseReady

เคยไหม? โค้ดรันได้ในเครื่องแต่พอปล่อยจริงกลับพัง! มาดูวิธีตรวจสอบความพร้อมของโปรเจกต์ก่อนอัปขึ้น GitHub ด้วยเครื่องมือ ReleaseReady กัน

ที่มา: DEV Community

12 hours ago 9 นาที
5 views