Kubernetes: Node Disk-Pressure
“Node disk pressure” เป็นปัญหาที่พบบ่อยในการใช้งาน Kubernetes cluster ซึ่งเกิดจากดิสก์ของเครื่อง Worker node ที่เต็ม หลังจากใช้งานไปสักระยะหนึ่ง ปัญหานี้อาจเกิดขึ้นจากหลายสาเหตุ เช่น
- การใช้ Host Path ในการ mount volume ของ Pod: Pod สามารถเข้าถึงไฟล์ระบบของโหนดโดยตรงโดยใช้ host path ซึ่งหากมีการเขียนข้อมูลมากเกินไป จะทำให้พื้นที่ว่างบนดิสก์ลดลงอย่างรวดเร็ว ปกติ container จะเขียนข้อมูลไปยัง /var/lib/overlay2
- Logs ของ Pod (Container): การเก็บ logs จำนวนมากเป็นอีกหนึ่งสาเหตุ ปกติ container จะเขียน logs ไปยัง /var/log หรือ /var/lib/container หากไม่มีการจัดการ logs ให้หมุนเวียน (rotate) หรือลบออกอย่างเหมาะสม จะทำให้ปริมาณข้อมูลเพิ่มขึ้นจนดิสก์เต็ม
- ปัจจัยอื่นๆ: เช่น Opensource ที่ติดตั้งบน kubernetes cluster หรือการใช้งานดิสก์ของ worker node
ปัญหาที่เจอ:
logs file ใน /var/lib/container เต็ม ซึ่งอาจเกิดจากการที่ pod ถูก deploy ทิ้งไว้นานหลายปี หรือ service ที่มีปัญหาทำให้ logs เพิ่มขึ้นอย่างผิดปกติ เหตุการณ์ที่เจอคือ longhorn ไม่สามารถเขียนข้อมูลลงที่ worker node ได้ ทำให้เกิด error log ที่เขียนในทุก 0.00000xx วินาที ทำให้ log fileใช้พื้นที่จนเต็ม
แนวทางการแก้ไข:
- Workaround โดยการลบ pod ที่ทำให้เกิดปัญหาออก และให้ Kubernetes cluster สร้าง Pod ใหม่ขึ้นมาอัตโนมัติ ซึ่งมี Garbage Collection ซึ่งเป็นส่วนหนึ่งของ Kubelet ที่ทำหน้าที่ลบ Container และ Disk(volume) ที่ไม่ได้ใช้แล้วออก
- Log rotation เป็นการจำกัดจำนวนหรือขนาดของ logs file เพื่อป้องกันปัญหา Node disk pressure จาก log file ที่มีปริมาณมากเกินไป แต่อาจทำให้ขาดข้อมูล log ที่จำเป็นในการวิเคราะห์ปัญหา
- Monitor and Alarm เป็นการตรวจสอบ disk usage ของ worker node และตั้ง alarm เมื่อดิสก์มีการใช้งานเพิ่มขึ้น เพื่อให้ทีมที่รับผิดชอบเข้าไปแก้ไขและติดตามปัญหา
สุดท้าย, ปัญหา Node disk pressure อาจเกิดจากการใช้ volume ในส่วนอื่นๆ ด้วย และวิธีการแก้ไขอาจแตกต่างกันไป หวังว่าบทความนี้จะมีประโยชน์ไม่มากก็น้อย
ยินดีรับฟังคำติชมเพื่อการพัฒนาต่อไป 😁🙏🏻
Credit reference:
- Node Disk-Pressure Kubernetes: Nont Banditwong
- Kubernetes Node Disk Pressure: Alex Bezrukov