Home > Blog > tech

etcd คืออะไร? สอน Backup และ Restore etcd สำหรับ Kubernetes Admin 2026

kubernetes etcd backup restore guide
etcd คืออะไร? สอน Backup และ Restore etcd สำหรับ Kubernetes Admin 2026
2026-04-16 | tech | 766 words


etcd คืออะไร? หัวใจของ Kubernetes ที่ผู้ดูแลระบบต้องรู้จัก

ในโลกของคอนเทนเนอร์และระบบออร์เคสเตรชันที่ขับเคลื่อนด้วย Kubernetes (K8s) ข้อมูลสำคัญทั้งหมดของคลัสเตอร์ ไม่ว่าจะเป็นสถานะของโหนด, การกำหนดค่า Pod, Secret, ConfigMap, หรือนโยบายเครือข่าย ต่างถูกเก็บรักษาไว้ในที่เก็บข้อมูลหนึ่งเดียวที่เรียกว่า etcd (อ่านว่า "เอตซีดี") การเข้าใจ etcd จึงไม่ใช่แค่ความรู้เพิ่มเติม แต่เป็นสิ่งจำเป็นขั้นพื้นฐานสำหรับ Kubernetes Administrator ทุกคน โดยเฉพาะในปี 2026 ที่ระบบมีความซับซ้อนและต้องการความต่อเนื่องทางธุรกิจสูงสุด

etcd เป็น distributed key-value store แบบโอเพ่นซอร์สที่มีความสอดคล้องและความทนทานสูง พัฒนาด้วยภาษา Go และเป็นโครงการหลักของ Cloud Native Computing Foundation (CNCF) หน้าที่หลักของมันคือการทำหน้าที่เป็น "แหล่งความจริงเดียว" (Single Source of Truth) สำหรับคลัสเตอร์ Kubernetes ทุกการเปลี่ยนแปลงในคลัสเตอร์จะถูกบันทึกลงใน etcd ในรูปแบบของ transaction log ก่อนที่จะถูกประยุกต์ใช้จริง ทำให้มั่นใจได้ว่าสมาชิกทุกตัวในคลัสเตอร์เห็นสถานะที่สอดคล้องกัน

สถาปัตยกรรมและบทบาทของ etcd ใน Kubernetes

etcd ทำงานภายใต้กลไกฉันทามติแบบ Raft ซึ่งเป็นอัลกอริทึมที่รับประกันความสอดคล้องของข้อมูลระหว่างสมาชิก (member) หลายตัวในคลัสเตอร์ etcd โดยทั่วไปจะถูกติดตั้งเป็นคลัสเตอร์ขนาดเล็ก (มักเป็น 3, 5 หรือ 7 โหนด) เพื่อให้ทนทานต่อความล้มเหลว โดยที่ข้อมูลจะถูกทำซ้ำ (replicate) ไปยังทุกโหนด การเขียนข้อมูลจะสำเร็จก็ต่อเมื่อได้รับฉันทามติจากโหนดส่วนใหญ่ (quorum) เท่านั้น

ใน Kubernetes API Server จะเป็นเพียงคอมโพเนนต์เดียวที่สื่อสารโดยตรงกับ etcd เพื่ออ่านและเขียนสถานะของคลัสเตอร์ คอมโพเนนต์อื่นๆ เช่น Controller Manager หรือ Scheduler จะทำงานโดยอาศัยสถานะที่ API Server อ่านมาจาก etcd อีกทีหนึ่ง ดังนั้น หาก etcd ล้มเหลวหรือข้อมูลเสียหาย ผลที่ตามมาคือคลัสเตอร์ Kubernetes ทั้งหมดจะหยุดทำงานหรือสูญเสียความสามารถในการจัดการ นี่คือเหตุผลที่การทำ Backup และ Restore อย่างมีกลยุทธ์จึงมีความสำคัญเทียบเท่ากับการสำรองข้อมูลฐานข้อมูลในระบบดั้งเดิม

ทำไมการ Backup etcd ถึงสำคัญที่สุดสำหรับ Kubernetes Admin?

