- ทำความเข้าใจกับสถาปัตยกรรม Kubernetes
1.1 ระนาบควบคุม (Control Plane)
1.2 โหนด (Nodes) - ทำความเข้าใจกับ Kubernetes Objects: Building Blocks of Applications
- Kubernetes API และการสื่อสาร (Communication)
ในการเดินทางผ่าน Kubernetes เราได้แนะนำให้คุณทราบว่า Kubernetes คืออะไรและเหตุใดจึงสำคัญในการทำแอพ ตอนนี้ ถึงเวลาเจาะลึกความซับซ้อนของสถาปัตยกรรม ซึ่งเป็นรากฐานที่ช่วยให้ Kubernetes เป็นเครื่องมือที่ทรงพลังในการจัดการคอนเทนเนอร์ นี่จะเป็นก้าวสำคัญสู่การทำแอพที่มีประสิทธิภาพ ปรับขนาดได้ และทนทาน เพื่อไม่ให้เป็นการเสียเวลา เรามาเริ่มกันที่ Kubernetes Architecture
1. ทำความเข้าใจกับสถาปัตยกรรม Kubernetes
เพื่อทำความเข้าใจวิธีที่ Kubernetes ช่วยให้สามารถทำแอพและจัดการแอปพลิเคชันได้อย่างมีประสิทธิภาพ สิ่งสำคัญคือต้องเข้าใจสถาปัตยกรรมของมัน Kubernetes เป็นไปตามสถาปัตยกรรมไคลเอ็นต์เซิร์ฟเวอร์ มันแบ่งออกเป็นสองส่วนหลัก: Control Plane (หรือ Master) และโหนด
1.1 ระนาบควบคุม (Control Plane)
ระนาบควบคุมมีหน้าที่จัดการคลัสเตอร์ ทำการตัดสินใจทั่วโลกเกี่ยวกับคลัสเตอร์ (เช่น การตั้งเวลา) และตรวจจับและตอบสนองต่อเหตุการณ์คลัสเตอร์ (เช่น การเริ่มต้นพ็อดใหม่เมื่อฟิลด์ ‘ตัวจำลอง’ ของการปรับใช้ไม่เป็นที่พอใจ) Control Plane ประกอบด้วยชุดของกระบวนการที่ทำงานบนเครื่องเดียว (หรือหลายเครื่อง) นี่คือองค์ประกอบหลักของ Control Plane:
- เซิร์ฟเวอร์ API (kube-apiserver):เซิร์ฟเวอร์ API เป็นเกตเวย์ไปยัง Kubernetes Control Plane มันเปิดเผย Kubernetes API ซึ่งผู้ใช้ภายนอกใช้เพื่อดำเนินการต่างๆ บนคลัสเตอร์ Kubernetes นอกจากนี้ยังเป็นเอนทิตีการจัดการส่วนกลางที่รับคำขอ REST ทั้งหมดสำหรับการแก้ไข ซึ่งทำหน้าที่เป็นส่วนต่อประสานส่วนหน้าสำหรับ Control Plane
- พื้นที่เก็บข้อมูล etcd: Kubernetes ใช้ etcd เป็นที่เก็บค่าคีย์ที่สอดคล้องและพร้อมใช้งานสูงเพื่อเก็บข้อมูลคลัสเตอร์ทั้งหมด เช่น รายละเอียดการกำหนดค่า ข้อกำหนดสถานะ และข้อมูลเมตา การเปลี่ยนแปลงใด ๆ ในสถานะของคลัสเตอร์จะถูกเก็บไว้ใน etcd
- ตัวจัดกำหนดการ (kube-scheduler):ตัวกำหนดตารางเวลาจะเฝ้าดูพ็อดที่สร้างขึ้นใหม่ซึ่งไม่ได้กำหนดโหนดไว้ สำหรับพ็อดใหม่แต่ละพ็อด ตัวกำหนดตารางเวลาจะค้นหาโหนดที่เหมาะสมที่สุดสำหรับพ็อดที่จะทำงานและกำหนดพ็อดให้กับโหนดนั้น ปัจจัยที่นำมาพิจารณาในการตัดสินใจจัดตารางเวลา ได้แก่ ความต้องการทรัพยากรส่วนบุคคลและส่วนรวม ความต้องการด้านคุณภาพบริการ ข้อจำกัดด้านนโยบายฮาร์ดแวร์/ซอฟต์แวร์ เป็นต้น
- Controller Manager (kube-controller-manager):เรียกใช้ลูปควบคุมหลักที่มาพร้อมกับ Kubernetes ลูปควบคุมคือลูปที่ไม่สิ้นสุดซึ่งควบคุมสถานะของระบบ ตัวจัดการคอนโทรลเลอร์ประกอบด้วย Node Controller, Replication Controller, Endpoints Controller และ Service Account & Token Controllers
- Cloud Controller Manager (ผู้จัดการควบคุมระบบคลาวด์):เรียกใช้ตัวควบคุมที่โต้ตอบกับผู้ให้บริการคลาวด์พื้นฐาน Cloud Controller Manager อนุญาตให้โค้ดของผู้ให้บริการระบบคลาวด์และโค้ด Kubernetes พัฒนาแยกจากกัน
1.2 โหนด (Nodes)
โหนดคือผู้ปฏิบัติงานที่เรียกใช้แอปพลิเคชัน ทุกโหนดได้รับการจัดการโดย Control Plane โหนดอาจเป็น VM หรือเครื่องจริง ขึ้นอยู่กับคลัสเตอร์ แต่ละโหนดมีบริการที่จำเป็นในการเรียกใช้พ็อด นี่คือองค์ประกอบหลักของโหนด:
- Kubelet: kubelet ช่วยให้แน่ใจว่าคอนเทนเนอร์ทำงานในพ็อด ต้องใช้ชุดของ PodSpecs (วัตถุ YAML หรือ JSON ที่อธิบายถึงพ็อด) ซึ่งจัดเตรียมผ่านกลไกต่างๆ และตรวจสอบให้แน่ใจว่าคอนเทนเนอร์ที่อธิบายใน PodSpec เหล่านั้นทำงานอยู่และมีสุขภาพดี
- Kube-proxy: Kube-proxy รักษากฎเครือข่ายบนโหนด กฎเครือข่ายเหล่านี้อนุญาตให้มีการสื่อสารเครือข่ายไปยัง Pods ของคุณจากเซสชันเครือข่ายภายในหรือภายนอกคลัสเตอร์ของคุณ
- Container Runtime: Container Runtime เป็นซอฟต์แวร์ที่รับผิดชอบในการรันคอนเทนเนอร์ Kubernetes รองรับรันไทม์คอนเทนเนอร์หลายตัว: Docker, containerd, CRI-O และการใช้งาน Kubernetes CRI (Container Runtime Interface)
2. ทำความเข้าใจกับ Kubernetes Objects: Building Blocks of Applications
ใน Kubernetes สถานะของคลัสเตอร์ของคุณ รวมถึงแอปพลิเคชันที่กำลังทำงานอยู่ ซึ่งโหนดแอปพลิเคชันเหล่านั้นกำลังทำงานอยู่ และนโยบายเกี่ยวกับแอปพลิเคชันเหล่านั้น ล้วนแสดงโดย Kubernetes Objects ออบเจ็กต์เป็นเอนทิตีถาวรในระบบ Kubernetes Kubernetes ใช้เอนทิตีเหล่านี้เพื่อแสดงสถานะของคลัสเตอร์ของคุณ
มาดู Kubernetes Objects พื้นฐานที่จำเป็นในการสร้างแอปพลิเคชันกัน
พ็อด (Pods):พ็อดเป็นหน่วยที่เล็กที่สุดและเรียบง่ายที่สุดในโมเดลวัตถุ Kubernetes ที่คุณสร้างหรือปรับใช้ พ็อดแสดงถึงอินสแตนซ์เดียวของกระบวนการที่กำลังทำงานอยู่ในคลัสเตอร์ และสามารถมีหนึ่งคอนเทนเนอร์ขึ้นไป
ReplicaSets:จุดประสงค์ของ ReplicaSet คือเพื่อรักษาชุดพ็อดจำลองที่เสถียรให้ทำงานได้ตลอดเวลา ช่วยให้มั่นใจได้ว่าจำนวนพ็อดที่เหมือนกันตามจำนวนที่ระบุนั้นพร้อมทำงานอยู่เสมอ
การปรับใช้ (Deployments):การปรับใช้ให้การอัปเดตที่เปิดเผยสำหรับ Pods และ ReplicaSets คุณอธิบายสถานะที่ต้องการในการปรับใช้ และตัวควบคุมการปรับใช้เปลี่ยนสถานะจริงเป็นสถานะที่ต้องการในอัตราที่ควบคุม
บริการ (Services):บริการ Kubernetes เป็นวิธีการเชิงนามธรรมในการเปิดเผยแอปพลิเคชันที่ทำงานบนชุดของ Pods เป็นบริการเครือข่าย บริการให้จุดเข้าเดียวที่คงที่สำหรับการเข้าถึงชุดของพ็อด
Ingress:วัตถุ API ที่จัดการการเข้าถึงบริการภายนอกในคลัสเตอร์ โดยทั่วไปคือ HTTP Ingress สามารถให้บริการ load balancing, SSL termination และ name-based virtual hosting
ConfigMaps และ Secrets: ConfigMaps ช่วยให้คุณสามารถแยกองค์ประกอบการกำหนดค่าออกจากเนื้อหารูปภาพเพื่อให้แอปพลิเคชันในคอนเทนเนอร์พกพาได้ ในขณะที่ Secrets มีจุดประสงค์เพื่อเก็บข้อมูลที่ละเอียดอ่อน
3. Kubernetes API และการสื่อสาร (Communication)
Kubernetes API ทำหน้าที่เป็นรากฐานสำหรับสคีมาการกำหนดค่าแบบประกาศสำหรับระบบ เครื่องมือบรรทัดคำสั่ง kubectl สามารถใช้เพื่อสร้าง อัปเดต ลบ และรับออบเจกต์ API
Kubernetes ยังจัดเก็บสถานะที่ต่อเนื่อง (ปัจจุบันเป็น etcd) ในแง่ของทรัพยากร API เป็นการจัดเรียงฟิลด์ที่ซ้อนกันซึ่งทุกฟิลด์และฟิลด์ที่ซ้อนกันสามารถพบได้ผ่านเส้นทางที่ไม่ซ้ำกัน API ช่วยให้สามารถอัปเดตฟิลด์ต่างๆ ของอ็อบเจ็กต์เดียวกันพร้อมกันและจัดการได้ด้วยการควบคุมการทำงานพร้อมกันในแง่ดี
นอกจากนี้ ทุกคอมโพเนนต์ใน Kubernetes จะสื่อสารผ่าน API เพื่อดึงข้อมูลสถานะหรือรายงานข้อมูลใหม่ ตัวเลือกการออกแบบนี้ช่วยให้แน่ใจว่าส่วนประกอบทั้งหมดในคลัสเตอร์ Kubernetes ขยายได้และแข็งแกร่ง
การทำความเข้าใจสถาปัตยกรรม Kubernetes เป็นส่วนสำคัญของการเรียนรู้ Kubernetes เนื่องจากเป็นการวางรากฐานสำหรับการทำแอพและจัดการแอปพลิเคชันอย่างมีประสิทธิภาพ สถาปัตยกรรมหลักและโหนด พร้อมด้วยการทำความเข้าใจ Kubernetes Objects ที่สำคัญ จะให้ความรู้พื้นฐานที่จำเป็นสำหรับการเดินทาง Kubernetes ของคุณ
ขณะที่เราดำเนินการต่อในบทความต่อๆ ไป เราจะลงลึกในแต่ละองค์ประกอบเหล่านี้ ช่วยให้คุณเข้าใจว่าองค์ประกอบเหล่านี้เข้ากันได้อย่างไรเพื่อสร้างแพลตฟอร์มอันทรงพลังที่ Kubernetes เป็น เราจะครอบคลุมหัวข้อต่างๆ เช่น การติดตั้งและการกำหนดค่า ปริมาณงาน บริการและเครือข่าย และอื่นๆ ติดตามต่อไปในขณะที่เราช่วยให้คุณเชี่ยวชาญศิลปะในการทำแอพและจัดการแอปพลิเคชันด้วย Kubernetes