องค์ประกอบสำคัญของ Kubernetes มีอะไรบ้าง?

สวัสดีครับเพื่อน ๆ ชาว IT กลับมาพบกันอีกครั้งกับ Cloud HM Blog ข่าวสาร และบทความ IT น่าอ่านพร้อมบริการทุก ๆ ท่านนะครับ หัวข้อววันนี้ที่ผมจะมาแนะนำทุกท่านคือองค์ประกอบสำคัญของ Kubernetes ครับ ซึ่งเจ้า Kubernetes ผมได้เคยเขียน Blog ไปแล้วว่ามันคืออะไร ตามไปอ่านกันก่อนได้ที่ Blog นี้ Kubernetes คืออะไร? นะครับ ถ้าใครที่เคยใช้งาน Kubernetes มาบ้างแล้ว ก็จะบอกได้เลยว่า Kubernetes ไม่ได้เป็นแค่ Software เพียงอย่างเดียว เนื่องจากมีเครื่องมือ และ Service ให้เลือกใช้มากมาย โดยเราสามารถนำมาใช้งานรวมกัน ให้กลายเป็นการใช้งาน Kubernetes ที่สมบูรณ์แบบในแบบฉบับของเราเองได้ครับ
หลังจากที่เราเข้าใจว่า Kubernetes ใช้งานอย่างไรแล้ว ขั้นตอนต่อไปก็คือการเจาะลึกเข้าไปในส่วนของการออกแบบ หรือ Architecture จะทำให้เราเข้าใจจริง ๆ ว่า Kubernetes ทำงานอย่างไร โดยมองจากมุมมองของคนที่ออบแบบระบบ

จะเข้าใจโครงสร้างของ Kubernetes ว่ามีการออกแบบอย่างไร?

จะให้เข้าใจหลักการออกแบบที่ทำให้เกิด Kubernetes ขึ้นมาได้ น่าจะต้องใช้ตัวช่วยเอามาเปรียบเทียบเพื่อให้เห็นภาพได้ง่ายขึ้น
ผมขอยกตัวอย่างโดยการยก Linux มาแนะนำละกันนะครับ  OS ที่มีพื้นฐานมาจาก Linux จะต้องใช้ Resource ในการที่จะทำงานได้ สิ่งที่ต้องมีต่อมาก็คือ Linux Kernel และก็ Shell,  Library ต่าง ๆ , วิธีที่จะติดตั้ง Package, ระบบไฟล์ที่จะใช้, User และก็การเข้าถึง และอื่น ๆ ทั้งหมดนี้ก็คือการจับเอาส่วนประกอบต่าง ๆ มารวมกันทำให้เราได้ระบบ Linux ที่สามารถใช้งานได้จริงขึ้นมา
ถ้าเป็น Public Cloud การที่จะสร้าง Cloud Environment ขึ้นมาได้ สิ่งที่ต้องมีก็คือ IaaS 1 เครื่องหรือมากกว่านั้น, Management Console หรือ CLI เอาไปบริหารจัดการ, ระบบ IAM เอาไว้จัดการเข้าถึงของ User หรือ Program และก็ระบบอื่น ๆ อีกมากมายที่สามารถเลือกใช้งานได้บน Cloud นั้น ๆ
เรากลับมาที่จุดประสงค์ของเรากันต่อ ตะกี้ออกทะเลไปนิดหน่อยเพื่อเกริ่นให้เห็นภาพนะครับ ถึงแม้ว่าการออกแบบของ Kubernetes จะทำให้เราที่อาจจะพึ่งเรียนรู้วิธีการใช้งาน หรือการทำงานมองว่าค่อนข้างซับซ้อน และดูยุ่งยาก แต่จริง ๆ แล้ว Kubernetes ก็ไม่ได้มีความแตกต่างจากระบบอื่น ๆ ในด้านสถาปัตยกรรมหรอกครับ ระบบที่ซับซ้อนโดยส่วนใหญ่จะสามารถแบ่งย่อยออกมาเป็นส่วน ๆ ให้เห็นภาพได้ครับ

องค์ประกอบหลักของ Kubernetes มีอะไรบ้าง?

