วิธีเก็บ Kubernetes events ด้วย event exporter

Nont Banditwong
1 min readDec 1, 2022

--

เมื่อ Controller ใน Kubernetes ทำการ reconcile actual state ของ object ให้เป็นไปตาม desired state ตัว controller จะทำการสร้าง event object ขึ้นมา เพื่ออธิบายสิ่งที่มันได้ทำลงไปกับ object เช่น restart Pod ในกรณีที่ liveness probe failed เป็นต้น

Event ใน Kubernetes มีอยู่ 2 ชนิดคือ Normal และ Warning สำหรับ event ประเภท warning จะเกิดในกรณีที่มีบางสิ่งที่ทำให้ไม่สามารถ reconcile object จาก actual state ให้เป็นไปตาม desired state ได้ เช่น pull image เพื่อมาสร้าง Pod ไม่ได้

ข้อมูล event จึงมีความสำคัญช่วยให้สามารถรู้ถึงสาเหตุของปัญหาภายใน Kubernetes cluster ซึ่งจะนำไปสู่การแก้ไขปัญหาได้อย่างรวดเร็ว แต่เนื่องจากถ้าหากใน Kubernetes cluster มี object จำนวนมากการเก็บข้อมูล event ไว้เป็นเวลานานจะเป็นภาระกับ etcd ค่อนข้างมาก ทางผู้พัฒนาจึงได้ออกแบบให้ event มีอายุแค่ 1 ชั่วโมง ดังนั้นการนำข้อมูล event ออกมาเก็บไว้ภายนอก Kubernetes cluster จึงมีความสำคัญเพื่อช่วยในการหาสาเหตุของปัญหาในภายหลังได้

วิธีการหนึ่งที่สามารถทำได้คือติดตั้ง event-exporter https://github.com/resmoio/kubernetes-event-exporter

event-exporter รองรับการส่งข้อมูล event ไปเก็บในหลายๆที่เช่น Elasticsearch Opensearch Kafka หรือแม้แต่ standard out ของ Pod ซึ่งถ้าเรามีการเก็บ log ของ Pod อยู่แล้วการส่งไปที่ standard out ก็จะเป็นวิธีที่ง่ายที่สุด

วิธีการ deploy ก็ง่ายมาก เราสามารถ clone project จาก github แล้วสามารถใช้ kubectl apply -f deploy/ ได้เลย pod ของ event exporter จะไปเกิดอยู่ใน namespace ชื่อ monitoring

ถ้าหากข้องการแก้ไขชื่อ namespace หรือ registry สามารถทำได้จากการแก้ manifests ใน directory deploy ได้โดยตรง

--

--

Nont Banditwong

Cloud Engineering Specialist, Software Developer, System Engineer, Photographer and Learner