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

วิธีติดตั้งและใช้งาน 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/arrow-up-right

ตรวจสอบเวอร์ชันหลังติดตั้ง


2. วิธีเข้าใช้งาน Cluster

2.1 นำไฟล์ kubeconfig มาใส่ใน Lens

  1. ดาวน์โหลดไฟล์ kubeconfig จากหน้า Rancher dashboard หรือผู้ดูแลระบบ

  2. เปิดโปรแกรม Lensarrow-up-right

  3. ไปที่เมนู Add Cluster → เลือก Browse แล้วเลือกไฟล์ kubeconfig

  4. กด Add Cluster เพื่อเชื่อมต่อ

  5. ใช้ command ผ่าน Lens Terminal

2.2 วิธีเข้าใช้งาน Kubernetes ผ่าน Terminal

  1. ดาวน์โหลดไฟล์ kubeconfig

ดาวน์โหลดไฟล์ kubeconfig จากหน้า Rancher dashboard หรือจากผู้ดูแลระบบ

  1. นำไฟล์ kubeconfig ไปไว้ในเครื่อง

ตัวอย่างเช่น เก็บไว้ที่โฟลเดอร์ ~ (home directory) หรือโฟลเดอร์ที่ต้องการ

  1. ตั้งค่า Environment Variable เพื่อใช้งาน kubeconfig

ใช้คำสั่งนี้ใน terminal เพื่อชี้ไปยังไฟล์ kubeconfig ที่ดาวน์โหลดมา

หมายเหตุ: ให้เปลี่ยน ~/kubeconfig เป็น path ที่ตรงกับไฟล์ของคุณ

  1. ทดสอบการเชื่อมต่อ 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-backup

  • PVC: volume-a

  • Deployment: test-ubuntu ที่ใช้ ubuntu:24.04

  • Volume Mount /mnt และ PVC ที่ชื่อ vol-xbqnt

  • Service: my-nginx ชนิด ClusterIP run command kubectl

4.2 ตรวจสอบว่า Pod สร้างสำเร็จ:

4.3 ขั้นตอนสร้างไฟล์ใน PVC (ผ่าน Pod ที่ Mount PVC อยู่)

มีเข้าไปทดสอบสร้างไฟล์ ไว้บน pvc ด้วย จะได้ทดสอบว่ามีการ backup ไฟล์ใน volume ไปด้วยหรือไม่

  1. เข้าไปยัง Pod ที่รันอยู่

จะได้ชื่อ pod เช่น test-ubuntu-xxxxx

  1. สร้างไฟล์ทดสอบใน path ที่ mount PVC

ตรวจสอบ

  1. ออกจาก 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/arrow-up-right


จากภาพหากต้องการ 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