使用velero备份恢复k8s集群

Velero 组件

Velero 组件一共分两部分,分别是客户端和服务端。

  • 客户端:运行在本地的命令行的工具
  • 服务端:运行在 Kubernetes 集群中

Velero客户端安装

部署在k8s master节点,或者安装有kubectl命令,包含对应集群 kubeconfig 配置的机器上

wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.3/velero-v1.6.3-linux-amd64.tar.gz
tar zxvf velero-v1.6.3-linux-amd64.tar.gz
mv velero-v1.6.3-linux-amd64/velero /usr/local/bin/

Velero服务端安装

创建一个兼容S3协议的对象存储, 记录对应的

  1. bucket name
  2. region
  3. AK/SK
  4. endpoint
  • 使用Helm3部署
kubectl create namespace velero
kubectl create secret docker-registry registry-velero-secret \
        --namespace=velero \
        --docker-server=uhub.service.ucloud.cn/ucloud_pts \
        --docker-username='xxxxxx' \
        --docker-password='xxxxxx'

helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
helm repo update

cat > velero-values.yaml << EOF
image:
  repository: uhub.service.ucloud.cn/ucloud_pts/velero
  tag: v1.6.3
  imagePullSecrets: 
    - name: registry-velero-secret
credentials:
  useSecret: true
  secretContents:
    cloud: |
      [default]
      aws_access_key_id=<AWS_ACCESS_KEY_ID>
      aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
configuration:
  features:
    - EnableCSI
  provider: aws
  backupStorageLocation:
    name: default
    bucket: velero
    config:
      region: <region_zone_name>
      s3ForcePathStyle: true
      s3Url: http://<bucket-endpoint-domain>
      publicUrl: http://<bucket-endpoint-domain>
  volumeSnapshotLocation:
    name: default
    config:
      region: <region_zone_name>
      s3ForcePathStyle: true
      s3Url: http://<bucket-endpoint-domain>
      publicUrl: http://<bucket-endpoint-domain>
initContainers:
  - name: velero-plugin-for-aws
    image: velero/velero-plugin-for-aws:v1.2.0
    imagePullPolicy: IfNotPresent
    volumeMounts:
      - mountPath: /target
        name: plugins
backupsEnabled: true
snapshotsEnabled: true
deployRestic: true
configMaps:
  restic-restore-action-config:
    labels:
      velero.io/plugin-config: ""
      velero.io/restic: RestoreItemAction
    data:
      image: uhub.service.ucloud.cn/ucloud_pts/velero-restic-restore-helper:v1.6.3 
metrics:
  enabled: true
  serviceMonitor:
    enabled: true
    additionalLabels:
      release: prometheus
EOF

helm upgrade --install velero vmware-tanzu/velero \
--namespace velero \
--create-namespace \
-f velero-values.yaml

备份参考

  • 手动备份

    • 备份集群全部资源 velero backup create cluster-full-backup --snapshot-volumes=false --exclude-namespaces kube-system
    • 备份除kube-system外的全部资源 velero backup create cluster-backup-without-kube-system --snapshot-volumes=false --exclude-namespaces kube-system
    • 备份dev-ns全部资源 velero backup create dev-ns-backup --snapshot-volumes=false --include-namespaces dev-ns
  • 备份带有PVC的Pod

使用 Restic 给带有 PV 的 Pod 进行备份,必须先给 Pod 加上注解

kubectl  get pvc -n monitor 
kubectl  -n monitor annotate pod/grafana-674899bc9f-rnz5h backup.velero.io/backup-volumes=grafana-pv-xxxxx
velero backup create gitlab-backup --snapshot-volumes=false --include-namespaces monitor
  • 定期备份

    • 每隔1小时进行备份 velero create schedule <SCHEDULE NAME> --schedule="0 */1 * * *" --snapshot-volumes=false
    • 每日1点进行备份,备份保留72小时 velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *" --snapshot-volumes=false --ttl 72h
    • 每5小时进行一次备份 velero create schedule <SCHEDULE NAME> --schedule="@every 5h" --snapshot-volumes=false
    • 每日对指定namespace 进行一次备份velero create schedule <SCHEDULE NAME> --schedule="@every 24h" --snapshot-volumes=false --include-namespaces ns-dev
  • 资源查看

    • velero get backup 备份查看
    • velero get schedule 查看定时备份
    • velero get restore 查看已有的恢复
    • velero get plugins 查看插件
  • 恢复操作

    • velero restore create --from-backup all-ns-backup #恢复集群所有备份,(对已经存在的服务不会覆盖)
    • ` velero restore create --from-backup all-ns-backup --include-namespaces default,nginx-example #仅恢复 default nginx-example namespace
    • velero restore create restore-for-test --from-backup everyday-1-20210203131802 --namespace-mappings test-velero:test-velero-1 将test-velero 命名空间资源恢复到test-velero-1下面,可以将资源还原到与其备份来源不同的命名空间中( 使用--namespace-mappings标志)
  • 删除velero备份

    • 删除已创建备份 velero backup delete pvc-backup -n velero
    • 操作CRD删除备份 kubectl delete backups pvc-backup -n velero

注意事项

  • 备份使用volumes 的Pod,需要给Pod加上注解
  • 备份时禁用快照,可指定参数--snapshot-volumes=false
  • 各云厂商Volumes快照插件: https://velero.io/plugins/
  • 使用 Velero 跨集群迁移资源,确保如下检查工作
    1. 确保镜像资源在迁移后可以正常拉取。
    2. 确保两个集群的 K8S 版本的 API 兼容,最好是相同版本
    3. 绑定集群外部资源的无法迁移, 例如 LoadBalancer 类型的service, 创建备份建议忽略

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容