Deploy App ง่าย ๆ ได้ผลลัพธ์อย่างมือโปร ด้วย 15 เครื่องมือที่ใช้ร่วมกับ Kubernetes

15-tools-for-k8s | Skooldio Blog - Deploy App ง่าย ๆ ได้ผลลัพธ์อย่างมือโปร ด้วย 15 เครื่องมือที่ใช้ร่วมกับ Kubernetes

ในปัจจุบัน องค์กรทั่วโลกเริ่มหันมาใช้การพัฒนาระบบแบบ Microservices มากขึ้น ซึ่งเครื่องมือ deploy application ที่ได้รับความนิยมมากในปัจจุบันก็คือ Kubernetes

Kubernetes (K8s) เป็นเครื่องมือ Open Source จาก Google ที่จะช่วยจัดการ Container ให้มีประสิทธิภาพสูงสุด ถ้าหากนึกภาพไม่ออก ให้ลองนึกถึงวง Orchestra ขนาดใหญ่ที่มี Conductor เป็นผู้ควบคุมวง โดย Container ก็เปรียบเสมือนนักดนตรีในวงที่มี Kubernetes เป็น Conductor นั่นเอง (Container Orchestration) ซึ่งตัว Kubernetes นี้เองที่จะช่วยให้เราสามารถ deploy application สามารถ scale application อีกทั้งสามารถบริหารจัดการทรัพยากรได้อย่างอัตโนมัติ และที่สำคัญที่สุดคือสามารถทำให้ Application ของเราทำงานได้ตลอดเวลา

พบกับ 15 เครื่องมือที่จะช่วยเพิ่มประสิทธิภาพในการใช้งาน Kubernetes ของคุณ ทำให้คุณสามารถดึงศักยภาพของ Kubernetes ได้สูงสุด โดยจะแบ่งออกเป็น 5 ประเภท ได้แก่ Monitoring, Security, Deployment, Command-Line Interface (CLI) และ Serverless Tool

Monitoring Tools

ในขณะที่กำลังรับมือกับอุปสรรคเดิม ๆ ในการ run microservices ปัญหาใหม่ ๆ ก็เข้ามาอยู่เรื่อย ๆ ซึ่งนักพัฒนาหลายคนยกให้การ monitor เป็นปัญหาที่ใหญ่มาก ๆ ในการใช้ Kubernetes ซึ่งในปัจจุบันก็มีเครื่องมือหลายตัวที่ช่วยในการ monitor ในหลายมุมไม่ว่าจะเป็น log, metric ฯลฯ บางเครื่องมือก็เก็บข้อมูล บางตัวก็เป็นการ monitor ภาพรวมของระบบ ซึ่งเราจะมาแนะนำ 3 เครื่องมือสำหรับ monitor ดังนี้

cAdvisor

cAdvisor เป็นเครื่องมือ Kubernetes แบบ Open-Source ที่พัฒนาโดย Google สำหรับ monitor การใช้งาน resource และประสิทธิภาพของ resource นั้น ๆ ซึ่งสามารถเข้ากับ container ทุก ๆ ประเภท cAdvisor สามารถตรวจจับทุก container ที่อยู่ใน server ได้อัตโนมัติ และยังสามารถรวบรวม ประมวลผล และกระจายข้อมูลที่อยู่ใน container ได้ ในขณะที่มีข้อจำกัดในเรื่องของการเก็บ metric สำหรับการ monitor ระยะยาว การ abstract container ของ cAdvisor นั้นมีพื้นฐานมากจาก lmctfy ที่มีลักษณะเป็น nested hierarchical behavior

Kubernetes Dashboard

