มารู้จัก Kubernetes บน AWS รวมถึง Feature ต่าง ๆ

Credit: Codersociety.com

ทักทายและเกริ่นนำ

สวัสดีครับผู้อ่านทุกท่านในบทความนี้ผู้เขียนจะพาผู้อ่านทุกท่านมารู้จักและใช้งาน Kubernetes บน AWS กันครับ สำหรับ Kubernetes (เขียนสั้น ๆ ว่า K8s) ซึ่งเป็นซอฟต์แวร์ประเภท Container Orchestration (คำเดียวกับคำว่า “วงออเคสตร้า” หรือวงดนตรีประสานเสียงนั่นแหละครับ) ถ้าให้อธิบายแบบสั้น ๆ มันคือซอฟต์แวร์ที่ใช้จัดการและควบคุม “คอนเทนเนอร์” ของเรานั่นเอง

ฟีเจอร์ของ Kubernetes บน AWS

Kubernetes นั้นเป็นเฟรมเวิร์กแบบ Open-source ที่ช่วยในการจัดการ container (คอนเทนเนอร์) อย่าง Linux containers และ Docker เป็นต้น ซึ่งพูดอย่างง่าย ๆ ก็คือจะช่วยเราในการลดกระบวนการจัดสรรทรัพยากรของการคำนวณหรือของเครื่อง EC2 ของเราให้เพิ่มหรือลดได้อย่างอัตโนมัติตามปริมาณงานและการบริการที่กำหนดไว้ นอกจากนี้ยังช่วยให้ Application ที่รันอยู่บน container นั้นทำงานได้อย่างต่อเนื่องอีกด้วย 🙂

สำหรับ Kubernetes นั้นจะประกอบไปด้วยสองส่วนหลัก ๆ ด้วยกันคือ

  • Kubernetes Master หน้าที่หลัก ๆ คือเป็นส่วนที่คอยควบคุมและดูแล Kubernetes node ต่าง ๆ เช่น คอยตรวจสอบว่ามี node ตัวไหนพังหรือเปล่า หรือต้องการย้าย container นี้ไปรันบนเครื่องอื่นหรือเปล่า โดยที่ตัว Kubernetes master นั้นไม่สามารถรัน container ต่าง ๆ ได้ โดยการสั่งงานจะ Kubernetes master นั้นต้องสั่งผ่าน API เท่านั้น โดยสามารถสั่งได้ผ่าน Kubernetes CLI หรือ GUI Dashboard ของ AWS เอง 
  • Kubernetes Node หน้าที่หลัก ๆ คือเป็นส่วนที่จะเป็นที่ไว้ให้ container หรือ Service ต่าง ๆ รันอยู่ทำงาน โดยที่ Node เหล่านี้จะถูกควบคุมด้วย Kubernetes master อีกทีครับ 

ถ้าหากผู้อ่านต้องการเจาะลึกรายละเอียดของ Kubernetes ก็สามารถอ่านได้ที่บทความของ Cloud HM เลยครับ 🙂 https://blog.cloudhm.co.th/what-is-kubernetes/

การใช้งาน AWS EKS ในระบบคลาวด์

จริง ๆ แล้วถ้าหากใครเป็นแฟนพันธุ์แท้ของ AWS มาอย่างยาวนานจะพบว่าบริการ Kubernetes บน AWS นั้นเริ่มให้บริการตั้งแต่ปี 2018 แล้ว โดย ณ ช่วงเวลานั้น AWS ได้เปิดบริการ Elastic Container Service for Kubernetes หรือตัวย่อ EKS ซึ่งเป็นการนำ Kubernetes มารันบนคลาวด์ AWS และเชื่อมกับบริการตัวอื่น ๆ ของ AWS โดยจุดขายของ EKS ก็คือการรัน Kubernetes ข้าม AWS Availability Zones เพื่อป้องกันโซนใดโซนหนึ่งล่ม และมีระบบจัดการให้อัตโนมัติ หมายความว่าผู้ใช้งานอย่างเช่นพวกเรานั้นไม่ต้องลงมายุ่งกับเรื่องการจัดการตั้งค่าต่าง ๆ ด้วยตัวเอง แล้วก็การเข้ารหัสข้อมูลทั้งหมดนั้นเป็นค่าแบบเริ่มต้น แล้วก็ระบบรัน Kubernetes รุ่นมาตรฐานให้เราด้วย ซึ่งเรามั่นใจได้เลยว่าแอพของเราสามารถรันบน EKS ได้อย่างไม่มีปัญหาครับ