ลองจินตนาการว่าคลัสเตอร์ Kubernetes ของคุณที่รันแอปพลิเคชันและบริการสำคัญจำนวนมาก вдругสูญเสียข้อมูลการกำหนดค่าทั้งหมด โหนดทั้งหมดหายไป, Deployment และ Service หายเกลี้ยง, เส้นทางเครือข่ายขาดสะบั้น สถานการณ์ nightmare นี้เกิดขึ้นได้จากหลายสาเหตุ:

การมี Backup ที่ทันสมัยและทดสอบแล้วคือแผนฉุกเฉินสุดท้ายที่จะช่วยให้คุณฟื้นฟูคลัสเตอร์กลับมาได้ภายในเวลาที่กำหนด (Recovery Time Objective - RTO) และไม่สูญเสียข้อมูลย้อนหลัง (Recovery Point Objective - RPO) การจัดการความเสี่ยงนี้เป็นทักษะที่ขาดไม่ได้สำหรับ DevOps และ SRE ในยุค 2026

เตรียมความพร้อมก่อน Backup และ Restore etcd

ก่อนที่จะลงมือปฏิบัติ คุณต้องเข้าใจสภาพแวดล้อมการติดตั้ง etcd ของคุณก่อน โดยทั่วไปมี 2 รูปแบบ:

  1. Static Pod (Self-managed): etcd ทำงานเป็น Static Pod ที่ถูกจัดการโดย kubelet บน Control Plane Node มักพบในคลัสเตอร์ที่ติดตั้งด้วย kubeadm ไฟล์กำหนดค่าจะอยู่ที่ /etc/kubernetes/manifests/etcd.yaml
  2. External etcd Cluster: etcd ทำงานแยกออกจากคลัสเตอร์ Kubernetes อย่างสมบูรณ์ ซึ่งให้ความยืดหยุ่นและประสิทธิภาพในการจัดการสูงกว่า

สิ่งสำคัญที่ต้องรู้ก่อน backup:

วิธี Backup etcd Cluster แบบทีละขั้นตอน (ปี 2026)

เราจะมุ่งเน้นที่การ backup etcd ที่ติดตั้งแบบ static pod บนคลัสเตอร์ที่สร้างด้วย kubeadm ซึ่งเป็นรูปแบบที่พบได้บ่อยที่สุด

ขั้นตอนที่ 1: เข้าถึง Control Plane Node และตั้งค่าตัวแปรแวดล้อม

SSH เข้าไปยัง Control Plane Node (Master Node) ตัวใดตัวหนึ่งที่รัน etcd จากนั้นตั้งค่าตัวแปรแวดล้อมที่จำเป็นสำหรับการเชื่อมต่อกับ etcd API ด้วย TLS

export ETCDCTL_API=3
export ETCD_CERT=/etc/kubernetes/pki/etcd/server.crt
export ETCD_KEY=/etc/kubernetes/pki/etcd/server.key
export ETCD_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCD_ENDPOINTS=https://127.0.0.1:2379

ขั้นตอนที่ 2: สร้าง Snapshot ด้วยคำสั่ง etcdctl snapshot save

คำสั่งนี้จะสร้าง snapshot ของสถานะ etcd ณ ขณะนั้นและบันทึกลงไฟล์ กระบวนการนี้ไม่รบกวนการทำงานของ etcd (non-disruptive)

etcdctl snapshot save /var/lib/etcd-backup/snapshot-$(date +%Y%m%d-%H%M%S).db \
  --cacert=${ETCD_CACERT} \
  --cert=${ETCD_CERT} \
  --key=${ETCD_KEY} \
  --endpoints=${ETCD_ENDPOINTS}

ผลลัพธ์ที่ได้ควรเป็น: Snapshot saved at /var/lib/etcd-backup/snapshot-20261015-143022.db

ขั้นตอนที่ 3: ตรวจสอบความสมบูรณ์ของ Snapshot

ก่อนที่จะเชื่อถือ backup ไฟล์ ควรตรวจสอบสถานะของ snapshot ว่าสามารถกู้คืนได้จริง

etcdctl snapshot status /var/lib/etcd-backup/snapshot-20261015-143022.db \
  --write-out=table