Kubernetes Dashboard เป็นเครื่องมือที่เหมาะสำหรับ monitor cluster ขนาดไม่ใหญ่นัก มี UI ในการจัดการ Kubernetes ไม่ว่าจะเป็น discovery, load balancing, monitoring ต่าง ๆ เช่น การใช้งาน CPU และ memory กับสถานะของ workload และยังมี option หลากหลายที่สามารถ troubleshooting และเรายังสามารถดู dashboard ผ่านทางโทรศัพท์มือถือได้ด้วย 

Kubelet

Kubelet เป็น Node Agent ที่ run ในแต่ละ node ของ Kubernetes cluster ซึ่งตัว Kubelet สามารถ monitor แต่ละ node ผ่าน PodSpec ซึ่งเป็น YAML หรือ JSON object ที่มีรายละเอียดของ pod ต่าง ๆ มากไปกว่านั้น Kubelet ยังสามารถบริหารจัดการ PodSpecs ผ่าน API server ได้ ในขณะที่เครื่องมืออื่นยังไม่มีฟังก์ชั่นนี้ในตอนนี้


Security Tools

ระบบความปลอดภัยของ container เป็นอะไรที่เฉพาะทางมาก ๆ ไม่เหมือนระบบ hosting อื่น ๆ ทั่วไป เพราะว่า container นั้นมี layer มาก ทำให้การรักษาความปลอดภัยต้องถูกทำในทุก ๆ layer นอกจากนั้นการรักษาความปลอดภัยนั้นจะต้องรวมไปถึง container runtime, orchestrator, และ application images ด้วย ซึ่งเครื่องมือด้านล่างจะช่วยคุณอย่างไร ไปดูกัน!

Twistlock

Twistlock เป็นระบบรักษาความปลอดภัย container แบบครบวงจร ที่มี VMS คอยสแกนส่วนต่าง ๆ ของ container ที่ vulnerable ซึ่งเครื่องมือนี้จะเน้นความปลอดภัยของ container หลัก ๆ อยู่ 2 อย่าง คือโฟกัสการสแกน container image ตลอดเวลา และโฟกัสความปลอดภัยของ container ที่ทำงานอยู่ ซึ่งก่อนที่จะเป็น cycle ได้ เราต้องทำการกำหนด behavior ของระบบก่อน หลังจากนั้นระบบถึงจะทำงานเป็นวงจรได้

Falco

Falco เป็นเครื่องมือตรวจสอบสิ่งผิดปกติที่เกิดขึ้นใน container ที่ถูกพัฒนามาจาก Sysdig Project โดย Falco จะโฟกัสไปที่ kernel system call เป็นพิเศษ การ monitor ของ Falco จะ monitor ในหลาย layer ของ container ไม่ว่าจะเป็นตัว container เอง, application, host, และ network ซึ่งเราสามารถกำหนดการตรวจสอบแต่ละ cluster แยกกันได้ อีกทั้ง Falco ยังรองรับ container runtime อีกด้วย

Aqua Security

Aqua Security เป็นเครื่องมือที่สแกน container image ก่อนที่จะ deploy โดย Aqua จะทำให้ image เป็นแบบ read-only ซึ่งยากต่อการถูกแทรกแซงจากภายนอก และทำให้ตรวจพบสิ่งผิดปกติได้ง่ายยิ่งขึ้น โดยเฉพาะในช่วง scaling และประสิทธิภาพในระหว่างการพัฒนา ซึ่งฟังก์ชั่นหลัก ๆ ของ Aqua ก็คือการรักษาความปลอดภัย multi-tenancy environment ซึ่ง Aqua จะทำการตรวจสอบ issue ต่าง ๆ ไม่ว่าจะเป็น known threat, embedded secret และ malware และ isolate ส่วน data และ access ในเวลาเดียวกัน โดยในระหว่างตรวจสอบนั้น ระบบจะทำการ isolate tenant ต่าง ๆ ตลอดเวลา


Deployment Tools

Helm

