ความสำคัญของ Health Checks ใน Docker

ความสำคัญของ Health Checks ใน Docker

ในยุคนี้ที่เราใช้ Docker กันอย่างแพร่หลาย การจัดการกับ containerให้อยู่ในสภาพพร้อมใช้งานตลอดเวลาเป็นเรื่องสำคัญมาก เพราะถ้า container เกิดปัญหาขึ้นมา แล้วเราไม่รู้ตัว ก็อาจส่งผลกระทบต่อแอปพลิเคชันของเราได้ ดังนั้น เราจึงต้องมีเครื่องมือที่คอยตรวจสอบสุขภาพของ container อยู่ตลอดเวลา ซึ่งเครื่องมือที่ว่านี้ก็คือ Health Checks ใน Docker นั่นเอง ในบทความนี้ เราจะมาดูกันว่า Health Checks มีความสำคัญอย่างไร และเราจะใช้มันอย่างไรให้เกิดประโยชน์สูงสุด

Health Checks คืออะไร

Health Checks คือฟีเจอร์ใน Docker ที่ช่วยให้เราสามารถตรวจสอบสถานะของ container ได้ โดยการกำหนดคำสั่งที่ Docker จะใช้ในการตรวจสอบว่า container นั้นทำงานอย่างถูกต้องหรือไม่ หาก container ไม่ผ่านการตรวจสอบ Health Check ระบบจะสามารถตัดสินใจได้ว่าจะทำการรีสตาร์ต container หรือไม่

การใช้ Health Checks ช่วยให้เราสามารถ:

  • ตรวจสอบความพร้อมใช้งานของ service ที่รันอยู่ใน container
  • ลดความเสี่ยงจาก service ที่ไม่เสถียร
  • ทำให้ผู้ใช้งาน service ได้ใช้งานได้อย่างถูกต้อง

ผลกระทบที่เกิดขึ้นเมื่อไม่ใช้ Health Checks

การไม่ใช้ Health Checks อาจส่งผลกระทบที่ร้ายแรงต่อการทำงานของแอปพลิเคชัน

  • Downtime: container ที่ไม่ทำงานอาจทำให้ service หยุดชะงัก โดยที่ผู้ดูแลระบบไม่ทราบถึงปัญหา
  • การสูญเสียข้อมูล: หาก container ที่มีข้อมูลสำคัญไม่ทำงาน อาจทำให้ข้อมูลสูญหายหรือไม่สามารถเข้าถึงได้
  • ประสบการณ์ผู้ใช้ที่ไม่ดี: ผู้ใช้งานจะพบกับปัญหาการเข้าถึง service ซึ่งอาจนำไปสู่การสูญเสียผู้ใช้งานคนนั้นไป

ตัวอย่างการเขียน Health Check

ด้านล่างคือตัวอย่าง Dockerfile ที่ใช้ Health Check เพื่อตรวจสอบสถานะของเว็บเซิร์ฟเวอร์

FROM nginx:alpine

# Copy configuration files
COPY ./html /usr/share/nginx/html

# Health Check
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD curl -f http://localhost/ || exit 1

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

ในตัวอย่างนี้ Docker จะทำการตรวจสอบสถานะของเว็บเซิร์ฟเวอร์ทุก ๆ 30 วินาที โดยใช้คำสั่ง curl เพื่อตรวจสอบว่าสามารถเข้าถึงได้หรือไม่

อย่าลืมติดตั้ง curl ไปด้วยใน dockerfile ที่เรียกใช้ เพราะบ้าง image ที่เรานำมาใช้อาจไม่มี curl มาให้

เมื่อไรควรเขียน Health Checks

  • เมื่อต้องการให้ service มีความพร้อมใช้งานสูง
  • ในแอปพลิเคชันที่มีการเปลี่ยนแปลงบ่อยครั้ง
  • ในสภาพแวดล้อมที่มีการทำงานร่วมกันระหว่างหลาย container

สิ่งที่ควรทำ

  • กำหนด Health Check ให้ชัดเจน: คำสั่งที่ใช้ในการตรวจสอบควรจะชัดเจนและสามารถระบุสถานะได้อย่างแม่นยำ
  • ตั้งค่า Interval และ Timeout ให้เหมาะสม: ควรตั้งค่าเวลาในการตรวจสอบและเวลาที่รอให้บริการตอบสนองให้เหมาะสมกับลักษณะของแอปพลิเคชัน
  • ทดสอบ Health Checks อย่างสม่ำเสมอ: ควรมีการทดสอบ Health Checks เพื่อให้แน่ใจว่ามันทำงานได้ตามที่คาดหวัง

ข้อผิดพลาดทั่วไป

  • การตั้งค่า Health Check ที่ไม่เหมาะสม: การใช้คำสั่งที่ไม่สามารถตรวจสอบสถานะได้อย่างถูกต้องอาจทำให้เกิดปัญหา
  • การไม่ปรับปรุง Health Checks: ควรมีการปรับปรุง Health Checks ให้เหมาะสมกับการเปลี่ยนแปลงของแอปพลิเคชัน
  • การตั้งค่า Interval ที่ต่ำเกินไป: การตั้งค่า Interval ที่ต่ำเกินไปอาจทำให้เกิดการตรวจสอบที่ไม่จำเป็นและเพิ่มภาระให้กับระบบ

บทสรุป

Health Checks เป็นเครื่องมือที่สำคัญในการจัดการ container ใน Docker ที่ช่วยให้เราสามารถตรวจสอบสถานะของ service ได้อย่างมีประสิทธิภาพ การใช้งาน Health Checks จะช่วยลดความเสี่ยงจากการใช้งาน service ที่ไม่เสถียร ด้วยการตั้งค่า Health Checks ที่เหมาะสมและทำตาม "สิ่งที่ควรทำ" เราจะสามารถสร้างแอปพลิเคชันที่เชื่อถือได้และมีความพร้อมใช้งานสูงได้อย่างแน่นอน ฟันธง!!!

Arnon Kijlerdphon

Arnon Kijlerdphon

Board game & Plant-based & Minimalist, it's all my life.
Bangkok, Thailand