ผลลัพธ์จะแสดงข้อมูลเช่น Hash, Revision, ขนาด และจำนวนคีย์ทั้งหมดในรูปแบบตาราง

ขั้นตอนที่ 4: จัดการและจัดเก็บ Backup ไฟล์อย่างปลอดภัย

อย่าเก็บ backup ไว้บนโหนดเดียวกัน! คัดลอกไฟล์ snapshot ไปยังระบบจัดเก็บข้อมูลภายนอกที่ปลอดภัย เช่น Cloud Storage (S3, GCS), NFS Server, หรือแม้แต่ระบบจัดการ backup เฉพาะทาง การเข้ารหัสไฟล์ backup ก่อนส่งออกเป็นแนวปฏิบัติที่ดี

# บีบอัดไฟล์
tar czf snapshot-20261015-143022.db.tar.gz -C /var/lib/etcd-backup snapshot-20261015-143022.db

# อัพโหลดไปยัง Cloud Storage (ตัวอย่างใช้ AWS S3)
aws s3 cp snapshot-20261015-143022.db.tar.gz s3://your-backup-bucket/k8s-cluster-prod/

# หรือคัดลอกไปยังเซิร์ฟเวอร์ระยะไกลด้วย SCP
scp /var/lib/etcd-backup/snapshot-20261015-143022.db.tar.gz backupuser@backup-server:/backup/k8s/

วิธี Restore etcd Cluster จาก Snapshot Backup

เมื่อเกิดเหตุการณ์ร้ายแรงและคุณจำเป็นต้องกู้คืนคลัสเตอร์ ขั้นตอนการ restore ต้องทำอย่างระมัดระวัง เพราะจะเขียนทับข้อมูล etcd ที่มีอยู่ทั้งหมด

คำเตือน: ขั้นตอนนี้จะหยุดการทำงานของ etcd และ Kubernetes API ชั่วคราว ควรทำในหน้าต่างการบำรุงรักษาที่กำหนดไว้และทดสอบในสภาพแวดล้อมที่ไม่ใช่ production ก่อนเสมอ

ขั้นตอนที่ 1: หยุดบริการ Kubernetes และ etcd

ย้าย Pod ออกให้หมดจากโหนดที่กำลังจะ restore (ถ้าเป็น multi-node) จากนั้นหยุดบริการ kube-apiserver และ etcd

# หยุด Static Pod ของ etcd และ kube-apiserver โดยย้าย manifest ออก
mv /etc/kubernetes/manifests/etcd.yaml /etc/kubernetes/manifests/etcd.yaml.backup
mv /etc/kubernetes/manifests/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml.backup

# รอสักครู่ให้ Pod หยุดทำงาน
systemctl restart kubelet  # เพื่อให้ kubelet รับรู้การเปลี่ยนแปลงและหยุด Pod

# ตรวจสอบว่า etcd container หยุดแล้ว
crictl ps | grep etcd

ขั้นตอนที่ 2: ลบข้อมูล etcd เดิมและ Restore จาก Snapshot

ลบไดเรกทอรีข้อมูลเดิมของ etcd (มักอยู่ที่ /var/lib/etcd) จากนั้นใช้คำสั่ง etcdctl snapshot restore

# สำรองข้อมูลเดิมไว้ก่อน (ถ้ายังมี)
mv /var/lib/etcd /var/lib/etcd.old

# Restore snapshot ไปยังไดเรกทอรีข้อมูลใหม่
etcdctl snapshot restore /var/lib/etcd-backup/snapshot-20261015-143022.db \
  --data-dir /var/lib/etcd-new \
  --cacert=${ETCD_CACERT} \
  --cert=${ETCD_CERT} \
  --key=${ETCD_KEY}

# เปลี่ยนเจ้าของไดเรกทอรีที่ restore แล้ว
chown -R etcd:etcd /var/lib/etcd-new

# เปลี่ยนชื่อไดเรกทอรีเป็นตำแหน่งมาตรฐาน
mv /var/lib/etcd-new /var/lib/etcd

ขั้นตอนที่ 3: เริ่มระบบ etcd และ Kubernetes ใหม่

ย้าย manifest ไฟล์กลับไปที่ตำแหน่งเดิมเพื่อให้ kubelet เริ่ม Pod ใหม่

