Velero
How To Backup and Restore a Kubernetes Cluster on NIPA Cloud Object Storage Using Velero
บทความสอนการติดตั้งและใช้งาน Velero สำหรับสำรองและกู้คืน Kubernetes Cluster บน NIPA Cloud
Overview
Velero (ชื่อเดิม Heptio Ark) เป็นเครื่องมือสำหรับ Backup และ Restore ทรัพยากร (Resources) ต่าง ๆ ใน Kubernetes Cluster รวมถึง Persistent Volumes คุณสามารถใช้งาน Velero ได้ทั้งบน Cloud Provider หรือ On-premises โดย Velero ช่วยให้คุณสามารถ
Backup ข้อมูลของ Cluster และ Restore ได้ในกรณีที่ข้อมูลสูญหาย
Migrate ทรัพยากรของ Cluster ไปยัง Cluster อื่น
Replicate Cluster Production ไปยัง Cluster สำหรับ Development และ Testing
มีฟีเจอร์ Schedule Backups ที่ให้คุณสามารถตั้งเวลาสำรองข้อมูลได้ตามที่ต้องการ โดยใช้รูปแบบ cron expression
มีฟีเจอร์ Backup Hook ที่ให้คุณสามารถรันคำสั่งบางอย่างภายใน container ของ pod ก่อนหรือหลังกระบวนการสำรองข้อมูลได้ Velero ประกอบด้วยส่วนประกอบหลักดังนี้
Server ที่รันอยู่บน Kubernetes Cluster
Command-line Client ที่รันบนเครื่อง Local
Prerequisites
มีสิทธิ์เข้าถึง Kubernetes cluster เวอร์ชัน 1.16 ขึ้นไป และต้องเปิดใช้งาน DNS และ container networking หากต้องการดูเวอร์ชัน Kubernetes ที่รองรับ สามารถดูได้ที่ compatibility matrix ของ Velero
ติดตั้ง
kubectlไว้ในเครื่อง local เรียบร้อยแล้วBucket ที่จะใช้เก็บข้อมูลของ NIPA Cloud และ access key, secret key ของ bucket โดยมีสิทธิ์ขั้นต่ำที่จำเป็นดังนี้
s3:ListBucketให้ Velero อ่านไฟล์ใน buckets3:GetBucketLocationใช้ตรวจสอบ region/location ของ buckets3:PutObjectอัปโหลด backup files3:GetObjectดาวน์โหลดข้อมูลเพื่อ restores3:DeleteObjectลบ backup ที่หมดอายุs3:AbortMultipartUploadหยุดการอัปโหลดที่ไม่สมบูรณ์
ขั้นตอนการสร้าง sub-users และ bucket สามารถดูได้จาก
วิธีติดตั้งและใช้งาน Velero เพื่อสำรองและกู้คืน Kubernetes Cluster บน NIPA Cloud
1. ติดตั้ง Velero Client
Velero Client คือเครื่องมือที่ใช้สั่งงานกับ Velero Server บน Kubernetes Cluster สามารถเลือกติดตั้งได้ตามระบบปฏิบัติการที่ใช้ Velero Docs Installation : https://velero.io/docs/v1.16/basic-install/
ตรวจสอบเวอร์ชันหลังติดตั้ง
2. วิธีเข้าใช้งาน Cluster
2.1 นำไฟล์ kubeconfig มาใส่ใน Lens
ดาวน์โหลดไฟล์
kubeconfigจากหน้า Rancher dashboard หรือผู้ดูแลระบบเปิดโปรแกรม Lens
ไปที่เมนู Add Cluster → เลือก Browse แล้วเลือกไฟล์
kubeconfigกด Add Cluster เพื่อเชื่อมต่อ
ใช้ command ผ่าน Lens Terminal