นอกจากนี้แล้ว EKS ยังสามารถเชื่อมต่อกับบริการหลายตัวของ AWS ได้ ซึ่งถ้าใครใช้งานบริการเหล่านี้อยู่แล้วก็ช่วยให้จัดการง่ายขึ้นด้วย ตัวอย่างเช่น AWS Network Load Balancer, AWS Application Load Balancer, Amazon Elastic Block Store (EBS), และ Auto Scaling

ตัวอย่างการใช้งาน

ตัวอย่างที่เราจะมาดูกันก็คือการสร้างรูปแบบ Workflow ของ Machine Learning (ML)

โดยเรียกใช้งานการฝึกสอนโมเดล (Model training) แบบกระจายหรือ Deitributed อย่างมีประสิทธิภาพโดยใช้ Compute Instance ล่าสุดที่ขับเคลื่อนด้วย GPU ของ Amazon Elastic Compute Cloud (EC2) รวมถึง Inferentia และติดตั้งใช้งานการฝึกฝนโมเดลและใช้ Kubeflow

ภาพแสดง Workflow ของ Deep Learning Container ที่มีการใช้ AWS EKS ด้วย

Deep Learning Container คืออะไร?

Deep Learning Containers คืออิมเมจ Docker ที่ติดตั้งไว้ล่วงหน้าและผ่านการทดสอบกับ ML framework ยอดนิยมทั่วไป เช่น TensorFlow หรือ PyTorch ที่เป็นเวอร์ชันล่าสุด โดย Deep Learning Containers ช่วยให้เรานำ Environment หรือการตั้งค่าต่าง ๆ ของเราที่ใช้ในการฝึกสอนโมเดล ML แบบกำหนดเองไปใช้งานต่อได้อย่างรวดเร็วโดยไม่ต้องสร้างและปรับปรุงประสิทธิภาพ Environment ของเราตั้งแต่ขั้นตอนแรก ซึ่งจะเห็นได้ว่าสะดวกมาก ๆ เลยใช่ไหมครับ

สำหรับ Feature เด่นของตัวอย่างนี้ มีดังนี้

  • ปรับใช้สภาพแวดล้อมแบบ Deep Learning ในระยะเวลาเพียงไม่กี่นาที โดยใช้ Docker Image ที่ทดสอบและบรรจุไว้แล้วล่วงหน้า
  • ปรับปรุงประสิทธิภาพโดยอัตโนมัติด้วยการอบรมการใช้โมเดลที่ปรับให้เหมาะสมสำหรับเฟรมเวิร์กยอดนิยม เช่น TensorFlow, PyTorch และ Apache MXNet ครับ
  • เพิ่ม ML อย่างรวดเร็วเป็นแบบ Microservice ให้กับแอปพลิเคชันของเราที่กำลังทำงานบน Amazon EKS และ EC2
  • สร้าง Workflow ML แบบกำหนดเองสำหรับการฝึกฝน การตรวจสอบ และการนำไปใช้จริงผ่านการผสานรวมกับ Amazon SageMaker, EKS และ ECS ซึ่งล้วนแล้วแต่เป็นพระเอกของเราทั้งนั้น 🙂
ภาพแสดงตัวอย่างการ Provision ผ่าน AWS Kubernetes หรือ EKS
Credit: AWS

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

— Cloud HM