Kubernetes: Node Disk-Pressure

Mr.J?D?L... | ODDS
2 min readJan 13, 2024

--

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
EKS Troubleshooting — Disk Pressure

ปัญหาที่เจอ:

logs file ใน /var/lib/container เต็ม ซึ่งอาจเกิดจากการที่ pod ถูก deploy ทิ้งไว้นานหลายปี หรือ service ที่มีปัญหาทำให้ logs เพิ่มขึ้นอย่างผิดปกติ เหตุการณ์ที่เจอคือ longhorn ไม่สามารถเขียนข้อมูลลงที่ worker node ได้ ทำให้เกิด error log ที่เขียนในทุก 0.00000xx วินาที ทำให้ log fileใช้พื้นที่จนเต็ม

แนวทางการแก้ไข:

  1. Workaround โดยการลบ pod ที่ทำให้เกิดปัญหาออก และให้ Kubernetes cluster สร้าง Pod ใหม่ขึ้นมาอัตโนมัติ ซึ่งมี Garbage Collection ซึ่งเป็นส่วนหนึ่งของ Kubelet ที่ทำหน้าที่ลบ Container และ Disk(volume) ที่ไม่ได้ใช้แล้วออก
  2. Log rotation เป็นการจำกัดจำนวนหรือขนาดของ logs file เพื่อป้องกันปัญหา Node disk pressure จาก log file ที่มีปริมาณมากเกินไป แต่อาจทำให้ขาดข้อมูล log ที่จำเป็นในการวิเคราะห์ปัญหา
  3. 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

--

--