สวัสดีครับเพื่อน ๆ ชาว IT กลับมากันอีกครั้งกับ Cloud HM Blog ข่าวสาร เรื่องราว IT ใหม่ ๆ มา Update ประจำทุกเดือน วันนี้เราจะมาแนะนำตัวช่วยในการบริหารจัดการเจ้า Container กันครับ ให้สะดวกมากกว่าเดิมกันครับ นั่นก็คือ Container Orchestration นั่นเอง Orchestration ถ้าแปลตรงตัว คือการจัดการเรื่องการประสานเสียงโดย Orchestra (คนที่ยืนแกว่งไม้ไปมาตรงกลาง) แต่ตอนนี้เราแนะนำในเชิงของ Software ถ้าให้แปลก็ประมาณว่า การที่มีตัวช่วยในการบริหารจัดการในเรื่องต่าง ๆ เช่น การ Configure แบบอัตโนมัติครับ เกริ่นในเบื้องต้นก่อนนะครับว่าจริง ๆ แล้วเราไม่ต้องจำเป็นต้องใช้งาน Orchestration ในการ Run Container ก็ได้ แต่เราใช้ Orchestration เพื่อที่จะ Run Container ได้อย่างมีประสิทธิภาพ และได้เปรียบในเรื่องของการ Scale ครับ
ฉะนั้น สิ่งที่ควรทำเป็นอันดับแรกหลังจากที่เรียนรู้เรื่องพื้นฐานของ Container แล้วก็คือ เรียนรู้เรื่องของ Container Orchestration หลังจากนั้นครับ โดยแนะนำในดูว่า Container Orchestration มีหลักการทำงานอย่างไร แล้วจะต้องทำอย่างไรบ้างถ้าจะเริ่มใช้งานเครื่องมือที่ใช้จัดการเรื่องของ Orchestration
Container Orchestration คืออะไร?
Container Orchestration เป็นการเอา Automated tool มาใช้บริหารจัดการ Task ที่ต้องใช้ Run ด้วย Containerized Application
Task ที่ว่ารวมไปถึงกระบวนการ เช่น การ Deploy Container, การเพิ่ม/ลด Instance ของ Container เนื่องจากมีการเปลี่ยนแปลง Load, Restart Container แล้ว Failed และการย้าย Container จาก Server นึงไปอีก Server นึงในกรณีที่ต้องการจะเกลี่ย Load ข้าม Cluster
ทำไม Container Orchestration จึงมีความสำคัญ?
จริง ๆ แล้วคุณจะบริหารจัดการ Task งานแบบ Manual ก็ได้ เครื่องมือในตลาด เช่น Docker CLI ก็มีคำสั่งเป็นแบบ Command ให้คุณใช้ Start, Stop หรือจะจัดการเรื่องอื่น ๆ ของ Container ได้ด้วยมือของคุณเอง
แต่ถ้าจะใช้วิธี Manual ในการจัดการ Container ก็ดูแล้วน่าจะเหมาะกับ Environment ที่มี Container อยู่จำนวนน้อยเครื่องมากกว่านะครับ ทีนี้การบริหารจัดการ Container จะยากขึ้นถ้ามีการกระจาย Container ไปหลาย ๆ Server ลองคิดในกรณีที่คุณต้อง Log In เข้าไปบริหารจัดการ Container ใน Server ที่อยู่แยกกัน น่าจะยุ่งยากน่าดูนะครับ
จึงเป็นเหตุผลที่ทำให้ Container Orchestration มีความสำคัญ เนื่องจากจะทำให้สามารถ Scale Container ได้ง่าย โดยมีกระบวนการที่เป็นแบบอัตโนมัติ เนื่องจากถ้าจะใช้การ Scale ด้วยมืออาจจะต้องใช้ระยะเวลานานกว่าในการดำเนินการ การใช้งาน Container Orchestration ทำให้สามารถที่จะบริหารจัดการ Container ได้เป็นหลักร้อย – พัน เครื่องได้เลย
เครื่องมือในตลาดที่ใช้ทำ Container Orchestration
เครื่องมือในการทำเรื่องของ Container Orchestration มีให้เลือกอยู่พอสมควร ที่คนส่วนใหญ่นิยมใช้มากที่สุดหนีไม่พ้น Kubernetes ที่มีส่วนแบ่งทางการตลาดอยู่ที่ 77% ในปี 2019 ถ้ารวม OpenShift ไปด้วยก็เรียกได้ว่าแทบจะเหมาไปทั้งตลาดแล้วที่ 90% Kubernetes เป็นที่นิยมก็เพราะว่ามีความยืดหยุ่นสูง และเป็น Open Source ทำให้ง่ายต่อการปรับใช้ในหลาย ๆ งาน และก็ยังประโยชน์จากการพัฒนาจากหลาย ๆ คนที่ใช้งาน ทำให้มีเครื่องมือ Add-on ที่สามารถเลือกมาใช้ในการบริหารจัดการ Kubernetes ให้ทำงานได้เหมาะสมอย่างที่เราต้องการได้
ในทางกลับกัน Kubernetes ก็ค่อนข้างมีความซับซ้อนในการตั้งค่า ถ้า Environment เรา Scale ไม่ได้ใหญ่มาก แต่จำเป็นต้องใช้ Container Orchestration คุณอาจจะไปเลือกใช้เครื่องมืออย่างเช่น Docker Swarm ซึ่งง่ายกว่าในการ Configure หรืออาจจะไปใช้ ECS ของ Amazon Web Services ซึ่ง Configure เล็กน้อยกว่าเจ้าอื่น ๆ ก็สามารถบริหารจัดการเรื่องของ Container Orchestration ได้เหมือนกัน
ทางเลือกอื่นมีหรือไม่? ถ้าคุณต้องการจะใช้ Kubernetes แต่กังวลว่ามันจะซับซ้อนเกินไป ไม่อยากมาเรียนรู้เพิ่ม ก็สามารถบริการที่เป็นแบบ Managed Kubernetes Service เช่น AWS EKS, Azure AKS หรือว่า Platform9 ก็ได้ บริการพวกนี้ทำให้การ Configure และบริหาร Kubernetes เป็นเรื่องที่ง่ายขึ้น เช่น การ Provisioning Server ที่ต้อง Set up Kubernetes Cluster และการเก็บค่าของ Metric ที่เอาไว้ Support การจัดการเรื่องของประสิทธิภาพของ Kubernetes ถึงแม้ว่าจะง่ายขึ้น ก็ยังต้องอาศัยความพยายามในการใช้งานอยู่ดี แต่ก็ยังง่ายกว่าตอน Set up และ บริหารจัดการ Kubernetes ด้วยตัวเองครับ
สิ่งที่ Container Orchestration ไม่ได้ทำให้มีอะไรบ้าง?
จากที่เราได้รู้กันไปแล้วว่าการใช้ Container Orchestration ทำให้ง่ายต่อการ Deploy Container แบบ Scale เยอะ ๆ แต่เราต้องเข้าใจไว้ด้วยว่า Container Orchestrators ไม่ได้บริหารจัดการครอบคลุมได้ในทุก ๆ Task ที่เกี่ยวกับข้องกับ Container นั้น ๆ ถึงแม้ว่า Orchestrator จะสามารถ Restart Container ที่ Failed ได้แบบอัตโนมัติ แต่มันกฌไม่ได้ Monitor ว่า Container ตัวนั้นมีปัญหาในเรื่องของประสิทธิภาพการทำงาน หรือมี Alert แจ้งเตือนว่า Container ไม่สามารถ Start ได้ ปัญหาลักษณะนี้คุณต้องแก้ไขโดยการ หาเครื่องมือมาใช้สำหรับการ Monitor Container ครับอีกข้อนึงก็คือ Container Orchestration does มีการจัดการเรื่องของความปลอดภัยแค่แบบพื้นฐานทั่ว ๆ ไป ไปจนถึงไม่มีเลย อย่าง Kubernetes จะค่อนข้างดีหน่อยที่มีเครื่องมือในการจัดการในเรื่องของความปลอดภัยมาให้ เช่น Access-control Framework และความสามารถในการจัดการ Network เป็นแบบ Isolation ได้ ซึ่งก็ไม่ได้มีความปลอดภัยที่เพียงพอ ฉะนั้นก็ต้องหาเครื่องมือมาเสริมในเรื่องของความปลอดภัย เช่น Falco ที่เป็น Open Source ที่ออกแบบมาใช้จัดการเรื่องของความปลอดภัยสำหรับ Kubernetes โดยเฉพาะ
Container Orchestrators ก็ไม่ได้ Set up Storage หรือว่า Network Resource ให้คุณนะครับ แต่ส่วนใหญ่จะสามารถ Integrate กับ External Service ที่ให้บริการด้าน Resource ได้ อย่าง Kubernetes ก็ไม่ได้มี Built-in Storage และ Network มาให้
เรื่องสุดท้าย จำไว้เลยนะครับว่า Container Orchestrators ไม่ได้ช่วยคุณบริหารจัดการ Container Image ซึ่งเปรียบเสมือนพิมพ์เขียวที่ใช้ในการ Run Container การที่จะบริหารจัดการได้ต้องใช้เครื่องมือที่เรียกว่า Container Registry ครับ
จะเริ่มใช้งาน Container Orchestration อย่างไรดี?
มาถึงหัวข้อสุดท้ายแล้ว หลาย ๆ ท่านน่าจะเข้าใจแล้วว่า Container Orchestration มีการหลักการทำงานประมาณไหน ซึ่งเครื่องมือที่เราจะเลือกใช้ก็มีอยู่มากมาย คุณอาจจะเริ่มโดยการนำ Container Orchestration ไปใช้กับ Software Stack ของคุณก็ได้
วิธีที่ง่ายที่สุดในการเริ่มก็คือ การ Set up Container Environment จะทำไว้บน VM หรือ PC ก็ได้ หลังจากนั้นให้ติดตั้ง Orchestrator ไว้ ถ้าคุณใช้ Docker ในการบริหารจัดการ Container คุณจะมี Docker Swarm พร้อมใช้อยู่แล้วโดย Default แต่ถ้าอยากลองใช้ Kubernetes แนะนำใช้ตัวที่มี Size ไม่ใหญ่มาก เช่น K3s ซึ่งออกแบบมาให้ใช้งานได้ดีกับ Computer เครื่องเดียว และก็ติดตั้งง่าย ติดตั้งได้กับ Linux หลาย ๆ ตัว โดยใช้ Command ไม่เยอะ
ถ้าจะลองทดสอบตัว ECS ของ AWS ก็จะต้องสมัคร AWS Account ก่อน โดยการทดสอบ Service ไม่น่าจะแพงมาก ตรงนี้ก็คุม Cost ได้อยู่ครับ
เสร็จแล้วลองเทียบดูว่า Test Environment ของแต่ละ Orchestrator มีความต่างกันอย่างไร อันไหนเหมาะกับการใช้งานของเรา Cost ดีกว่า อาจจะทดสอบกับ Plugin ร่วมด้วย และก็ถ้าต้องการจะทดสอบเรื่องของ Scale Up Cluster ก็ทดลองโดยการเพิ่ม VM หรือ PC ให้มากกว่า 1 เครื่อง ถ้าทุกอย่างโอเคหมดแล้วก็ทำเป็น Production ได้เลยครับ
เป็นอย่างไรกันบ้างสำหรับเรื่องของ Container Orchestration หวังว่าทุกคนจะนำเอาไปปรับใช้ให้เกิดประโยชน์นะครับ หากมีข้อมูลผิดพลาด หรือต้องการเสริมความรู้เพิ่มเติม สามารถพิมพ์ข้อความในช่องแสดงความคิดเห็นทางด้านล่างเข้ามาได้เลยนะครับ สำหรับท่านที่สนใจบริการของ Cloud HM สามารถติดต่อเราได้ผ่านช่องทางนี้นะครับ
ขอบคุณครับ
— Cloud HM