โครงสร้างของ Kubernetes จะค่อนข้างแปลกไม่เหมือนใคร บางองค์ประกอบอย่างเช่น Controller Manager หรืออาจะเป็น Etcd ที่ก็มีไม่เหมือนระบบอื่น ๆ เรามาดูกันดีกว่าครับ ว่ามีอะไรบ้างที่ดูแล้วคือองค์ประกอบหลักของ Kubernetes

API Server

เรียกได้ว่าเป็นหัวใจหลักไม่ว่าจะเป็น Kubernetes Cluster ไหน ๆ ก็ต้องใช้ API Server เจ้า API server มีไว้เพื่อรับ, ตรวจสอบ และตอบกลับ ทุก ๆ คำสั่งที่มาก User หรือ Service ที่เกิดขึ้นภายใน Cluster
คำสั่งอะไรบ้าง เช่น แจ้งให้สร้าง Pod (เป็น Resource ชนิดหนึ่งเอา Applicationไปติดตั้งใส่ มีอยู่ใน Kubernetes), ดูข้อมูลของ Node แต่ละ Node, การเพิ่ม Service ใหม่ ๆ หรือเกือบทุกคำสั่งที่ใช้คน หรือ Application ในการดำเนินการภายใน Cluster

Kubernetes Scheduler

Kubernetes Scheduler มีหน้าที่รับผิดชอบในการตัดสินใจว่า Pod ควรจะไปอยู่ที่ Node ไหนภายใน Cluster วิธีการตัดสินใจก็คือ การประเมิน State ของแต่ละ Node ว่าสามารถรองรับ Workload ของ Pod ได้หรือไม่ โดยจะจัดการให้ได้ประสิทธิภาพที่ดีที่สุดโดยมองจากประสิทธิการทำงานและความพร้อมใช้โดยรวมของ Workload ทั้งหมด

Controller Manager

จากที่ได้เกริ่นไปด้านบนว่า Controller Manager หรือตัวที่ทำหน้าที่ควบคุมจะแตกต่างจากองค์ประกอบอื่น ๆ  หน้าที่ของมันคือทำตามคำสั่งที่ Admin เป็นคนกำหนดในการบริหาร และจัดการ Cluster
เหตุผลที่ทำไม Kubernetes ถึงเอา Controller Manager มาใส่ในโครงสร้างก็เพราะว่ากุญแจหลักในการออกแบบ Kubernetes คือต้องการให้ Admin สามารถประกาศค่าของ Configuration ได้โดยการใช้ Code ที่ทำให้สามารถสั่งให้จัดการ Configuration ได้แบบอัตโนมัติ ด้วยการ Configure Kubernetes Resource ให้เหมาะสมกับ Configure ที่ Admin ตั้งค่าไว้

Etcd

Kubernetes ไม่ได้มีระบบ File System เหมือนกับ Server หรือระบบอื่น ๆ ทั่ว ๆ ไป (แต่ว่าก็สามารถเพิ่มระบบ Storage ได้ โดยการเชื่อมต่อกับ Kubernetes โดยใช้ Storage Volume)
ถึงแม้ว่าจะไม่มีระบบ File System แต่ Kubernetes ก็ต้องใช้พื้นที่ในการเก็บข้อมูลที่จำเป็นในการบริหารและจัดการ Etcd คือ พื้นที่จัดเก็บที่มีขนาดไม่ใหญ่ เป็นชนิด Key-value (ประมาณว่าเป็น Database แบบ NoSQL ก็ได้) เพื่อมาเติมเต็มในส่วนที่ Kubernetes ขาดไปในเรื่องของ File System
Etcd ก็คือ สิ่งที่ Kubernetes ใช้เก็บข้อมูล Configuration ที่มีความสำคัญที่ใช้ในการบริหารจัดการ Cluster นั่นเองครับ

Node