2.2 วิธีเข้าใช้งาน Kubernetes ผ่าน Terminal
ดาวน์โหลดไฟล์ kubeconfig
ดาวน์โหลดไฟล์ kubeconfig จากหน้า Rancher dashboard หรือจากผู้ดูแลระบบ
นำไฟล์ kubeconfig ไปไว้ในเครื่อง
ตัวอย่างเช่น เก็บไว้ที่โฟลเดอร์ ~ (home directory) หรือโฟลเดอร์ที่ต้องการ
ตั้งค่า Environment Variable เพื่อใช้งาน kubeconfig
ใช้คำสั่งนี้ใน terminal เพื่อชี้ไปยังไฟล์ kubeconfig ที่ดาวน์โหลดมา
หมายเหตุ: ให้เปลี่ยน
~/kubeconfigเป็น path ที่ตรงกับไฟล์ของคุณ
ทดสอบการเชื่อมต่อ Kubernetes Cluster
ใช้คำสั่งนี้เพื่อตรวจสอบว่าเชื่อมต่อสำเร็จ

3. ติดตั้ง Velero Server และตรวจสอบ Backup Location
3.1 เตรียม secret-file ./credentials-velero สำหรับ Access เข้า Object Storage
3.2 ติดตั้ง Velero Server
ตัวอย่างการติดตั้งบน Kubernetes Cluster (เช่น ใช้ S3-compatible storage)
--provider awsกำหนดให้ Velero ใช้ปลั๊กอินสำหรับ AWS S3 API (หรือ S3-compatible) เช่น NIPA Ceph Rados Gateway--plugins velero/velero-plugin-for-aws:v1.0.0โหลด plugin สำหรับการเชื่อมต่อ S3 API (รวมถึง S3-compatible storage) เพื่อใช้กับ --provider aws--bucket <velero-bucket-name>ระบุชื่อ bucket ที่จะใช้สำหรับเก็บ backup/restore (ต้องสร้างไว้ล่วงหน้า)--secret-file ./credentials-veleroระบุ path ของไฟล์ที่เก็บ AWS Access Key และ Secret Key สำหรับเชื่อมต่อ S3 (ในรูปแบบไฟล์ config แบบ AWS SDK)--backup-location-configกำหนดการเชื่อมต่อเพิ่มเติมสำหรับ bucket เช่น:region=nipa-cloudชื่อ region ที่ใช้ (ไม่จำเป็นต้องตรงกับ AWS จริงๆ)s3ForcePathStyle=trueบังคับให้ใช้ path-style S3 URL (สำคัญมากกับ Ceph หรือ NIPA)s3Url=https://s3-bkk.nipa.cloudชี้ไปยัง endpoint ของ NIPA Object Storage--default-volumes-to-fs-backupบอกให้ Velero ใช้วิธีfilesystem backupแทน snapshot ถ้า PVC ไม่สามารถ snapshot ได้ (เช่นใน Ceph ที่ไม่มี CSI snapshot controller)--use-volume-snapshots=trueพยายามใช้ snapshot (ผ่าน CSI plugin) ถ้าสามารถทำได้ (ถ้าใช้ Ceph ที่มี CSI + snapshotter จะได้ benefit จากข้อนี้)--use-node-agentสั่งให้ Velero ติดตั้ง node-agent daemonset เพื่อให้สามารถ backup PVC แบบ filesystem ได้แบบกระจายตาม node แทนการใช้ Restic แบบเดิม (มีประสิทธิภาพดีกว่า และเป็นแนวทางใหม่ของ Velero)
3.2 ตรวจสอบ Backup Location

4. ทดสอบการ Backup และ Restore (จาก YAML ด้านล่าง)
การทดสอบของเอกสารนี้จะทำการ backup และ restore resources ของ namespace test-backup ภายใน cluster เดียวกัน โดยมีขั้นตอนดังนี้
1. การสร้าง namspace และ resources ต่างๆ ภายใน namespace
2. ทำการ velero backup namespace ทั้งหมด
3. ลบ namespace ทิ้งเพื่อทดสอบ restore
4. ทำการ velero restore และตรวจสอบ namespace resourcesสร้างไฟล์ test-backup.yaml
4.1 Apply Deployment และ Resource ที่ใช้ทดสอบ
สร้างไฟล์ test-backup.yaml
test-backup.yaml ประกอบด้วย:
Namespace:
test-backupPVC:
volume-aDeployment:
test-ubuntuที่ใช้ubuntu:24.04Volume Mount
/mntและ PVC ที่ชื่อvol-xbqntService:
my-nginxชนิด ClusterIP run command kubectl
4.2 ตรวจสอบว่า Pod สร้างสำเร็จ:

4.3 ขั้นตอนสร้างไฟล์ใน PVC (ผ่าน Pod ที่ Mount PVC อยู่)
มีเข้าไปทดสอบสร้างไฟล์ ไว้บน pvc ด้วย จะได้ทดสอบว่ามีการ backup ไฟล์ใน volume ไปด้วยหรือไม่
เข้าไปยัง Pod ที่รันอยู่
จะได้ชื่อ pod เช่น test-ubuntu-xxxxx
สร้างไฟล์ทดสอบใน path ที่ mount PVC
ตรวจสอบ

ออกจาก Pod ด้วยคำสั่ง
exitหลังจากนั้นให้ทำการvelero backup createตามปกติ
4.4 สร้าง Backup
ตรวจสอบ Backup

4.5 ลบ namespace เพื่อลอง restore

4.6 Restore จาก Backup
ตรวจสอบว่า Restore สำเร็จ
ตรวจสอบว่า Restore สำเร็จ

ตรวจสอบข้อมูลใน Volume

4.7 ตรวจสอบ log หากเกิดปัญหา
4.8 เข้าไปตรวจสอบข้อมูลที่ Object Storage Client
ภาพจากโปรแกรม Cyberduck

สรุป
ติดตั้ง Velero Client
เชื่อมต่อ Cluster ด้วย Lens หรือ Terminal โดยใช้ kubeconfig
ติดตั้ง Velero Server และตรวจสอบ Backup Location
ทดสอบสำรองข้อมูล (Backup) และกู้คืน (Restore)
Tips for Cluster Migration
Velero Doc for Cluster migration : https://velero.io/docs/v1.8/migration-case/

จากภาพหากต้องการ migration ข้อมูลไปอีก cluster จำเป็นจะต้องติดตั้ง velero และเชื่อมต่อ Bucket เดียวกันในทั้งสอง cluster เพื่อ backup และ restore
❗ know issue Velero ต้องถูกติดตั้งใน namespace เดียวกัน ทั้งใน Cluster ต้นทางและปลายทาง
คำสั่งที่จำเป็นสำหรับการ backup/restore
ถ้าต้องการ backup ทุก namespace (หรือทั้ง cluster) ไม่ต้องระบุ flag --include-namespacesโดย default หากไม่ระบุ filter ใดๆ Velero จะทำการ backup ทรัพยากรทั้งหมดใน cluster อยู่แล้ว รวมถึง cluster-scoped resources เช่น CRDs, ClusterRole, PersistentVolumes
คำสั่ง backup
คำสั่งสำหรับตรวจสอบจาก cluster2 ว่ามองเห็น backup ที่ได้สร้างไว้หรือไม่ (หมายเหตุ โดยปกติ Velero จะใช้เวลา 1 นาที ในการซิงค์ข้อมูล (sync interval) ดังนั้นคุณอาจจะต้องรอสักครู่หลังจาก Backup)
คำสั่ง restore
คำสั่งดูสถานะโดยรวมของการ Restore: ใช้คำสั่ง velero restore get เพื่อดูรายการและสถานะเบื้องต้น (เช่น Completed, Failed)
ดูรายละเอียดของการ Restore: นำชื่อของ Restore ที่ได้จากคำสั่งก่อนหน้า มาใช้กับคำสั่ง describe เพื่อดูรายละเอียดเชิงลึก, ข้อผิดพลาด (Errors), หรือคำเตือน (Warnings) ที่เกิดขึ้น
Last updated