ถอดรหัส Cache ใน Kubernetes Controller-Runtime: เบื้องหลังการทำงานที่คุณอาจไม่เคยรู้
ในโลกของการพัฒนาแอปพลิเคชันแบบกระจายตัว (Distributed Systems) บน Kubernetes การสร้าง Custom Controller กลายเป็นเรื่องปกติและจำเป็นอย่างยิ่งสำหรับนักพัฒนาหลายคน ด้วยเครื่องมืออย่าง kubebuilder ที่ทำงานอยู่บน controller-runtime ทำให้การสร้าง Controller ของคุณเป็นเรื่องง่ายและรวดเร็ว แต่ภายใต้ความง่ายดายนั้น มีกลไกสำคัญบางอย่างที่ซ่อนอยู่ ซึ่งหากเราเข้าใจผิดไป อาจนำไปสู่ปัญหาที่คาดไม่ถึงใน Production ได้ บ่อยครั้งที่นักพัฒนา โดยเฉพาะผู้ที่เพิ่งเริ่มต้น เข้าใจว่าเมื่อเรียกใช้ r.Get() หรือ r.List() ภายในฟังก์ชัน Reconcile ของ Controller ตัว Controller จะทำการสอบถามข้อมูลจาก kube-apiserver โดยตรงในทันที และเชื่อว่าข้อมูลที่ได้นั้นคือ “มุมมองที่สดใหม่ที่สุด” ของโลก Kubernetes เสมอ นอกจากนี้ยังคิดว่าหลังจากที่ Controller เรียก r.Update() แล้ว การเรียก r.Get() ซ้ำทันทีจะได้รับสถานะใหม่ที่อัปเดตแล้ว ซึ่งความเข้าใจนี้เป็นรากฐานของปัญหาหลายอย่างที่อาจเกิดขึ้นเมื่อระบบเริ่มมีโหลดสูงขึ้น หรือ Controller ทำงานในลักษณะที่เราไม่คาดคิด เมื่อความเข้าใจผิดเรื่อง … Read more