Kubernetes คือ ตอนที่ 1 : สถาปัตยกรรม (Architecture)

  1. ทำความเข้าใจกับสถาปัตยกรรม Kubernetes
    1.1 ระนาบควบคุม (Control Plane)
    1.2 โหนด (Nodes)
  2. ทำความเข้าใจกับ Kubernetes Objects: Building Blocks of Applications
  3. Kubernetes API และการสื่อสาร (Communication)

ในการเดินทางผ่าน Kubernetes เราได้แนะนำให้คุณทราบว่า Kubernetes คืออะไรและเหตุใดจึงสำคัญในการทำแอพ ตอนนี้ ถึงเวลาเจาะลึกความซับซ้อนของสถาปัตยกรรม ซึ่งเป็นรากฐานที่ช่วยให้ Kubernetes เป็นเครื่องมือที่ทรงพลังในการจัดการคอนเทนเนอร์ นี่จะเป็นก้าวสำคัญสู่การทำแอพที่มีประสิทธิภาพ ปรับขนาดได้ และทนทาน เพื่อไม่ให้เป็นการเสียเวลา เรามาเริ่มกันที่ Kubernetes Architecture

1. ทำความเข้าใจกับสถาปัตยกรรม Kubernetes

เพื่อทำความเข้าใจวิธีที่ Kubernetes ช่วยให้สามารถทำแอพและจัดการแอปพลิเคชันได้อย่างมีประสิทธิภาพ สิ่งสำคัญคือต้องเข้าใจสถาปัตยกรรมของมัน Kubernetes เป็นไปตามสถาปัตยกรรมไคลเอ็นต์เซิร์ฟเวอร์ มันแบ่งออกเป็นสองส่วนหลัก: Control Plane (หรือ Master) และโหนด

1.1 ระนาบควบคุม (Control Plane)

ระนาบควบคุมมีหน้าที่จัดการคลัสเตอร์ ทำการตัดสินใจทั่วโลกเกี่ยวกับคลัสเตอร์ (เช่น การตั้งเวลา) และตรวจจับและตอบสนองต่อเหตุการณ์คลัสเตอร์ (เช่น การเริ่มต้นพ็อดใหม่เมื่อฟิลด์ ‘ตัวจำลอง’ ของการปรับใช้ไม่เป็นที่พอใจ) Control Plane ประกอบด้วยชุดของกระบวนการที่ทำงานบนเครื่องเดียว (หรือหลายเครื่อง) นี่คือองค์ประกอบหลักของ Control Plane:

  1. เซิร์ฟเวอร์ API (kube-apiserver):เซิร์ฟเวอร์ API เป็นเกตเวย์ไปยัง Kubernetes Control Plane มันเปิดเผย Kubernetes API ซึ่งผู้ใช้ภายนอกใช้เพื่อดำเนินการต่างๆ บนคลัสเตอร์ Kubernetes นอกจากนี้ยังเป็นเอนทิตีการจัดการส่วนกลางที่รับคำขอ REST ทั้งหมดสำหรับการแก้ไข ซึ่งทำหน้าที่เป็นส่วนต่อประสานส่วนหน้าสำหรับ Control Plane
  2. พื้นที่เก็บข้อมูล etcd: Kubernetes ใช้ etcd เป็นที่เก็บค่าคีย์ที่สอดคล้องและพร้อมใช้งานสูงเพื่อเก็บข้อมูลคลัสเตอร์ทั้งหมด เช่น รายละเอียดการกำหนดค่า ข้อกำหนดสถานะ และข้อมูลเมตา การเปลี่ยนแปลงใด ๆ ในสถานะของคลัสเตอร์จะถูกเก็บไว้ใน etcd
  3. ตัวจัดกำหนดการ (kube-scheduler):ตัวกำหนดตารางเวลาจะเฝ้าดูพ็อดที่สร้างขึ้นใหม่ซึ่งไม่ได้กำหนดโหนดไว้ สำหรับพ็อดใหม่แต่ละพ็อด ตัวกำหนดตารางเวลาจะค้นหาโหนดที่เหมาะสมที่สุดสำหรับพ็อดที่จะทำงานและกำหนดพ็อดให้กับโหนดนั้น ปัจจัยที่นำมาพิจารณาในการตัดสินใจจัดตารางเวลา ได้แก่ ความต้องการทรัพยากรส่วนบุคคลและส่วนรวม ความต้องการด้านคุณภาพบริการ ข้อจำกัดด้านนโยบายฮาร์ดแวร์/ซอฟต์แวร์ เป็นต้น
  4. Controller Manager (kube-controller-manager):เรียกใช้ลูปควบคุมหลักที่มาพร้อมกับ Kubernetes ลูปควบคุมคือลูปที่ไม่สิ้นสุดซึ่งควบคุมสถานะของระบบ ตัวจัดการคอนโทรลเลอร์ประกอบด้วย Node Controller, Replication Controller, Endpoints Controller และ Service Account & Token Controllers
  5. Cloud Controller Manager (ผู้จัดการควบคุมระบบคลาวด์):เรียกใช้ตัวควบคุมที่โต้ตอบกับผู้ให้บริการคลาวด์พื้นฐาน Cloud Controller Manager อนุญาตให้โค้ดของผู้ให้บริการระบบคลาวด์และโค้ด Kubernetes พัฒนาแยกจากกัน

1.2 โหนด (Nodes)

โหนดคือผู้ปฏิบัติงานที่เรียกใช้แอปพลิเคชัน ทุกโหนดได้รับการจัดการโดย Control Plane โหนดอาจเป็น VM หรือเครื่องจริง ขึ้นอยู่กับคลัสเตอร์ แต่ละโหนดมีบริการที่จำเป็นในการเรียกใช้พ็อด นี่คือองค์ประกอบหลักของโหนด:

  1. Kubelet: kubelet ช่วยให้แน่ใจว่าคอนเทนเนอร์ทำงานในพ็อด ต้องใช้ชุดของ PodSpecs (วัตถุ YAML หรือ JSON ที่อธิบายถึงพ็อด) ซึ่งจัดเตรียมผ่านกลไกต่างๆ และตรวจสอบให้แน่ใจว่าคอนเทนเนอร์ที่อธิบายใน PodSpec เหล่านั้นทำงานอยู่และมีสุขภาพดี
  2. Kube-proxy: Kube-proxy รักษากฎเครือข่ายบนโหนด กฎเครือข่ายเหล่านี้อนุญาตให้มีการสื่อสารเครือข่ายไปยัง Pods ของคุณจากเซสชันเครือข่ายภายในหรือภายนอกคลัสเตอร์ของคุณ
  3. 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


Kubernetes คืออะไร

Kubernetes คือ ตอนที่ 2 : การติดตั้งและการกำหนดค่า Kubernetes