Helm เป็นเครื่องมือบริหารจัดการ Kubernetes ที่ใช้ YAML ที่เรียกว่า Charts ซึ่งถูกใช้ define, install, upgrade ตัว Kubernetes จุดเด่นของ Charts คือการที่ตัวมันเองถูกออกแบบให้สามารถถูกสร้าง และพัฒนาได้ง่าย และมี template ที่บรรจุ Kubernetes Manifest Files ไว้ ซึ่งเจ้าตัว Manifest File นี้สามารถถูกนำกลับมาใช้ใหม่ได้เรื่อย ๆ 

Apollo

Apollo มีความสามารถในการจัดการ cluster ของ Kubernetes จำนวนมาก ไม่ว่าจะเป็นการเช็คสถานะการ deploy  การดูสถานะของ pod การดู log ต่าง ๆ จนไปถึงการ restart pod และ revert pod กลับไปจุดใดจุดหนึ่งในหนึ่งคลิก นอกจากนั้น Permission Model ของ Apollo ยังมีความยืดหยุ่นเป็นอย่างมาก สามารถ integrate กับ buil process ที่มีอยู่แล้วได้ อีกทั้งเรายังสามารถจัดการ cluster เป็นจำนวนมากได้ ซึ่งเหมาะกับการ deploy แบบต่อเนื่อง (Continuous Deployment)

Kubespray

Kubespray เป็นเครื่องมือจัดการ Kubernetes ที่ทำงานผ่าน Ansible ซึ่งรองรับระบบ Cloud Computing ต่าง ๆ ไม่ว่าจะเป็น AWS, Google Cloud Environment, Azure และ OpenStack โดยข้อดีของ Kubespray ก็จะเหมือน ๆ กับ Ansible ซึ่งสำหรับคนที่ใช้ Ansible ได้อยู่แล้วก็จะสามารถทำการ provision และ manage ได้ในเครื่องมือเดียว โดยความสามารถเด่น ๆ ของ Kubespray ก็คือการ integration test แบบ continuous


Command-Line Interface Tools

Kubectl

Kubectl เป็นเครื่องมือ CLI ของ Kubernetes ซึ่งสนับสนุนการทำงานทุกอย่างที่เกี่ยวข้องกับตัว Kubernetes เอง ตัว Node ต่าง ๆ จะถูกตรวจพบผ่าน config file ใน $HOME directory ในส่วนของ configfile นั้น kubectl ยังรอบรับ config file อื่น ๆ ที่ไม่ใช่ของมันเองด้วย เพียงแค่เราต้องกำหนด environment variable ให้คล้ายคลึงกันก็เท่านั้น ซึ่ง command ของ kubectl นั้นคล้ายคลึงกับ Docker เป็นอย่างมาก ถ้าไม่นับความแตกต่างเพียงไม่กี่อย่างของทั้งสองเครื่องมือ ซึ่งผู้ใช้ Docker สามารถใช้ kubectl ติดต่อกับ API server ได้

kubectx / kubens

Kubectx / Kubens เป็นเครื่องมือที่เพิ่มฟังก์ชั้นการทำงานผ่าน kubectl ในส่วนของ kubectx เป็นเครื่องมือที่มีประโยชน์มากสำหรับ multi-cluster environment โดยเราสามารถสับเปลี่ยน context ระหว่าง cluster ได้ และสามารถหลีกเลี่ยง command ที่ยุ่งเหยิงด้วย keyword ของ kubectx และจุดเด่นที่สุดของ kubectx คือเราสามารถตั้งชื่อให้ cluster ได้โดยคำสั่ง “kubectx [alias]” ส่วน kubens นั้น เป็นเครื่องมือที่คล้าย ๆ กับ kubectx ที่มีฟังก์ชั่นในการสับเปลี่ยนระหว่าง Kubernetes namespace และสามารถดึง context กลับไปอยู่ในเวอร์ชั่นก่อน ๆ ได้ด้วยคำสั่ง “kubens -”

Kube-shell

