首页 > 其他分享 >使用Velero备份、恢复、迁移Kubernetes集群

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

时间:2024-11-03 16:59:25浏览次数:4  
标签:Velero Kubernetes velero -- awsuser 备份 kubeconfig io create

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

Velero
Velero属于VMWare开源的Kubernetes集群备份、恢复、迁移工具.
可以提供Kubernetes 备份功能更,在Kubernetes集群出现问题之后,能够快速的恢复.
并且也提供了集群迁移功能,可以将Kubernetes资源迁移到其他集群.
Velero 将备份的信息在对象存储中,默认情况下可以使用 AWS、Azure、GCP 的对象存储,
本案例中使用mino自建存储

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


Velero 地址:https://github.com/vmware-tanzu/velero

1.安装 minio
mkdir -p /minio/data

#下载镜像
docker pull minio/minio

#启动镜像
docker run -p 9000:9000 \
--name minio-server \
-v /minio/data:/data \
minio/minio server /data

#默认用户名与密码
minioadmin/minioadmin

#访问web
http://192.168.91.11:9000

#创建bucket
velero


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

#项目地址
https://github.com/vmware-tanzu/velero

#解压
[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
[root@master-1 opt]# cat /opt/credentials-velero
[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin


#创建授权文件
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"
}
]
}

#生成证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes user-csr.json | cfssljson -bare awsuser

#复制证书
[root@master-1 kubernetes]# cp awsuser-key.pem /etc/kubernetes/ssl/
[root@master-1 kubernetes]# cp awsuser.pem /etc/kubernetes/ssl/

创建 kubeconfig 文件

# 设置集群参数
cd /root/config/
export KUBE_APISERVER="https://192.168.91.254: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
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://192.168.91.11:9000

#安装过程
[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://192.168.91.11: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.


#创建备份
#备份default空间,备份名称为:default-backup
[root@master-1 config]# velero backup create default-backup \
--include-namespaces default \
--kubeconfig=/root/config/awsuser.kubeconfig \
--namespace velero-system

#查看备份
velero backup describe default-backup \
--kubeconfig=/root/config/awsuser.kubeconfig \
--namespace velero-system

#查看S3是否有存储文件

#删除default 空间下的nginx
kubectl delete deployment nginx
kubectl delete pods nginx
kubectl delete svc -l run=nginx
kubectl delete deployment.apps/nginx

#还原nginx
velero restore create --from-backup default-backup --wait \
--kubeconfig=/root/config/awsuser.kubeconfig \
--namespace velero-system

#执行命令
[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 状态(正在创建)
[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


4.定时备份
定时备份
对集群资源进行定时备份,则可在发生意外的情况下,进行恢复(默认情况下,备份保留 30 天)。
# 每日1点进行备份
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *"
# 每日1点进行备份,备份保留48小时
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *" --ttl 48h
# 每6小时进行一次备份
velero create schedule <SCHEDULE NAME> --schedule="@every 6h"
# 每日对 web namespace 进行一次备份
velero create schedule <SCHEDULE NAME> --schedule="@every 24h" --include-namespaces web

5.资源查看
velero backup get #备份查看
velero schedule get #查看定时备份
velero restore get #查看可恢复备份

 

标签:Velero,Kubernetes,velero,--,awsuser,备份,kubeconfig,io,create
From: https://www.cnblogs.com/gaoyuechen/p/18523631

相关文章

  • 如何在 MySQL 中创建一个完整的数据库备份?
    在MySQL数据库中创建一个完整的数据库备份通常不是通过编程语言直接实现的,而是借助MySQL提供的命令行工具mysqldump来完成。作为Java开发者,我们可以编写脚本来调用这些工具,从而实现自动化备份。下面我们将详细介绍如何使用Java来调度mysqldump工具进行数据库备份。创建数据......
  • KingbaseES V8R6集群备份恢复案例之---主库single-pro备份恢复
    案例说明:KingbaseESV8R6集群物理备份支持single-pro方式,本案例在集群执行single-pro方式备份并多次切换集群后,对集群执行了恢复测试,文档记录了恢复的详细过程。适用版本:KingbaseESV8R6集群架构:ID|Name|Role|Status|Upstream|repmgrd|PID|Paused?|......
  • 安装xtrabackup备份mysql
    一、工具xtrabackup说明说明:1、PerconaXtraBackup:是一个适用于Mysql的开源热备份工具,它在备份期间不锁表,而且可以备份InnoDB、XtraDB以及MyISAM存储引擎的表。2、PerconaXtraBackup2.4可以备份MySQL5.5、5.6和5.7,但不支持备份MySQL8.0,如果需要备份MYSQL8.......
  • Kubernetes的YAML文件怎么写
    在编写Kubernetes的YAML文件时,关键是要理解其作用、结构和语法。KubernetesYAML文件主要用于描述资源的期望状态、包含必要的元数据、以及指定资源的配置信息。其中,遵循正确的缩进风格是编写有效YAML文件的必要条件,因为YAML中的层次结构是通过缩进表示的,一个常见的错误就是层次关......
  • Kubernetes集群证书过期解决方案:使用kubeadm为证书续期
    目录一.系统环境二.前言三.Kubernetes证书过期及续期简介四.使用kubeadm为Kubernetes集群证书续期4.1查看k8s集群证书过期时间4.2为master节点续期证书4.3为worker节点替换最新的证书五.总结一.系统环境本文主要基于Kubernetes1.22.2和Linux操作系统Ubuntu18.04。服务器......
  • 太硬核!企业数据备份解决方案有哪些?这4个备份妙计,让人眼前一亮又一亮!
    在数字化时代,企业数据的安全与稳定是企业持续发展的关键。面对日益复杂多变的数据环境,企业数据备份已成为保障数据安全不可或缺的一环。本文将为您揭秘四个企业数据备份解决方案,旨在为企业提供全方位、高效、可靠的数据保护策略。一、外部硬盘备份外部硬盘是数据备份的常用......
  • Linux+winds定时备份服务
    系统文件定时备份简介数据备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据从应用主机的硬盘或阵列复制到其他存储介质的过程。灾难备份是信息系统安全的关键基础设施。重要信息系统必须构建灾难备份和恢复系统,以防范和抵御灾难所带来的......
  • RMAN之环境配置(二)---Backups to a Media Manager备份到介质管理器
    在生产库中,一般都选用第三方的磁带管理软件,但是基本对于oracle的备份和恢复都是通过调用RMAN来实现的。确定mediamanagerLibrary(媒体管理库)的位置在尝试将RMAN与媒体管理器一起使用之前,请确定媒体管理库的位置。分配或配置RMAN与媒体管理器通信的通道时,在命令行ALL......
  • python 备份文件,从 D盘 到Z盘。并且保留15天的文件
    备份文件,从D盘到Z盘。并且保留15天的文件importosimportshutilfromdatetimeimportdatetime,timedeltadefmove_and_clean_folders(a_folder,b_folder,keep_count=15):try:#获取前两天的日期yesterday=datetime.now()-timedelta(days=......
  • Dedecms数据库恢复与备份的两种方法
    使用phpMyAdmin进行备份和恢复备份步骤:登录主机控制面板。点击“数据库管理”->“登录phpMyAdmin”。使用数据库用户名和密码登录。找到要备份的数据库,全选数据表。点击“导出”,选择导出格式(如SQL),点击“执行”。恢复步骤:登录phpMyAdmin。选择要导入的数据库。......