เพิ่มความกลมกล่อมให้กับ Kubernetes ด้วย Robusta-KRR
กลับมาอีกแล้วครับ หลังจากที่เราเสริมเกราะด้วย Trivy กันไปแล้ว ฮั่นแน่ใครยังไม่อ่านจิ้มตรงนี้ทีนึงเล๊ยย → Here ถ้าอ่านมาแล้วก็ ไป! กัน! ต่อ!
ใช่แล้วคร่าวนี้เราจะมาเพิ่มความกลมกล่อม ให้กับ Kubernetes ของเราด้วย Robusta 3 in 1 เห้ย ไม่ใช่! Robusta-KRR เห้ย ถูกแล้ว! แต่เดี๋ยวก่อนเจ้า Robusta ตัวนี้ไม่ใช่เมล็ดกาแฟที่ทำให้เราดีดเพื่อ Monitoring แต่อย่างใด แต่มันคือ Tools ชนิดนึงที่จะมาช่วยให้ชีวิตของชาวเรา ๆ สะดวกสบายมากยิ่งขึ้น เรียกว่าเข้มโดนใจแน่นอน
What is Robusta-KKR
Robusta-KRR คืออะไร KRR ย่อมาจาก Kubernetes Resource Recommendations ซึ่งเจ้า Robusta ตัวนี้จะทำหน้าที่เป็น Observability platform และ automations engine for Kubernetes
โดยน้องกาแฟ️ ☕ หรือ เจ้า Robusta จะมีการทำงานโดยการดักฟัง Events ที่เกิดขึ้นใน Cluster ของเราโดยน้องแจ้งเตือนเราว่าอะไรพัง พังเพราะอะไรและสามารถจัดการกับของที่พังได้ยังไงบ้าง แหม่ น้องกาแฟของเรา เก่งใช่ย่อยนะเนี้ยย
Architecture
โดยเจ้า Robusta จะมีภาพของ Architecture ประมาณนี้ครับ
จากภาพนะครับ Robusta จะต้องรัน 2 Deployment ใน Cluster ของเราโดยจะมี
- Robusta-Forwarder : ทำหน้าที่เชื่อมต่อกับ APIServer กับ Monitoring Kubernetes ของเราและส่ง Events ไปที่ Robusta-Runner
- Robusta-Runner : ทำหน้าที่คอยรับทุก ๆ Events จากนั้นจะนำมาประเมินกับ Playbooks และส่ง Notifications
โดยนอกเหนือจากที่เราต้องมา deploy ทั้ง 2 ตัวนี้ยังมีตัวเลือกอื่น ๆ นั้นก็คือ Bundle ที่จะแถมเจ้าตัว Robusta มาด้วยเช่น
- Robusta with Prometheus.
- The Robusta SaaS platform
- The Robusta cli
หลังจากที่เราได้รู้หลักการทำงานของน้องแล้วเรามาเริ่มกันเล๊ยยยยย 🤩
Installation 🔧
โดยผมจะใช้ท่าที่เค้า Recommends ที่สุดนะครับโดยจะใช้ pip
ในการ install ครับ สำหรับใครที่ยังไม่มี จะต้อง install Python3 และ pip ก่อน
อย่าลืม!! ใช้ Python venv กันด้วยนะทุกคนนน → How to Set Up a Virtual Environment in Python
สำหรับใครที่พร้อมแล้วเราไปลุยกันต่อเล๊ยยย 💡
- Install Robusta python cli
pip install -U robusta-cli --no-cache
2. Generate a values file for Helm
robusta gen-config
เลือก Option ตามใจได้พรี่ ๆ เลยครัฟ
ถ้า สำเร็จเราจะได้ file generated_values.ymal
3. Install Robusta with Helm → Installing Helm
helm repo add robusta https://robusta-charts.storage.googleapis.com && helm repo update
helm install robusta robusta/robusta -f ./generated_values.yaml --set clusterName=<YOUR_CLUSTER_NAME>
โดยที่เราจะต้องใส่ ชื่อ cluster ของเราแทน YOUT_CLUSTER_NAME
4. Verifying Installation
kubectl get pods -A | grep robusta
robusta logs
ถ้าได้แบบนี้แสดงว่า Work!
See Robusta in action
เรามาลอง Deploy pod ที่ crash ดูกันว่าจะเป็นยังไง!
มาลองง่าย ๆ เร็ว ๆ กัน ก่อนอื่นสร้าง ไฟล์ .yaml ให้ของได้ข้างในหน้าตาแบบนี้ยยย
apiVersion: v1
kind: Pod
metadata:
name: nginx-server
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:airplan
ports:
- containerPort: 80
โดยเราจะลองแกล้งชื่อ image ผิด เปลี่ยนจาก alpine → airplane ✈️ แล้ว apply เล๊ยยย 🤩
k apply -f app.yaml
เราจะได้ pod ที่รันไม่ขึ้นประมาณนี้ครับ
Robusta UI 🔍
ทำการ Login ไปที่ RobustaUI เพื่อใช้ UI ในการ Monitor Cluster ของเราด้วย E-mail ที่เราใส่ไปตอน generate ไฟล์ .yml
น้องก็จะด่าเราว่า: เห้ย nginx-airplane เนี้ยเราไม่รู้จักนะ หาไม่เจอโว้ยย 🤬
Notification Alert 🚨
หลังจากที่เรามี Dashboard งาม ๆ เอาไว้ Monitor แล้วก็ยังกลมกล่อมไม่พอออ ☕️ ใช่แล้วครับ สิ่งที่ขาดไม่ได้เลยคือ Notification นั่นเอง เราจะรู้ได้ไงว่า Application ของเรา หรือ Server ของเรายังทำงานอยู่ถ้าเราไม่ได้ Monitor ดูอยู่ ใช่ครับน้อง Robusta จัดให้ง่าย ๆ เพียงไม่กี่ขั้นตอน
โดย Notification ที่ผมจะเอาไป Hook ด้วยก็คือ Discord นะครับ (หลัก ๆ พวกเราใช้ Discord ในการทำงาน) โดยที่น้องสามารถเอาไป Hook ได้หลายที่มาก
เราต้องมี Discord Webhook URL ก่อนแล้วไปแก้ไข file generated_values.yaml
ให้ได้ประมาณนี้
globalConfig:
signing_key: XXXXXXXX
account_id: XXXXXXXX
sinksConfig:
- discord_sink:
name: <your-alert-name>
url: <your-discord-url>
- robusta_sink:
name: robusta_ui_sink
token: XXXXXXXX
enablePlatformPlaybooks: true
runner:
sendAdditionalTelemetry: true
rsa:
private: XXXXXXXX
public: XXXXXXXX
แล้วทำการ Helm update 1 ที
helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName=<YOUR_CLUSTER_NAME>
แล้วลองลบ Pod nginx-server แล้วลอง deploy ใหม่ดูครับ
จะได้หน้าตาประมาณนี้เล๊ยยย เท่สุด ๆ 🤩 😎
Conclusion
สำหรับเจ้า Robusta-KRR ก็เป็น Tools นึงที่สามารถ Monitoring และ Recommends เราได้อีกทั้งยังเป็น Tools ที่มีความซับซ้อนในการ Setup น้อยมาก ๆ อีกด้วยครับ แต่ในบาง feature อาจจะต้องจ่ายเพิ่ม 😂 เพื่อความสะดวกสบายหรือพี่ ๆ เพื่อน ๆ จะลองหา Dashboard ที่เป็นของ Community และใช้แต่ Notification ลอง Robusta ผมว่าก็ไม่แย่ครับ
สุดท้ายนี้ขอขอบคุณทุกท่านที่อ่านจนจบครับ สามารถติชมหรือเสริมในส่วนที่ผมไม่ได้พูดถึงได้เลยครับ ขอบคุณมากครับ 🙇🏻♂️