Kube-shell เป็นอีกหนึ่งเครื่องมือที่จะเสริมประสิทธิภาพของ kubectl เป็นอย่างมาก ที่เด่นที่สุดคงหนีไม่พ้นการเติมคำสั่งให้อย่างเสร็จสรรพ โดย kube-shell จะแนะนำ command ต่าง ๆ ซึ่งอ้างอิงจาก value ที่ใส่เข้าไป พร้อมแสดง in-line description เมื่อคำสั่งถูก execute และเราสามารถดูฟังก์ชั่นที่เคยใช้งานได้ง่าย ๆ ด้วยปุ่ม arrow key


Serverless Tools

Kubeless

Kubeless เป็นเครื่องมือที่ใช้ resource ของ Kubernetes ไม่ว่าจะเป็นการ auto-scale, ดึง API, monitor, และ troubleshoot ในการ deploy application ขนาดเล็ก และ Kubeless ยังสนับสนุน Custom Resource Definition ที่ทำให้เราสามารถสร้าง Kubernetes resource แบบ custom ซึ่งสามารถ monitor ได้ด้วย in-cluster controller Kubeless ยังสามารถ launch runtime ได้ตามที่เราต้องการ และสามารถนำ runtime เหล่านั้นไปอยู่บน HTTP ได้

Fission

Fission เป็นเครื่องมือที่ถูกออกแบบมาให้เราได้โฟกัสไปที่การเขียนโค้ดอย่างเดียว โดย Fission สามารถทำงานได้บน local computer หรือแม้แต่ private/public cloud และรองรับภาษาโปรแกรมหลากหลายภาษา ไม่ว่าจะเป็น Python, NodeJS, Go, C# หรือ PHP ข้อได้เปรียบของ Fission คือเราสามารถ deploy ได้ในคำสั่งเดียว และ workflow ของ Fission ทำให้เราสามารถเชื่อมต่อ severless function ได้หลายตัวด้วย logic gate ซึ่งเราไม่จำเป็นต้องไปยุ่งกับเรื่องจำพวก networking หรือ message queue เลย

IronFunctions

IronFunctions เป็นเครื่องมือ open-source ที่เขียนด้วย Golang ซึ่งรองรับทุกภาษาโปรแกรมเช่นกัน และหนึ่งในข้อได้เปรียบของ IronFunction คือการรองรับ AWS Lambda ซึ่งคุณสามารถ import ฟังก์ชั่นของ Lambda แล้ว run ในแพตฟอร์มไหนก็ได้ และท้ายที่สุด ในการ scaling ของ IronFunctions นั้น สิ่งที่คุณทำมีเพียงแค่เพิ่ม IronFunctions node เท่านั้น ไม่จำเป็นจะต้อง scale ทีละ app 

ซึ่งเครื่องมือทั้งหมดที่นำมาแนะนำมานี้ต่างก็มีข้อดีแตกต่างกันไป ทั้งนี้ทั้งนั้น เครื่องมือทั้งหมดย่อมช่วยให้เราสามารถใช้งาน Kubernetes ได้อย่างมีประสิทธิภาพมากขึ้น

หากต้องการใช้ Kubernetes ได้มีประสิทธิภาพแบบสุด ๆ โดยไม่ต้องเสียเวลาในการลองผิดลองถูกอีกต่อไป ทาง Skooldio ก็มีเวิร์กชอป 2 วันแบบจัดเต็มที่จะสอนเทคนิคการใช้ Kubernetes และ Helm ฉบับคุณเดียร์ – จิรายุส นิ่มแสง (Certified Kubernetes Administrator และ Google Developers Expert ด้าน Google Cloud Platform คนแรกของประเทศไทย)

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

วัน เวลา และสถานที่

  • ส. 14 – อา. 15 พ.ย. 2563
  • เวลา 09:30 – 17:00 น.
  • MBK Tower

Source: Pheonixnap, Kubernetes, logz.io