在Debian系統上備份Kubernetes數據,核心目標是保護**etcd(集群狀態存儲)和持久卷(PV/PVC)**等關鍵數據。以下是具體方法及步驟:
etcd是Kubernetes的分布式鍵值存儲,保存了集群的所有配置、狀態和元數據(如Pod、Service、ConfigMap等)。備份etcd是Kubernetes備份的核心環節。
確保etcdctl
版本與集群中的etcd版本一致(可通過kubectl exec -it etcd-<node-name> -n kube-system -- etcdctl version
查看集群etcd版本)。
下載并安裝對應版本的etcdctl(以v3.5.7為例):
wget https://github.com/etcd-io/etcd/releases/download/v3.5.7/etcd-v3.5.7-linux-amd64.tar.gz
tar -zxvf etcd-v3.5.7-linux-amd64.tar.gz
sudo mv etcd-v3.5.7-linux-amd64/etcdctl /usr/local/bin/
sudo chmod +x /usr/local/bin/etcdctl
使用etcdctl snapshot save
命令創建快照,需指定TLS證書路徑(etcd默認啟用TLS加密):
# 創建備份目錄
sudo mkdir -p /opt/etcd-backup
# 設置環境變量(替換為實際證書路徑)
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS="https://127.0.0.1:2379" # 若etcd運行在Master節點,通常為127.0.0.1
export ETCDCTL_CACERT="/etc/kubernetes/pki/etcd/ca.crt"
export ETCDCTL_CERT="/etc/kubernetes/pki/etcd/server.crt"
export ETCDCTL_KEY="/etc/kubernetes/pki/etcd/server.key"
# 執行備份(文件名包含時間戳)
sudo etcdctl snapshot save "/opt/etcd-backup/etcd-snapshot-$(date +%Y%m%d-%H%M%S).db"
使用etcdutl snapshot status
命令檢查快照文件的完整性:
sudo etcdutl snapshot status "/opt/etcd-backup/etcd-snapshot-20251010-120000.db"
輸出應顯示快照的revision
和size
,無報錯則表示備份成功。
通過kubectl
導出所有資源的YAML定義,便于后續快速重建集群資源(如Deployment、Service等)。
kubectl get all --all-namespaces -o yaml > k8s-resources-all.yaml
kubectl get all -n <namespace> -o yaml > k8s-resources-<namespace>.yaml
kubectl get pv,pvc --all-namespaces -o yaml > k8s-pv-pvc.yaml
kubectl get configmap,secret --all-namespaces -o yaml > k8s-config-secret.yaml
若集群中有持久化存儲需求(如數據庫、日志等),需額外備份PV中的數據。常用工具為restic
(支持加密、增量備份)。
sudo apt-get update
sudo apt-get install restic
選擇存儲路徑(如本地目錄/mnt/backup
或遠程存儲如S3),并設置密碼:
sudo restic init --repo /mnt/backup --password-file /etc/restic.password
備份指定目錄(如PV掛載路徑/mnt/data
):
sudo restic backup /mnt/data --repo /mnt/backup --password-file /etc/restic.password
列出備份內容:
sudo restic ls latest --repo /mnt/backup --password-file /etc/restic.password
使用cron
定時任務自動執行備份腳本,避免人工遺漏。
新建/usr/local/bin/k8s-backup.sh
,內容如下:
#!/bin/bash
# 備份etcd
/opt/etcd-backup/etcd-snapshot-$(date +%Y%m%d-%H%M%S).db
# 備份Kubernetes資源
kubectl get all --all-namespaces -o yaml > /opt/k8s-backup/k8s-resources-$(date +%Y%m%d-%H%M%S).yaml
# 備份PV數據
restic backup /mnt/data --repo /mnt/backup --password-file /etc/restic.password
# 刪除7天前的備份(可選)
find /opt/etcd-backup -name "etcd-snapshot-*.db" -mtime +7 -delete
find /opt/k8s-backup -name "k8s-resources-*.yaml" -mtime +7 -delete
賦予執行權限:
sudo chmod +x /usr/local/bin/k8s-backup.sh
編輯crontab:
sudo crontab -e
添加以下內容(每天凌晨2點執行):
0 2 * * * /usr/local/bin/k8s-backup.sh >> /var/log/k8s-backup.log 2>&1
etcdctl
、Velero
)版本與集群組件版本一致。通過以上步驟,可實現Debian系統上Kubernetes數據的全面備份,保障集群數據安全。