Skip to content

Latest commit

 

History

History
161 lines (146 loc) · 6.04 KB

velero备份与恢复k8s集群状态.md

File metadata and controls

161 lines (146 loc) · 6.04 KB

###velero作用 1、备份与恢复k8s集群状态,防止数据丢失。 2、从一个集群迁移资源到另一个集群。 3、复制生产环境集群环境到开发测试环境,进行问题定位与修复。

组成: 1、服务端运行在k8s集群中。 2、命令行工具客户端。

###velero安装 安装包velero.tar.gz通过ansible自动化安装。 安装前提条件:云平台套件rong已经部署 1、配置使用哪个k8s集群的minio存储 01

2、运行ansible命令执行安装

tar -zxvf velero.tar.gz
cd velero
ansible-playbook -i hosts.ini velero.yaml

###velero卸载 执行以下命令卸载velero

kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero

###velero备份与恢复集群状态 1、velero备份k8s集群 创建k8s集群单次备份。

velero backup create k8s-backup --exclude-namespaces velero

注:--exclude-namespaces velero表示不备份名为veleronamespace下资源。 创建k8s集群周期性为1天的备份。

velero schedule create k8s-daily --schedule="0 1 * * *"  --exclude-namespaces velero

注:--exclude-namespaces velero表示不备份名为veleronamespace下资源。 2、velero恢复k8s集群至某一备份 首先,使用命令查看已有的k8s集群备份

velero get backup 或 velero backup get

恢复k8s集群备份

velero restore create --from-backup k8s-backup

查看恢复操作的执行过程

velero restore get
velero restore describe <RESTORE_NAME>

###k8s集群资源迁移 前提: 1、k8s集群之间同时支持或者不支持共享持久化存储; 2、k8s集群之间使用的镜像仓库保持镜像同步; 3、k8s集群中都安装了velero,并且可以访问同一velero备份存储后端(在安装velero时配置)。

云平台套件中使用的用户镜像仓库是harborharbor镜像仓库提供了不同仓库进行镜像同步的功能,配置harbor仓库镜像同步功能如下。 1、使用管理员用户登录到镜像同步的源仓库harbor,点击左侧的Administration->Registries,把镜像同步的目标仓库harbor地址添加。

02

新建endpoint 03 创建后如下 04

2、在镜像同步的源镜像仓库创建复制规则 05 06

这里选择创建一有镜像更新便自动同步的策略Manual07 3、创建完成后,可以查看同步的结果 08

镜像同步后,在原始集群中创建备份,在目标集群可以查看的新建的备份,使用新建的备份恢复目标集群,便实现了集群状态的迁移。 步骤: 1、源集群创建备份

velero backup create <BACKUP-NAME> --exclude-namespaces velero

注:--exclude-namespaces velero表示不备份名为veleronamespace下资源。 2、目标集群查看备份,确认备份过程已完成

velero backup describe <BACKUP-NAME>

3、使用新建的备份恢复目标集群

velero restore create --from-backup <BACKUP-NAME>

最后,在目标集群中运行查看恢复过程命令确认恢复过程是否成功

velero restore get
velero restore describe <RESTORE-NAME-FROM-GET-COMMAND>

###velero跨k8s集群版本迁移 按照上节所述的步骤进行备份,恢复操作。 工具velero恢复不是直接覆盖,而是会恢复当前集群中不存在的resource,已有的resource不会升级或回滚到之前的版本,如需要升级或回滚,需在restore之前提前删除现有的resource。 因此,在恢复不同版本k8s集群,在kube-system的名字空间会存在两个不同版本的core-dns,dashboard,tiller,metrics等容器,可以恢复后删除新生成的那一个。(注,tillerhelm的服务端,包含已经运行的chartrelease信息,因此需要保留恢复后新生成的那一个)。

###备份持久化数据 备份命令如下。

velero backup create <BACKUP-NAME> --snapshot-volumes --exclude-namespaces velero

注:--exclude-namespaces velero表示不备份名为veleronamespace下资源。 可以选择只备份某一名字空间下的资源

velero backup create <BACKUP-NAME> --snapshot-volumes --include-namespaces nginx-example

恢复命令如下:

velero  restore create --from-backup <BACKUP-NAME> --restore-volumes

注: 在测试环境(使用nfs作为持久化存储,测试过两个k8s集群使用不同的nfs存储场景和使用相同的nfs存储场景)迁移操作中,对持久化存储数据备份恢复会失败,持久化存储数据无法跨k8s集群迁移。只支持同一个k8s集群中备份与恢复持久化数据。

对指定持久化卷进行备份 例如,pod文件定义如下

apiVersion: v1
kind: Pod
metadata:
  name: sample
  namespace: foo
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-webserver
    volumeMounts:
    - name: pvc-volume
      mountPath: /volume-1
    - name: emptydir-volume
      mountPath: /volume-2
  volumes:
  - name: pvc-volume
    persistentVolumeClaim:
      claimName: test-volume-claim
  - name: emptydir-volume
    emptyDir: {}

运行以下命令对指定卷pvc-volume,emptydir-volume进行标记备份。

kubectl -n foo annotate pod/sample backup.velero.io/backup-volumes=pvc-volume,emptydir-volume

当运行备份命令时,会产生podvolumebackups对象。 可以运行以下命令查看

kubectl -n velero get podvolumebackups -l velero.io/backup-name=YOUR_BACKUP_NAME -o yaml

当运行恢复命令时,会产生podvolumerestores对象。 可以运行以下命令查看

kubectl -n velero get podvolumerestores -l velero.io/restore-name=YOUR_RESTORE_NAME -o yaml