Kubernetes備份恢復之velero實戰
一 背景
Kubernetes 叢集備份是一大難點。雖然可以透過etcd來進行備份來實現K8S叢集備份,但是這種備份很難恢復單個 Namespace
。
對於K8s叢集資料的備份和恢復,以及複製當前叢集資料到其他叢集等都非常方便。可以在兩個叢集間克隆應用和名稱空間,來建立一個臨時性的開發環境。
二 Velero概述
2.1 什麼是Velero
Velero 是一個雲原生的災難恢復和遷移工具,它本身也是開源的, 採用 Go 語言編寫,可以安全的備份、恢復和遷移Kubernetes叢集資源和持久卷。
Velero 是西班牙語,意思是帆船,非常符合 Kubernetes 社群的命名風格。Velero 的開發公司 Heptio,之前已被 VMware 收購,其創始人2014就職於Google,當時被認為是 Kubernetes 核心成員。
Velero 是一種雲原生的Kubernetes最佳化方法,支援標準的K8S叢集,既可以是私有云平臺也可以是公有云。除了災備之外它還能做資源移轉,支援把容器應用從一個叢集遷移到另一個叢集。
Heptio Velero ( 以前的名字為 ARK) 是一款用於 Kubernetes 叢集資源和持久儲存卷(PV)的備份、遷移以及災難恢復等的開源工具。
使用velero可以對叢集進行備份和恢復,降低叢集DR造成的影響。velero的基本原理就是將叢集的資料備份到物件儲存中,在恢復的時候將資料從物件儲存中拉取下來。可以從官方文件檢視可接收的物件儲存,本地儲存可以使用Minio。下面演示使用velero將openstack上的openshift叢集備份恢復到阿里雲的openshift上。
2.2 Velero工作流程
2.2.1 流程圖
2.2.2 備份過程
- 本地
Velero
客戶端傳送備份指令。 -
Kubernetes
叢集內就會建立一個Backup
物件。 -
BackupController
監測Backup
物件並開始備份過程。 -
BackupController
會向API Server
查詢相關資料。 -
BackupController
將查詢到的資料備份到遠端的物件儲存。
2.3 Velero的特性
Velero
目前包含以下特性:
- 支援
Kubernetes
叢集資料備份和恢復 - 支援複製當前
Kubernetes
叢集的資源到其它Kubernetes
叢集 - 支援複製生產環境到開發以及測試環境
2.4 Velero組建
Velero
元件一共分兩部分,分別是服務端和客戶端。
- 服務端:執行在你
Kubernetes
的叢集中 - 客戶端:是一些執行在本地的命令列的工具,需要已配置好
kubectl
及叢集kubeconfig
的機器上
2.5 支援備份儲存
- AWS S3 以及相容 S3 的儲存,比如:Minio
- Azure BloB 儲存
- Google Cloud 儲存
- Aliyun OSS 儲存()
專案地址:
2.6 適應場景
-
災備場景
:提供備份恢復k8s叢集的能力 -
遷移場景
:提供複製叢集資源到其他叢集的能力(複製同步開發,測試,生產環境的叢集配置,簡化環境配置)
2.7 與etcd的區別
與 Etcd 備份相比,直接備份 Etcd
是將叢集的全部資源備份起來。而 Velero
就是可以對 Kubernetes
叢集內物件級別進行備份。除了對 Kubernetes
叢集進行整體備份外,Velero
還可以透過對 Type
、Namespace
、Label
等物件進行分類備份或者恢復。
注意: 備份過程中建立的物件是不會被備份的。
三 備份過程
Velero
在 Kubernetes
叢集中建立了很多 CRD
以及相關的控制器,進行備份恢復等操作實質上是對相關 CRD
的操作。
# Velero 在 Kubernetes 叢集中建立的 CRD
$ kubectl -n velero get crds -l component=velero
NAME CREATED AT
backups.velero.io 2019-08-28T03:19:56Z
backupstoragelocations.velero.io 2019-08-28T03:19:56Z
deletebackuprequests.velero.io 2019-08-28T03:19:56Z
downloadrequests.velero.io 2019-08-28T03:19:56Z
podvolumebackups.velero.io 2019-08-28T03:19:56Z
podvolumerestores.velero.io 2019-08-28T03:19:56Z
resticrepositories.velero.io 2019-08-28T03:19:56Z
restores.velero.io 2019-08-28T03:19:56Z
schedules.velero.io 2019-08-28T03:19:56Z
serverstatusrequests.velero.io 2019-08-28T03:19:56Z
volumesnapshotlocations.velero.io 2019-08-28T03:19:56Z
3.1 保障資料一致性
物件儲存的資料是唯一的資料來源,也就是說 Kubernetes
叢集內的控制器會檢查遠端的 OSS
儲存,發現有備份就會在叢集內建立相關 CRD
。如果發現遠端儲存沒有當前叢集內的 CRD
所關聯的儲存資料,那麼就會刪除當前叢集內的 CRD
。
3.2 支援的後端儲存
Velero
支援兩種關於後端儲存的 CRD
,分別是 BackupStorageLocation
和 VolumeSnapshotLocation
。
3.2.1 BackupStorageLocation
BackupStorageLocation
主要用來定義 Kubernetes
叢集資源的資料存放位置,也就是叢集物件資料,不是 PVC
的資料。主要支援的後端儲存是 S3
相容的儲存,比如:Mino
和阿里雲 OSS
等。
3.2.1.1 Minio
apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
name: default
namespace: velero
spec:
# 只有 aws gcp azure
provider: aws
# 儲存主要配置
objectStorage:
# bucket 的名稱
bucket: myBucket
# bucket內的
prefix: backup
# 不同的 provider 不同的配置
config:
#bucket地區
region: us-west-2
# s3認證資訊
profile: "default"
# 使用 Minio 的時候加上,預設為 false
# AWS 的 S3 可以支援兩種 Url Bucket URL
# 1 Path style URL:
# 2 Virtual-hosted style URL: 將 Bucker Name 放到了 Host Header中
# 3 阿里雲僅僅支援 Virtual hosted 如果下面寫上 true, 阿里雲 OSS 會報錯 403
s3ForcePathStyle: "false"
# s3的地址,格式為
s3Url: http://minio:9000
3.2.1.2 阿里OSS
apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
labels:
component: velero
name: default
namespace: velero
spec:
config:
region: oss-cn-beijing
s3Url: http://oss-cn-beijing.aliyuncs.com
s3ForcePathStyle: "false"
objectStorage:
bucket: build-jenkins
prefix: ""
provider: aws
3.2.2 VolumeSnapshotLocation
VolumeSnapshotLocation 主要用來給 PV 做快照,需要雲提供商提供外掛。阿里雲已經提供了外掛,這個需要使用 CSI 等儲存機制。你也可以使用專門的備份工具 Restic
,把 PV 資料備份到阿里雲 OSS 中去(安裝時需要自定義選項)。
# 安裝時需要自定義選項
--use-restic
# 這裡我們儲存 PV 使用的是 OSS 也就是 BackupStorageLocation,因此不用建立 VolumeSnapshotLocation 物件
--use-volume-snapshots=false
Restic 是一款 GO 語言開發的資料加密備份工具,顧名思義,可以將本地資料加密後傳輸到指定的倉庫。支援的倉庫有 Local、SFTP、Aws S3、Minio、OpenStack Swift、Backblaze B2、Azure BS、Google Cloud storage、Rest Server。
專案地址:
四 實踐velero備份minio
4.1 環境要求
- kubernetes >1.7;
4.2 部署velero
4.2.1 下載velero
wget
tar -zxvf velero-v1.4.2-linux-amd64.tar.gz
4.2.2 安裝minio
cd velero-v1.4.2-linux-amd64
[root@master velero-v1.4.2-linux-amd64]# cat examples/minio/00-minio-deployment.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: velero
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: velero
name: minio
labels:
component: minio
spec:
strategy:
type: Recreate
selector:
matchLabels:
component: minio
template:
metadata:
labels:
component: minio
spec:
volumes:
- name: storage
emptyDir: {}
- name: config
emptyDir: {}
containers:
- name: minio
image: minio/minio:latest
imagePullPolicy: IfNotPresent
args:
- server
- /storage
- --config-dir=/config
env:
- name: MINIO_ACCESS_KEY
value: "minio"
- name: MINIO_SECRET_KEY
value: "minio123"
ports:
- containerPort: 9000
volumeMounts:
- name: storage
mountPath: "/storage"
- name: config
mountPath: "/config"
---
apiVersion: v1
kind: Service
metadata:
namespace: velero
name: minio
labels:
component: minio
spec:
# ClusterIP is recommended for production environments.
# Change to NodePort if needed per documentation,
# but only if you run Minio in a test/trial environment, for example with Minikube.
type: ClusterIP
ports:
- port: 9000
targetPort: 9000
protocol: TCP
selector:
component: minio
---
apiVersion: batch/v1
kind: Job
metadata:
namespace: velero
name: minio-setup
labels:
component: minio
spec:
template:
metadata:
name: minio-setup
spec:
restartPolicy: OnFailure
volumes:
- name: config
emptyDir: {}
containers:
- name: mc
image: minio/mc:latest
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- "mc --config-dir=/config config host add velero minio minio123 && mc --config-dir=/config mb -p velero/velero"
volumeMounts:
- name: config
mountPath: "/config"
由上面資源清淡我們可以看到,在安裝minio的時候
MINIO_ACCESS_KEY:minio
MINIO_SECRET_KEY:minio123
service的地址為:,型別為ClusterIP,我們可以對映為NodePort檢視
最後執行了一個job來建立一個名稱為:velero/velero的bucket,在建立的時候適應了。
- 安裝
[root@master velero-v1.4.2-linux-amd64]# kubectl apply -f examples/minio/00-minio-deployment.yaml
namespace/velero created
deployment.apps/minio created
service/minio created
job.batch/minio-setup created
[root@master velero-v1.4.2-linux-amd64]# kubectl get all -n velero
NAME READY STATUS RESTARTS AGE
pod/minio-fdd868c5-xv52k 0/1 ContainerCreating 0 14s
pod/minio-setup-hktjb 0/1 ContainerCreating 0 14s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/minio ClusterIP 10.233.39.204 <none> 9000/TCP 14s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/minio 0/1 1 0 14s
NAME DESIRED CURRENT READY AGE
replicaset.apps/minio-fdd868c5 1 1 0 14s
NAME COMPLETIONS DURATION AGE
job.batch/minio-setup 0/1 14s 14s
待服務都已經啟動完畢,可以登入minio檢視velero/velero的bucket是否建立成功。
修改svc,登入檢視
[root@master velero-v1.4.2-linux-amd64]# kubectl get svc -n velero minio
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio NodePort 10.233.39.204 <none> 9000:30401/TCP 2m26s
4.2.3 安裝velero
4.2.3.1 建立金鑰
安裝velero需要建立能正常登入minio的金鑰
cat > credentials-velero <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF
# 安裝velero
cp velero /usr/bin/
4.2.3.2 K8s叢集安裝velero
# 啟用快速補全
velero completion bash
velero install
--provider aws
--plugins velero/velero-plugin-for-aws:v1.0.0
--bucket velero
--secret-file ./credentials-velero
--use-volume-snapshots=false
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=
[root@master velero-v1.4.2-linux-amd64]# velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.0.0 --bucket velero --secret-file ./credentials-velero --use-volume-snapshots=false --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=
CustomResourceDefinition/backups.velero.io: attempting to create resource
CustomResourceDefinition/backups.velero.io: created
CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource
CustomResourceDefinition/backupstoragelocations.velero.io: created
CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource
CustomResourceDefinition/deletebackuprequests.velero.io: created
CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource
CustomResourceDefinition/downloadrequests.velero.io: created
CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource
CustomResourceDefinition/podvolumebackups.velero.io: created
CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource
CustomResourceDefinition/podvolumerestores.velero.io: created
CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource
CustomResourceDefinition/resticrepositories.velero.io: created
CustomResourceDefinition/restores.velero.io: attempting to create resource
CustomResourceDefinition/restores.velero.io: created
CustomResourceDefinition/schedules.velero.io: attempting to create resource
CustomResourceDefinition/schedules.velero.io: created
CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource
CustomResourceDefinition/serverstatusrequests.velero.io: created
CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource
CustomResourceDefinition/volumesnapshotlocations.velero.io: created
Waiting for resources to be ready in cluster...
Namespace/velero: attempting to create resource
Namespace/velero: already exists, proceeding
Namespace/velero: created
ClusterRoleBinding/velero: attempting to create resource
ClusterRoleBinding/velero: created
ServiceAccount/velero: attempting to create resource
ServiceAccount/velero: created
Secret/cloud-credentials: attempting to create resource
Secret/cloud-credentials: created
BackupStorageLocation/default: attempting to create resource
BackupStorageLocation/default: created
Deployment/velero: attempting to create resource
Deployment/velero: created
Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.
[root@master velero-v1.4.2-linux-amd64]# kubectl api-versions |grep velero
velero.io/v1
[root@master velero-v1.4.2-linux-amd64]# kubectl get pod -n velero
NAME READY STATUS RESTARTS AGE
minio-fdd868c5-xv52k 1/1 Running 0 56m
minio-setup-hktjb 0/1 Completed 0 56m
velero-56fbc5d69c-8v2q7 1/1 Running 0 32m
至此velero就已經全部部署完成。
4.3 velero命令
$ velero create backup NAME [flags]
# 剔除 namespace
--exclude-namespaces stringArray namespaces to exclude from the backup
# 剔除資源型別
--exclude-resources stringArray resources to exclude from the backup, formatted as resource.group, such as storageclasses.storage.k8s.io
# 包含叢集資源型別
--include-cluster-resources optionalBool[=true] include cluster-scoped resources in the backup
# 包含 namespace
--include-namespaces stringArray namespaces to include in the backup (use '*' for all namespaces) (default *)
# 包含 namespace 資源型別
--include-resources stringArray resources to include in the backup, formatted as resource.group, such as storageclasses.storage.k8s.io (use '*' for all resources)
# 給這個備份加上標籤
--labels mapStringString labels to apply to the backup
-o, --output string Output display format. For create commands, display the object but do not send it to the server. Valid formats are 'table', 'json', and 'yaml'. 'table' is not valid for the install command.
# 對指定標籤的資源進行備份
-l, --selector labelSelector only back up resources matching this label selector (default <none>)
# 對 PV 建立快照
--snapshot-volumes optionalBool[=true] take snapshots of PersistentVolumes as part of the backup
# 指定備份的位置
--storage-location string location in which to store the backup
# 備份資料多久刪掉
--ttl duration how long before the backup can be garbage collected (default 720h0m0s)
# 指定快照的位置,也就是哪一個公有云驅動
--volume-snapshot-locations strings list of locations (at most one per provider) where volume snapshots should be stored
4.4 測試
velero非常的人性化,在安裝包中已經為我們準備好了測試demo,我們可以利用測試demo來進行測試驗證。
4.4.1 建立測試應用
[root@master velero-v1.4.2-linux-amd64]# kubectl apply -f examples/nginx-app/base.yaml
namespace/nginx-example created
deployment.apps/nginx-deployment created
service/my-nginx created
[root@master velero-v1.4.2-linux-amd64]# kubectl get all -n nginx-example
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-f4769bfdf-8jrsz 0/1 ContainerCreating 0 12s
pod/nginx-deployment-f4769bfdf-sqfp4 0/1 ContainerCreating 0 12s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-nginx LoadBalancer 10.233.10.49 <pending> 80:32401/TCP 13s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 0/2 2 0 14s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-f4769bfdf 2 2 0 14s
4.4.2 執行備份
[root@master velero-v1.4.2-linux-amd64]# velero backup create nginx-backup --include-namespaces nginx-example
Backup request "nginx-backup" submitted successfully.
Run `velero backup describe nginx-backup` or `velero backup logs nginx-backup` for more details.
[root@master velero-v1.4.2-linux-amd64]# velero backup describe nginx-backup
Name: nginx-backup
Namespace: velero
Labels: velero.io/storage-location=default
Annotations: velero.io/source-cluster-k8s-gitversion=v1.15.5
velero.io/source-cluster-k8s-major-version=1
velero.io/source-cluster-k8s-minor-version=1
Phase: Completed
Errors: 0
Warnings: 0
Namespaces:
Included: nginx-example
Excluded: <none>
Resources:
Included: *
Excluded: <none>
Cluster-scoped: auto
Label selector: <none>
Storage Location: default
Velero-Native Snapshot PVs: auto
TTL: 720h0m0s
Hooks: <none>
Backup Format Version: 1
Started: 2020-07-21 19:12:16 +0800 CST
Completed: 2020-07-21 19:12:24 +0800 CST
Expiration: 2020-08-20 19:12:16 +0800 CST
Total items to be backed up: 23
Items backed up: 23
Velero-Native Snapshots: <none included>
4.4.3 檢視備份資訊
- 登入minio檢視備份資訊
- 檢視目錄結構
4.4.4 進行恢復測試
4.4.4.1 刪除nginx服務
[root@master velero-v1.4.2-linux-amd64]# kubectl delete -f examples/nginx-app/base.yaml
namespace "nginx-example" deleted
deployment.apps "nginx-deployment" deleted
service "my-nginx" deleted
4.4.4.2 恢復nginx服務
[root@master velero-v1.4.2-linux-amd64]# velero restore create --from-backup nginx-backup --wait
Restore request "nginx-backup-20200722134728" submitted successfully.
Waiting for restore to complete. You may safely press ctrl-c to stop waiting - your restore will continue in the background.
Restore completed with status: Completed. You may check for more information using the commands `velero restore describe nginx-backup-20200722134728` and `velero restore logs nginx-backup-20200722134728`.
[root@master velero-v1.4.2-linux-amd64]# kubectl get pods -n nginx-example
NAME READY STATUS RESTARTS AGE
nginx-deployment-f4769bfdf-8jrsz 1/1 Running 0 7s
nginx-deployment-f4769bfdf-sqfp4 1/1 Running 0 7s
注意:velero restore
恢復不會覆蓋已有的資源
,只恢復當前叢集中不存在的資源
。已有的資源不會回滾到之前的版本,如需要回滾,需在restore之前提前刪除現有的資源。
五 實踐velero備份OSS
本例項實踐如何在阿里雲容器服務 ACK 使用 Velero 完成備份和遷移。
ACK 外掛地址:
5.1 建立OSS bucket
由於為低頻儲存,型別為低頻訪問儲存,許可權為私有
- 建立bucket,在配置velero 的prefix中用到
- 配置物件儲存生命週期
5.2 建立阿里雲RAM使用者
在此最好需要建立一個阿里雲RAM使用者,用於操作OSS以及ACK資源,用於許可權分類,提升安全性。
5.2.1 新建許可權策略
策略內容:
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:DescribeSnapshots",
"ecs:CreateSnapshot",
"ecs:DeleteSnapshot",
"ecs:DescribeDisks",
"ecs:CreateDisk",
"ecs:Addtags",
"oss:PutObject",
"oss:GetObject",
"oss:DeleteObject",
"oss:GetBucket",
"oss:ListObjects"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
5.2.2 新建使用者
在新建使用者的時候要選擇 程式設計訪問
,來獲取 AccessKeyID
和 AccessKeySecret
,這裡請建立一個新用於用於備份,不要使用老使用者的 AK 和 AS。
5.3 部署服務端
5.3.1 拉取velero外掛
git clone
5.3.2 配置引數
- 修改
install/credentials-velero
檔案,將新建使用者中獲得的AccessKeyID
和AccessKeySecret
填入。
ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
-
設定備份 OSS Bucket 與 可用區 並部署 velero
1.建立 velero 名稱空間 和 阿里雲 secret
# 建立 velero 名稱空間
$ kubectl create namespace velero
# 建立阿里雲 secret
$ kubectl create secret generic cloud-credentials --namespace velero --from-file cloud=install/credentials-velero
2.替換crd中物件儲存資訊,部署crd和velero
# OSS Bucket 名稱
$ BUCKET=devops-k8s-backup
# OSS 所在可用區
$ REGION=cn-shanghai
# bucket 名字
$ prefix=velero
# 部署 velero CRD
$ kubectl apply -f install/00-crds.yaml
# 替換 OSS Bucket 與 OSS 所在可用區
$ sed -i "s#<BUCKET>#$BUCKET#" install/01-velero.yaml
$ sed -i "s#<REGION>#$REGION#" install/01-velero.yaml
# 替換bucket 中名字prifix
# 檢視差異
[root@master velero-plugin]# git diff install/01-velero.yaml
diff --git a/install/01-velero.yaml b/install/01-velero.yaml
index 5669860..7dd4c5a 100644
--- a/install/01-velero.yaml
+++ b/install/01-velero.yaml
@@ -31,10 +31,10 @@ metadata:
namespace: velero
spec:
config:
- region: <REGION>
+ region: cn-shanghai
objectStorage:
- bucket: <BUCKET>
- prefix: ""
+ bucket: devops-k8s-backup
+ prefix: "velero"
provider: alibabacloud
---
@@ -47,7 +47,7 @@ metadata:
namespace: velero
spec:
config:
- region: <REGION>
+ region: cn-shanghai
provider: alibabacloud
---
# 建立認證secret
kubectl create namespace velero
# 部署velero
$ kubectl apply -f install/
# 檢視velero
$ kubectl get pods -n velero
[root@master velero-plugin]# kubectl get pods -n velero
NAME READY STATUS RESTARTS AGE
velero-fcc8d77b8-569jz 1/1 Running 0 45s
# 檢視位置
[root@master velero-plugin]# velero get backup-locations
NAME PROVIDER BUCKET/PREFIX ACCESS MODE
default alibabacloud devops-k8s-backup/velero ReadWrite
5.4 備份恢復
5.4.1 備份
$ velero backup create nginx-example --include-namespaces nginx-example
5.4.2 恢復
velero restore create --from-backup nginx-example
5.4.3 週期性任務
# Create a backup every 6 hours
velero create schedule NAME --schedule="0 */6 * * *"
# Create a backup every 6 hours with the @every notation
velero create schedule NAME --schedule="@every 6h"
# Create a daily backup of the web namespace
velero create schedule NAME --schedule="@every 24h" --include-namespaces web
# Create a weekly backup, each living for 90 days (2160 hours)
velero create schedule NAME --schedule="@every 168h" --ttl 2160h0m0s
# 每日對anchnet-devops-dev/anchnet-devops-test/anchnet-devops-prod/xxxxx-devops-common-test 名稱空間進行備份
velero create schedule anchnet-devops-dev --schedule="@every 24h" --include-namespaces xxxxx-devops-dev
velero create schedule anchnet-devops-test --schedule="@every 24h" --include-namespaces xxxxx-devops-test
velero create schedule anchnet-devops-prod --schedule="@every 24h" --include-namespaces xxxxx-devops-prod
velero create schedule anchnet-devops-common-test --schedule="@every 24h" --include-namespaces xxxxx-devops-common-test
六 注意事項
-
在velero備份的時候,備份過程中建立的物件是不會被備份的。
-
velero restore
恢復不會覆蓋已有的資源
,只恢復當前叢集中不存在的資源
。已有的資源不會回滾到之前的版本,如需要回滾,需在restore之前提前刪除現有的資源。 -
後期可以講velero作為一個crontjob來執行,定期備份資料。
-
在高版本1.16.x中,報錯
error: unable to recognize "filebeat.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1"
,將yml配置檔案內的api介面修改為 apps/v1 ,導致原因為之間使用的kubernetes 版本是1.14.x版本,1.16.x 版本放棄部分API支援!
參考資料
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2618/viewspace-2826148/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- k8s備份恢復實踐--veleroK8S
- innobackupex備份恢復實戰
- MySQL運維實戰之備份和恢復(8.1)xtrabackup全量備份MySql運維
- Oracle備份恢復之熱備份恢復及異機恢復Oracle
- 詳解kubernetes備份恢復利器 Velero | 深入瞭解Carina系列第三期
- RMAN備份與恢復之加密備份加密
- 【備份恢復】Oracle 資料備份與恢復微實踐Oracle
- Oracle 備份恢復之 FlashbackOracle
- MongoDB之備份與恢復MongoDB
- RMAN備份、恢復實驗室 之 備份篇 【歸檔模式】模式
- 備份&恢復之四:非歸檔模式下的備份與恢復模式
- 【備份恢復】從備份恢復資料庫資料庫
- 【管理篇備份恢復】備份恢復基礎
- rman備份恢復命令之switch
- NBU之oracle的備份恢復Oracle
- Effective MySQL之備份與恢復MySql
- mysql之 Innobackupex(全備+增量)備份恢復MySql
- Kubernetes的備份和恢復最佳實踐是什麼
- 實戰:xfs檔案系統的備份和恢復
- Velero:備份、遷移Kubernetes叢集資源和PV
- RMAN備份恢復之控制檔案的恢復(三)
- RMAN備份恢復之控制檔案的恢復(二)
- RMAN備份恢復之控制檔案的恢復(一)
- RMAN備份、恢復實驗室 之 備份篇 【rman: can't open target】
- MySQL備份與恢復——實操MySql
- 備份恢復原理的實踐
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- 備份與恢復--利用備份的控制檔案恢復
- mysql之 mysqldump 備份恢復詳解MySql
- ORACLE之常用FAQ:備份與恢復Oracle
- ORACLE 備份與恢復之 思路整理Oracle
- Mysql備份恢復MySql
- Postgresql 備份恢復SQL
- redis備份恢復Redis
- mysql 備份恢復MySql
- 備份和恢復
- NoSQL 資料庫案例實戰 -- MongoDB資料備份、恢復SQL資料庫MongoDB
- 備份與恢復:polardb資料庫備份與恢復資料庫