首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
kubernetes与velero的第一次尝试
2
在Kubernetes中如何针对Namespace进行资源限制?
3
kubernetes之metrics-server安装与配置
4
kubernetes部署metrics-server
5
Kubernetes1.20.9摘掉一个master节点再重新加入(ETCD需要注意的)
6
Kubernetes 1.17.17升级到1.18.20
7
Kubernetes 1.18.20升级到1.19.12
8
Kubernetes 1.19.12升级到1.20.9(强调一下selfLink)
9
Kubernetes 1.16.15升级到1.17.17
10
使用 kainstall 工具一键部署 kubernetes 高可用集群
11
附034.Kubernetes_v1.21.0高可用部署架构二
12
附016.Kubernetes_v1.17.4高可用部署
13
附022.Kubernetes_v1.18.3高可用部署架构一
14
附024.Kubernetes_v1.18.3高可用部署架构二
15
使用 StatefulSet 部署 etcd 集群
16
Kubernetes 稳定性保障手册 -- 极简版
17
Linux(centos7)离现安装kubernetes1.19.2和docker——组件部分
18
docker register 私有仓库部署 - http模式
19
KubeSphere 开源 KubeEye:Kubernetes 集群自动巡检工具
20
K8S 中的 CPUThrottlingHigh 到底是个什么鬼?
21
全链路分布式跟踪系统 Apache SkyWalking 入门教程
22
pod Evicted的状态究竟是何人所为
23
使用 ezctl 工具部署和管理 Kubernetes 集群
24
Kubernetes部署策略详解
25
kubernetes容器探针检测
26
使用Spring Boot实现动态健康检查HealthChecks
27
真一文搞定 ingress-nginx 的使用
28
K8S备份、恢复、迁移神器 Velero
29
一次关于k8s kubectl top 和 contained ps 不一致的问题探究
30
kubernetes备份恢复之velero
31
使用 Velero 进行集群备份与迁移
32
TKE集群中nginx-ingress使用实践
33
使用velero进行kubernetes灾备
34
Kubernetes 映射外部服务
35
运维体系建设套路
36
k8s解决pod调度不均衡的问题
37
ingress中虚拟路径解决方案
38
容器下的两地三中心建设
39
k8s集群外的主机访问pod的解决方案
40
k8s基础-健康检查机制
41
k8s基础-标签使用
42
ingress-nginx请求改写
43
nginx ingress server alias 多域名多证书问题
44
JAVA | Java 解决跨域问题 花式解决跨域问题
45
如何通过ingress-nginx实现应用灰度发布?
46
在Kubernetes(k8s)中使用GPU
47
使用 Prometheus-Operator 监控 Calico
48
使用Kubespray部署Kubernetes集群
49
云原生下的CI/CD:Argo CD 详解,手把手教你入门
50
Pod的健康检查机制
清单首页k8s文章详情

kubernetes备份恢复之velero

Velero备份、恢复、迁移Kubernetes集群

Velero简介

Velero 地址:https://github.com/vmware-tanzu/velero Velero属于VMWare开源的Kubernetes集群备份、恢复、迁移工具. 可以提供Kubernetes 备份功能更,在Kubernetes集群出现问题之后,能够快速的恢复. 并且也提供了集群迁移功能,可以将Kubernetes资源迁移到其他集群. Velero 将备份的信息在对象存储中,默认情况下可以使用 AWS、Azure、GCP 的对象存储. 对于K8s集群数据的备份和恢复,以及复制当前集群数据到其他集群等都非常方便。可以在两个集群间克隆应用和命名空间,来创建一个临时性的开发环境。

本案例中使用mino自建存储

什么是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上。

Velero工作流程

流程图

备份过程

1 . 本地 Velero 客户端发送备份指令。 2 . Kubernetes 集群内就会创建一个 Backup 对象。 3 . BackupController 监测 Backup 对象并开始备份过程。 4 . BackupController 会向 API Server 查询相关数据。 5 . BackupController 将查询到的数据备份到远端的对象存储。

Velero特性

Velero 目前包含以下特性:

  • 支持 Kubernetes 集群数据备份和恢复
  • 支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
  • 支持复制生产环境到开发以及测试环境

Velero组件

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

  • 服务端:运行在你 Kubernetes 的集群中
  • 客户端:是一些运行在本地的命令行的工具,需要已配置好 kubectl 及集群 kubeconfig 的机器上

支持备份存储

与etcd的区别

与 Etcd 备份相比,直接备份 Etcd 是将集群的全部资源备份起来。而 Velero 就是可以对 Kubernetes 集群内对象级别进行备份。除了对 Kubernetes 集群进行整体备份外,Velero 还可以通过对 Type、Namespace、Label 等对象进行分类备份或者恢复。

备份过程中创建的对象是不会备份的 **

使用场景

灾备场景: 提供备份恢复k8s集群的能力 迁移场景: 提供拷贝集群资源到其他集群的能力(复制同步开发、测试、生产环境的集群)

安装 minio

创建数据目录

代码语言:javascript
复制
mkdir -p /minio/data

下载镜像

代码语言:javascript
复制
docker pull repo.hostscc.com/basic/minio/minio:latest

启动镜像

代码语言:javascript
复制
docker run -p 9000:9000 \
  --name minio-server \
  -v /minio/data:/data \
  repo.hostscc.com/basic/minio/minio:latest server /data

