เพิ่มความกลมกล่อมให้กับ Kubernetes ด้วย Robusta-KRR

Pitch Kantapit
odds.team
Published in
4 min readMar 15, 2024

กลับมาอีกแล้วครับ หลังจากที่เราเสริมเกราะด้วย Trivy กันไปแล้ว ฮั่นแน่ใครยังไม่อ่านจิ้มตรงนี้ทีนึงเล๊ยย → Here ถ้าอ่านมาแล้วก็ ไป! กัน! ต่อ!

ใช่แล้วคร่าวนี้เราจะมาเพิ่มความกลมกล่อม ให้กับ Kubernetes ของเราด้วย Robusta 3 in 1 เห้ย ไม่ใช่! Robusta-KRR เห้ย ถูกแล้ว! แต่เดี๋ยวก่อนเจ้า Robusta ตัวนี้ไม่ใช่เมล็ดกาแฟที่ทำให้เราดีดเพื่อ Monitoring แต่อย่างใด แต่มันคือ Tools ชนิดนึงที่จะมาช่วยให้ชีวิตของชาวเรา ๆ สะดวกสบายมากยิ่งขึ้น เรียกว่าเข้มโดนใจแน่นอน

https://ifunny.co/tags/robusta

What is Robusta-KKR

Robusta-KRR คืออะไร KRR ย่อมาจาก Kubernetes Resource Recommendations ซึ่งเจ้า Robusta ตัวนี้จะทำหน้าที่เป็น Observability platform และ automations engine for Kubernetes

โดยน้องกาแฟ️ ☕ หรือ เจ้า Robusta จะมีการทำงานโดยการดักฟัง Events ที่เกิดขึ้นใน Cluster ของเราโดยน้องแจ้งเตือนเราว่าอะไรพัง พังเพราะอะไรและสามารถจัดการกับของที่พังได้ยังไงบ้าง แหม่ น้องกาแฟของเรา เก่งใช่ย่อยนะเนี้ยย

Architecture

โดยเจ้า Robusta จะมีภาพของ Architecture ประมาณนี้ครับ

https://docs.robusta.dev/master/how-it-works/architecture.html

จากภาพนะครับ Robusta จะต้องรัน 2 Deployment ใน Cluster ของเราโดยจะมี

  1. Robusta-Forwarder : ทำหน้าที่เชื่อมต่อกับ APIServer กับ Monitoring Kubernetes ของเราและส่ง Events ไปที่ Robusta-Runner
  2. Robusta-Runner : ทำหน้าที่คอยรับทุก ๆ Events จากนั้นจะนำมาประเมินกับ Playbooks และส่ง Notifications

โดยนอกเหนือจากที่เราต้องมา deploy ทั้ง 2 ตัวนี้ยังมีตัวเลือกอื่น ๆ นั้นก็คือ Bundle ที่จะแถมเจ้าตัว Robusta มาด้วยเช่น

หลังจากที่เราได้รู้หลักการทำงานของน้องแล้วเรามาเริ่มกันเล๊ยยยยย 🤩

Installation 🔧

โดยผมจะใช้ท่าที่เค้า Recommends ที่สุดนะครับโดยจะใช้ pip ในการ install ครับ สำหรับใครที่ยังไม่มี จะต้อง install Python3 และ pip ก่อน

อย่าลืม!! ใช้ Python venv กันด้วยนะทุกคนนน → How to Set Up a Virtual Environment in Python

สำหรับใครที่พร้อมแล้วเราไปลุยกันต่อเล๊ยยย 💡

  1. Install Robusta python cli
pip install -U robusta-cli --no-cache

2. Generate a values file for Helm

robusta gen-config

เลือก Option ตามใจได้พรี่ ๆ เลยครัฟ

No รัว ๆ เน้นเร็วไว้ก่อน อิอิ

ถ้า สำเร็จเราจะได้ 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 ที่รันไม่ขึ้นประมาณนี้ครับ

nginx-server จะ Error อยู่ สงสัยต้องลอง monitor ดูวววล้าวว

Robusta UI 🔍

ทำการ Login ไปที่ RobustaUI เพื่อใช้ UI ในการ Monitor Cluster ของเราด้วย E-mail ที่เราใส่ไปตอน generate ไฟล์ .yml

Pod พังอยู่ จริงด้วย 😵
ลองเข้ามาดูข้างใน pod จะเห็น event ต่าง ๆ ที่เกิดขึ้น
ขวาบนจะมีปุ่ม Analyze Problems อยู่ ไหนลองซิ 🤔

น้องก็จะด่าเราว่า: เห้ย nginx-airplane เนี้ยเราไม่รู้จักนะ หาไม่เจอโว้ยย 🤬

Notification Alert 🚨

หลังจากที่เรามี Dashboard งาม ๆ เอาไว้ Monitor แล้วก็ยังกลมกล่อมไม่พอออ ☕️ ใช่แล้วครับ สิ่งที่ขาดไม่ได้เลยคือ Notification นั่นเอง เราจะรู้ได้ไงว่า Application ของเรา หรือ Server ของเรายังทำงานอยู่ถ้าเราไม่ได้ Monitor ดูอยู่ ใช่ครับน้อง Robusta จัดให้ง่าย ๆ เพียงไม่กี่ขั้นตอน

โดย Notification ที่ผมจะเอาไป Hook ด้วยก็คือ Discord นะครับ (หลัก ๆ พวกเราใช้ Discord ในการทำงาน) โดยที่น้องสามารถเอาไป Hook ได้หลายที่มาก

https://docs.robusta.dev/master/configuration/sinks/index.html#id1

เราต้องมี 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 ใหม่ดูครับ

มีแนะนำให้ “Make sure the image repository, image name and image tag are correct.” เท่ไปอี๊ก

จะได้หน้าตาประมาณนี้เล๊ยยย เท่สุด ๆ 🤩 😎

Conclusion

สำหรับเจ้า Robusta-KRR ก็เป็น Tools นึงที่สามารถ Monitoring และ Recommends เราได้อีกทั้งยังเป็น Tools ที่มีความซับซ้อนในการ Setup น้อยมาก ๆ อีกด้วยครับ แต่ในบาง feature อาจจะต้องจ่ายเพิ่ม 😂 เพื่อความสะดวกสบายหรือพี่ ๆ เพื่อน ๆ จะลองหา Dashboard ที่เป็นของ Community และใช้แต่ Notification ลอง Robusta ผมว่าก็ไม่แย่ครับ

สุดท้ายนี้ขอขอบคุณทุกท่านที่อ่านจนจบครับ สามารถติชมหรือเสริมในส่วนที่ผมไม่ได้พูดถึงได้เลยครับ ขอบคุณมากครับ 🙇🏻‍♂️

--

--