เรากล่าวถึงกันไปเยอะแล้วนะครับ Node คืออะไร? มองง่าย ๆ ก็คือ Server ที่อยู่ภายใน Cluster โดย Kubernetes Node come จะมีอยู่ 2 รูปแบบ คือ
Master Node เป็นที่อยู่ของ Kubernetes API server, Scheduler, Etcd และ Service เกี่ยวกับ Management Master Node ควรจะมีอย่างน้อย 1 ตัว ในแต่ละ Cluster แต่คุณสามารถสร้างมากกว่า 1 ตัว ก็ได้ เพื่อรองรับในกรณีที่ Master Node ที่มีอยู่ตัวเดียว Fail จะได้ไม่กระทบการทำงานของ Cluster นั่นเอง
Worker Node เป็นที่อยูี่ของ Pod ถ้ามี Worker Node เยอะ ก็จะทำให้สามารถใส่ Application ลงไปใน Cluster ได้เยอะ และหลากหลายในทางเทคนิคแล้ว คุณสามารถ Set up Node เดียวก็ได้ภายใน Cluster แล้วทำ Node ให้เป็นทั้ง Master Node และ Worker Node การที่จะทำแบบนี้ควรทำแค่ตอนทดสอบการใช้งานของ Kubernetes บน Laptop หรือ Desktop ของคุณนะครับ เพราะถ้าจะใช้งานในระดับ Production แค่ Node เดียวไม่น่าจะพอใช้งานครับ

Pod

เราแนะนำกันไปเยอะแล้ว มาต่อกันที่ Pod นะครับ Pod เป็นส่วนของ Kubernetes ที่ใช้สำหรับติดตั้ง Application ใส่เข้าไป
โดย Pod อาจจะเป็น Container เพียง 1 ตัว หรือ อาจจะมี Container หลาย ๆ ตัว ที่ Run Application เดียวกันก็ได้ จริง ๆ ในทางเทคนิคแล้ว เราสามารถ Run VM แทน Container ใน Pod ได้แต่ไม่ค่อยมีใครเค้าทำกันครับ

Runtime

Runtime เป็นส่วนหนึ่งของ Software ที่ใช้ในการสั่งการ Container จะ Run อยู่ในแต่ละ Worker Node
ทุกวันนี้ Container Runtime มีอยู่หลากหลายรูปแบบมากไม่ว่าจะเป็น CRI-O และ containerd ซึ่ง Kubernetes รองรับการใช้งานอยู่แล้ว หมายความว่าอย่างไร? ก็หมายความว่า คุณสามารถใช้ Runtime โดยไม่ต้องมาตั้งค่าอะไรพิเศษ ๆ เพิ่มเติม Runtime ตัวไหนที่ Kubernetes ไม่ได้รองรับแบบ Default เราสามารถใช้งานได้โดยการ Deploy ผ่าน Shim ซึ่งเป็นเหมือน Service ที่เป็นคนกลางช่วยสื่อสารระหว่าง Runtime ที่ Kubernetes ไม่รองรับกับ Kubernetes ครับ

ส่วนอื่น ๆ ที่ไม่ใช่องค์ประกอบหลักของ Kubernetes แต่จำเป็น

หัวข้อที่ยกมาทางด้านบนจะรวมกับ Service หรือส่วนที่เป็นหัวใจหลักของ Kubernetes ครับ แต่ยังมีเครื่องมืออื่น ๆ และ Service อื่น ๆ ที่ Deploy คู่กับ Kubernetes แต่ไม่ได้อยู่ภายใน Kubernetes
เช่น ถ้าคุณอยากจะมอนิเตอร์ก็ต้องมีเครื่องมือเข้ามาช่วยบริหารจัดการ Cluster หรือ ถ้าอยากจะจัดการระบบ Network ของ Kubernetes หรือ Storage Plugin ที่จะ Integrate กับ Kubernetes ก็ต้องใช้ Service จาก Third-Partyดังนั้น การที่คุณคิดว่าโครงสร้างของ Kubernetes ซับซ้อน ถ้าได้ลองลงมือสร้าง Kubernetes ให้สามารถเป็น Production พร้อมใช้ได้ก็ยิ่งซับซ้อนกว่ามากครับ แต่ยิ่งซับซ้อนมาก แปลว่าเราเลือกเครื่องมือมาใช้ประโยชน์ได้ตามความต้องการของเรามากนั่นเองครับ

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

— Cloud HM