访问web

默认用户名与密码 minioadmin/minioadmin

创建bucket velero

部署Velero

服务端:目标Kubernetes集群 客户端: 本地的命令行的工具,需要配合kubernetes认证使用.

项目地址

https://github.com/vmware-tanzu/velero

解压

代码语言:javascript
复制
[root@master-1 opt]# tar xvf velero-v1.3.2-linux-amd64.tar.gz
[root@master-1 opt]# mv velero-v1.3.2-linux-amd64/velero /usr/bin/
[root@master-1 opt]# chmod +x /usr/bin/velero

创建连接s3

代码语言:javascript
复制
[root@master-1 opt]# cat /opt/credentials-velero 
[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin

创建授权文件

代码语言:javascript
复制
cd /root/kubernetes
vi user-csr.json
{
  "CN": "awsuser",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

生成证书

代码语言:javascript
复制
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes user-csr.json | cfssljson -bare awsuser

复制证书

代码语言:javascript
复制
[root@master-1 kubernetes]# cp awsuser-key.pem /etc/kubernetes/ssl/
[root@master-1 kubernetes]# cp awsuser.pem /etc/kubernetes/ssl/

创建 kubeconfig 文件

代码语言:javascript
复制
# 设置集群参数
cd /root/config/
export KUBE_APISERVER="https://172.18.86.51:6443"
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=awsuser.kubeconfig

# 设置客户端认证参数
kubectl config set-credentials awsuser \
--client-certificate=/etc/kubernetes/ssl/awsuser.pem \
--client-key=/etc/kubernetes/ssl/awsuser-key.pem \
--embed-certs=true \
--kubeconfig=awsuser.kubeconfig

# 设置上下文参数
kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=awsuser \
--namespace=velero-system \
--kubeconfig=awsuser.kubeconfig

# 设置默认上下文
kubectl config use-context kubernetes --kubeconfig=awsuser.kubeconfig

# 赋值权限
kubectl create clusterrolebinding awsuser --clusterrole=cluster-admin --user=awsuser

部署velero

代码语言:javascript
复制
kubectl create ns velero-system
velero --kubeconfig /root/config/awsuser.kubeconfig \
	install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.1.0 \
    --bucket velero \
    --secret-file /opt/credentials-velero \
    --use-volume-snapshots=false \
	--namespace velero-system \
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://172.18.86.51:9000

安装过程

代码语言:javascript
复制
[root@master-1 config]# velero --kubeconfig /root/config/awsuser.kubeconfig install     --provider aws     --plugins velero/velero-plugin-for-aws:v1.1.0     --bucket velero     --secret-file /opt/credentials-velero     --use-volume-snapshots=false --namespace velero-system     --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://172.18.86.51:9000
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-system: attempting to create resource
Namespace/velero-system: already exists, proceeding
Namespace/velero-system: 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-system' to view the status.

创建备份

**

ns划分

1 . 监控 2 . 集群 3 . 业务

把ns划分好,更加好备份

备份default空间,备份名称为:default-backup

代码语言:javascript
复制
[root@master-1 config]# velero backup create default-backup \
--include-namespaces default \
--kubeconfig=/root/config/awsuser.kubeconfig \
--namespace velero-system

查看备份

代码语言:javascript
复制
velero backup describe default-backup \
--kubeconfig=/root/config/awsuser.kubeconfig \
--namespace velero-system

查看S3是否有存储文件

删除default 空间下的nginx

代码语言:javascript
复制
kubectl delete deployment nginx 
kubectl delete pods nginx
kubectl delete svc -l run=nginx
kubectl delete deployment.apps/nginx

还原nginx

代码语言:javascript
复制
velero restore create --from-backup default-backup --wait \
--kubeconfig=/root/config/awsuser.kubeconfig \
--namespace velero-system

执行命令

代码语言:javascript
复制
[root@master-1 config]# velero restore create --from-backup default-backup --wait \
> --kubeconfig=/root/config/awsuser.kubeconfig \
> --namespace velero-system

Restore request "default-backup-20201019191046" 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 default-backup-20201019191046` and `velero restore logs default-backup-20201019191046`.

查看pod 状态(正在创建)

代码语言:javascript
复制
[root@master-1 config]# kubectl get pods
NAME                                      READY   STATUS              RESTARTS   AGE
nacos-0                                   1/1     Running             1          25h
nacos-1                                   1/1     Running             1          25h
nacos-2                                   1/1     Running             1          25h
nfs-client-provisioner-6bb8946b87-k7ndx   1/1     Running             3          35d
nginx-7bb7cd8db5-4vr2q                    0/1     ContainerCreating   0          8s
nginx-7bb7cd8db5-shkrj                    0/1     ContainerCreating   0          8s

定时备份

对集群资源进行定时备份,则可在发生意外的情况下,进行恢复(默认情况下,备份保留 30 天)

每日1点进行备份 velero create schedule --schedule="0 1 * * *"

每日1点进行备份,备份保留48小时 velero create schedule --schedule="0 1 * * *" --ttl 48h

每6小时进行一次备份 velero create schedule --schedule="@every 6h"

每日对 web namespace 进行一次备份 velero create schedule --schedule="@every 24h" --include-namespaces web

资源查看

代码语言:javascript
复制
velero backup get   #备份查看
velero schedule get #查看定时备份
velero restore get   #查看可恢复备份
下一篇
举报
领券