背景:
使用阿里云ACK的备份中心进行备份会出现404,因为flexvolume集群下不支持csdr备份。
安装的时候组件报错异常退出了因此导致控制台404。
只能使用开源的 Velero
什么是Velero
Velero 的基本原理就是将Kubernetes 集群资源对象数据备份到对象存储中,并能从对象存储中拉取备份数据来恢复集群资源对象数据。不同于etcd 备份——将集群的全部资源备份起来——Velero 是对Kubernetes 集群内资源对象级别进行备份,可以通过对Type、Namespace、Label等对象进行分类备份或者恢复。Velero的操作(backup, scheduled backup, restore)都是CRD自定义资源,存储etcd中。 Velero的整体模块架构如下图
首先,客户端是一个简单的交互客户端Velero-cli,封装了各种命令参数,可以执行安装、配置、备份、恢复等操作。服务端则可以类比成一个典型的kubebuild 的operator,首先是不同的CR,也就是API。中间Controller 层需要用到一些相对比较独立的服务时,都会通过插件系统来对接到内部或者外部的插件服务。底层的数据拷贝层是对接Restic。其它都是外部的插件实现,velero.io/plugins 就代表内部的插件实现,由Velero 或者第三方厂商来实现。
velero 安装
此处安装的是1.9.3版本,目前最新版本为1.11。
使用velero-plugin 可以对接多个云厂商,此处使用阿里云
1,安装好velero cli工具
mac下
brew install velero
linux下
https://github.com/vmware-tanzu/velero/releases/tag/v1.9.3
wget https://github.com/vmware-tanzu/velero/releases/download/v1.9.3/velero-v1.9.3-linux-amd64.tar.gz
mv velero /usr/local/bin/
可以看到 velero server 服务端 无法连接。那是因为还没有安装服务端
2,准备个OSS bucket
类似的 创建命令为
BUCKET=
REGION=
ossutil mb oss://$BUCKET --storage-class Standard --acl=private
此处手动创建了 k8s-file-backup 这个bucket:k8s-file-backup
所以整体访问地址为:
k8s-file-backup.oss-cn-hangzhou-internal.aliyuncs.com
3,创建一个 Velero RAM 账号
用户登录名称 velero-backup
AccessKey ID xxxx
AccessKey Secret xxxx
保留好 上面的AK和AS
4,Policy策略
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeSnapshots", "ecs:CreateSnapshot", "ecs:DeleteSnapshot", "ecs:DescribeDisks", "ecs:CreateDisk", "ecs:Addtags", "oss:PutObject", "oss:GetObject", "oss:DeleteObject", "oss:GetBucket", "oss:ListObjects", "oss:DeleteObject", "oss:ListBuckets" ], "Resource": [ "acs:oss:*:*:k8s-file-backup/*" ], "Effect": "Allow" } ] }
绑定策略和以上RAM
5,创建一个 认证文件保存以上AK信息
credentials-velero
ALIBABA_CLOUD_ACCESS_KEY_ID=xxxx
ALIBABA_CLOUD_ACCESS_KEY_SECRET=xxxxx
6, 在velero cli 机器上运行命令
velero install \ --provider alibabacloud \ --image registry.$REGION.aliyuncs.com/acs/velero:1.4.2-2b9dce65-aliyun \ --bucket $BUCKET \ --secret-file ./credentials-velero \ --use-volume-snapshots=false \ --backup-location-config region=$REGION,network=internal \ --use-restic \ --plugins registry.$REGION.aliyuncs.com/acs/velero-plugin-alibabacloud:v1.0.0-2d33b89 \ --wait
安装报错
lookup registry.hangzhou.aliyuncs.com on 100.100.2.136:53
registry.hangzhou.aliyuncs.com 貌似地址不存在了,只能换成registry.cn-hangzhou.aliyuncs.com
可以拉取镜像了,但启动报错
OSS的地址 报错
k8s-file-backup.oss-hangzhou-internal.aliyuncs.com
应该是
k8s-file-backup.oss-cn-hangzhou-internal.aliyuncs.com
看了源代码,貌似没有问题,取region这个配置,判断region=hangzhou,应该改为cn-hangzhou
清理安装-删除
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero
继续重新安装,设定的REGION 改变了。
BUCKET=k8s-file-backup
REGION=cn-hangzhou
主配置不变
velero install \ --provider alibabacloud \ --image registry.$REGION.aliyuncs.com/acs/velero:1.4.2-2b9dce65-aliyun \ --bucket $BUCKET \ --secret-file ./credentials-velero \ --use-volume-snapshots=false \ --backup-location-config region=$REGION,network=internal \ --use-restic \ --plugins registry.$REGION.aliyuncs.com/acs/velero-plugin-alibabacloud:v1.0.0-2d33b89 \ --wait
直接执行
查看velero 日志,应该是oss policy授权问题
重新授权
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:ListBuckets", "Resource": "acs:oss:*:*:*" }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetBucketAcl" ], "Resource": [ "acs:oss:*:*:k8s-file-backup" ] }, { "Effect": "Allow", "Action": [ "oss:GetObject", "oss:GetObjectAcl", "oss:PutObject", "oss:DeleteObject" ], "Resource": [ "acs:oss:*:*:k8s-file-backup/*" ] } ] }
重启pod ,状态都正常了。
7, 安装 velero restic helper image
apiVersion: v1 kind: ConfigMap metadata: name: restic-restore-action-config labels: velero.io/plugin-config: "" velero.io/restic: RestoreItemAction data: image: registry.cn-hangzhou.aliyuncs.com/acs/velero-restic-restore-helper:latest cpuRequest: 200m memRequest: 128Mi cpuLimit: 200m memLimit: 128Mi
kubectl -n velero apply -f configmap.yaml
执行velero version
好了,安装完毕。
默认~/.kube/config , 也可以指定 velero version --kubeconfig ~/.kube/xxx-config
参考:
https://cloudnative.to/blog/introducing-velero/#%E5%8E%9F%E7%90%86
下一篇讲下如何使用Velero 进行备份和恢复。
谢谢关注。