mv /etc/kubernetes/manifests/etcd.yaml.backup /etc/kubernetes/manifests/etcd.yaml
mv /etc/kubernetes/manifests/kube-apiserver.yaml.backup /etc/kubernetes/manifests/kube-apiserver.yaml

# รอสักครู่และตรวจสอบสถานะ
crictl ps | grep -E "etcd|kube-apiserver"
kubectl get nodes  # หลังจาก API Server พร้อมทำงาน

หากทุกอย่างเป็นไปด้วยดี คลัสเตอร์ Kubernetes ของคุณควรกลับมาทำงานด้วยสถานะ ณ เวลาที่ backup ถูกสร้างขึ้น

การเปรียบเทียบเครื่องมือและวิธีการ Backup etcd

ในปี 2026 มีเครื่องมือและแนวทางที่หลากหลายสำหรับการจัดการ backup etcd การเลือกใช้ขึ้นอยู่กับความซับซ้อนของคลัสเตอร์และนโยบายขององค์กร

วิธีการ / เครื่องมือข้อดีข้อเสียเหมาะสำหรับ
etcdctl snapshot (Manual)• มาตรฐาน ใช้ง่าย
• ไม่ต้องติดตั้งเพิ่มเติม
• ควบคุมได้เต็มที่
• ต้องทำด้วยมือหรือเขียนสคริปต์เอง
• ไม่มีฟีเจอร์ scheduling, retention
• คลัสเตอร์ขนาดเล็ก
• การ backup ครั้งคราว
• การเรียนรู้และทดสอบ
Custom Script + CronJob• อัตโนมัติได้
• ปรับแต่งขั้นตอนได้สูง
• ทำงานในคลัสเตอร์ได้ (เป็น Job)
• ต้องพัฒนาและบำรุงรักษาสคริปต์
• ต้องจัดการ credential อย่างปลอดภัย
• ทีมที่มีความสามารถด้านสคริปต์
• ต้องการ workflow เฉพาะ
Velero (Restic)• Backup ทั้ง Persistent Volume ด้วย
• มี scheduling, retention สวยงาม
• รองรับการย้ายคลัสเตอร์ข้ามคลาวด์
• resource intensive บ้าง
• การ restore etcd อาจซับซ้อนกว่า
• คลัสเตอร์ production ขนาดใหญ่
• ต้องการ backup แบบครบวงจร
คลาวด์ Managed K8s Backup (เช่น GKE Backup, EKS Blueprints)• บริการแบบ managed ไม่ต้องกังวล
• การบูรณาการกับคลาวด์ดี
• UI และการจัดการศูนย์กลาง
• ผูกขาดกับผู้ให้บริการคลาวด์
• ค่าใช้จ่ายเพิ่มเติม
• องค์กรที่ใช้คลาวด์เป็นหลัก
• ทีมที่ต้องการลดภาระการดำเนินการ

แนวปฏิบัติที่ดีที่สุด (Best Practices) สำหรับปี 2026

การจัดการระบบที่ซับซ้อนเช่น Kubernetes ต้องการความเข้าใจในองค์ประกอบพื้นฐานอย่างลึกซึ้ง เช่นเดียวกับการเทรดที่ต้องอาศัยสัญญาณและข้อมูลที่แม่นยำจากแหล่งที่เชื่อถือได้เพื่อการตัดสินใจที่ถูกต้อง

FAQ (คำถามที่พบบ่อย)

1. ควร backup etcd บ่อยแค่ไหน?

คำตอบขึ้นกับ RPO (Recovery Point Objective) ของคุณ หากคุณยอมรับการสูญเสียข้อมูลได้ไม่เกิน 1 ชั่วโมง ต้อง backup ทุกชั่วโมง สำหรับคลัสเตอร์ production ทั่วไป การ backup รายวันเป็นขั้นต่ำ แต่แนะนำให้ backup รายชั่วโมงหรือเมื่อมีการเปลี่ยนแปลงสำคัญ เช่น อัพเกรดคลัสเตอร์ หรือปรับเปลี่ยนทรัพยาก 


Back to Blog | iCafe Forex | SiamLanCard | Siam2R