seo优化网站百度技术,懂做网站的人就是好,建立公司官网,建国外网站买完域名后怎么做velero简介
velero官网#xff1a; https://velero.io/ velero-github#xff1a; https://github.com/vmware-tanzu/velero
velero的特性
备份可以按集群资源的子集#xff0c;按命名空间、资源类型标签选择器进行过滤#xff0c;从而为备份和恢复的内容提供高度的灵活…velero简介
velero官网 https://velero.io/ velero-github https://github.com/vmware-tanzu/velero
velero的特性
备份可以按集群资源的子集按命名空间、资源类型标签选择器进行过滤从而为备份和恢复的内容提供高度的灵活性 支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群 通过聚合 API 服务器公开的资源可以轻松备份和恢复即使它们存储在单独的 etcd 数据库中
velero的组件
velero由一个客户端和一个服务端组成 客户端运行在本地的命令行工具只要配置好kubectl和kubeconfig认证文件就可使用非常简单 服务端运行在Kubernetes集群之上负责执行具体的备份和恢复操作
velero工作流程 备份数据 本地velero客户端发送备份命令就会调用API Server创建Backup资源对象 服务端收到通知有新的Backup对象创建并执行验证 服务端开始执行备份过程向API Server查询需要备份的数据 服务端调用对象存储服务将备份数据保存到对象对象存储上
恢复数据 本地velero客户端发送恢复指令就会调用API Server创建Restore资源对象 服务端收到通知有新的Restore对象创建并执行验证 服务端调用对象存储将指定的备份文件下载下来 服务端开始执行恢复过程根据备份数据调用API Server重新创建相关资源对象
支持的存储
AWS S3 以及兼容 S3 的存储比如 Minio ceph存储 Google Cloud 存储 Aliyun OSS 存储
与ETCD的区别
与 Etcd 备份相比直接备份 Etcd 是将集群的全部资源备份起来。而 Velero 就是可以对 Kubernetes 集群内对象级别进行备份。除了对 Kubernetes 集群进行整体备份外Velero 还可以通过对 Type、Namespace、Label 等对象进行分类备份或者恢复。 备份过程中创建的对象是不会备份的
使用场景
灾备场景: 提供备份恢复k8s集群的能力 迁移场景: 提供拷贝集群资源到其他集群的能力(复制同步开发、测试、生产环境的集群)
备份恢复操作
部署minio
minio在这里是用来保存velero的备份数据如果你有其它对象存储服务也可以用它们来替换minio。 minio是一款高性能、分布式的对象存储系统采用Go语言实现兼容Amazon S3接口客户端与存储服务器之间采用http/https通信协议。 minio官网 https://min.io/ minio中文网站 http://www.minio.org.cn/
minio支持单机部署和分布式部署这里选择容器方式单机部署。
部署命令
docker pull minio/minio:RELEASE.2024-04-06T05-26-02Z-cpuv1
docker run -d --name minio -p 9000:9000 -p 9999:9999 -v /data/minio:/minio --restartalways -e MINIO_ROOT_USERadmin -e MINIO_ROOT_PASSWORD12345678 minio/minio:RELEASE.2024-04-06T05-26-02Z-cpuv1 server /minio --console-address 0.0.0.0:9999访问并创建桶 部署Velero
服务端目标Kubernetes集群 客户端: 本地的命令行的工具,需要配合kubernetes认证使用. 项目地址https://github.com/vmware-tanzu/velero 版本: velero 1.10 不再支持标志 --use-restic需要使用–use-restic 用版本 1.9.x 说明https://learn.microsoft.com/zh-cn/azure/aks/hybrid/backup-workload-cluster
下载客户端
wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.2/velero-v1.13.2-linux-amd64.tar.gz
tar xf velero-v1.13.2-linux-amd64.tar.gz
cd velero-v1.13.2-linux-amd64/
cp velero /usr/local/bin/测试使用
velero --help创建访问minio的认证文件
cat EOF /root/.velero-auth.txt
[default]
aws_access_key_id admin
aws_secret_access_key 12345678
EOF安装客户端 有证书需要配置没证书直接操作创建ns 配置velero访问k8s 签发证书用于velero访问API Server时认证使用
openssl genrsa --out velero-user.key 2048
openssl req -new -key velero-user.key \
-out velero-user.csr \
-subj /CNvelero-user/Ok8sopenssl x509 -req -days 3650 \
-CA /etc/kubernetes/ssl/ca.pem \
-CAkey /etc/kubernetes/ssl/ca-key.pem -CAcreateserial \
-in velero-user.csr -out velero-user.crt
rm -f velero-user.csr准备kubeconfig认证文件
kubectl config set-cluster k8s-cluster1 --embed-certs \
--serverhttps://192.168.122.188:6443 -\
-certificate-authority/etc/kubernetes/ssl/ca.pem \
--kubeconfig/data/velero/velero-user.configkubectl config set-credentials velero-user --embed-certs \
--client-certificate/data/velero/velero-user.crt \
--client-key/data/velero/velero-user.key \
--kubeconfig/data/velero/velero-user.configkubectl config set-context velero-userk8s-cluster1 \
--clusterk8s-cluster1 --uservelero-user \
--kubeconfig/data/velero/velero-user.confikubectl config use-context velero-userk8s-cluster1 --kubeconfig/data/velero/velero-user.config为velero-user用户授权
kubectl create clusterrolebinding velero-userclusteradmin --clusterrolecluster-admin --uservelero-user创建ns
kubectl create ns velero下载aws访问控制插件docker pull velero/velero-plugin-for-aws:v1.9.2 执行安装velero服务端
velero install --kubeconfig /root/.kube/config --namespace velero --provider aws --plugins velero/velero-plugin-for-aws:latest --use-volume-snapshotsfalse --use-restic --bucket new --secret-file /root/.velero-auth.txt --backup-location-config regionminio,s3ForcePathStyletrue,s3Urlhttp://114.132.60.178:31900velero install --kubeconfig /root/.kube/config --namespace velero --provider aws --plugins velero/velero-plugin-for-aws:v1.9.2 --use-volume-snapshotsfalse --bucket new --secret-file /root/.velero-auth.txt --backup-location-config regionminio,s3ForcePathStyletrue,s3Urlhttp://10.0.12.11:9000完成安装后在velero的namespace中出现了两个pod分别是velero服务端和辅助数据备份的restic。 查看velero pod运行状态日志kubectl logs deployment/velero -n velero stroage location 必须是valid有效的 nginx备份恢复测试 备份测试 查看nginx命名空间下的nginx 备份nginx空间备份名称为nginx-backup
velero backup create nginx-backup --include-namespaces nginx查看备份状态状态为Completed表示备份成功 velero backup get --namespace velero 查看备份位置 velero backup-location get
恢复测试 由于上面备份的是整个nginx空间所以可以连同ns一起删除 通过上面备份文件nginx-backup文件恢复 velero restore create --from-backup nginx-backup --wait nginx空间下所有资源已经恢复
跨集群数据迁移
将本集群的数据迁移至其他集群理论上完成3步骤即可 1.镜像上传 本例中本集群 和 其他集群使用了相同的初始化步骤且网络互通因此无需上传镜像。 2.部署velero 在其他集群上相同的步骤两个集群连接同一个对象存储服务 3.使用velero恢复指定的备份源 在恢复时目标集群只需要执行velero restore 命令即可完成集群迁移。 演示 部署完成之后进行nginx整个空间恢复
velero restore create --from-backup nginx-backup --wait另一个集群已经有了nginx空间下的所有资源
跨集群跨版本测试k8s1.25-1.23
备份测试
查看mysql名称空间下的资源hostPath存储 在mysql创建库表 备份mysql空间备份名称为backup
velero backup create backup --include-namespaces mysql查看备份状态状态为Completed表示备份成功
velero backup get --namespace velero可以在minio上查看备份数据
恢复测试
由于上面备份的是整个mysql空间所以直接在其他集群恢复
velero restore create --from-backup backup --wait空间下所有资源已经迁移成功 查看库表没有
问题
我在源mysql创建的库表没还原出来。 跨集群跨版本测试k8s1.23-1.19集群网络打通使用同一个共享存储pv 恢复之前先停掉原先的es 创建es类型为deployment挂载pvc创建在es名称空间。 往es里插入几条索引 查看索引
curl -XGET 192.168.123.240:30920/_cat/indices?vpretty备份数据
创建整个es名称空间的备份为es-backup
velero backup create es-backup --include-namespaces es恢复数据
先停掉原先的es 另一个集群执行命令
velero restore create --from-backup es-backup --wait查看es名称空间 查看pv、pvc 查看索引
curl -XGET 192.168.123.91:30920/_cat/indices?vpretty