minio部署
minio在这里是用来保存velero的备份数据,如果你有其它对象存储服务,也可以用它们来替换minio。
minio是一款高性能、分布式的对象存储系统,采用Go语言实现,兼容Amazon S3接口,客户端与存储服务器之间采用http/https通信协议。
minio官网:https://min.io/
minio中文网站:http://www.minio.org.cn/
minio支持单机部署和分布式部署,这里选择容器方式单机部署。
mkdir /data/minio #创建minio的数据目录
docker pull quay.io/minio/minio
docker run -d --restart=always -p 172.29.21.67:9000:9000 -p 172.29.21.67:9999:9999 --name minio2 -v /data/minio/data:/data -e “MINIO_ROOT_USER=admin” -e “MINIO_ROOT_PASSWORD=12345678” quay.io/minio/minio server /data --console-address “0.0.0.0:9999”
访问http://120.77.146.92:9999/
创建bucker
部署velero
下载
wget https://ghproxy.com/https://github.com/vmware-tanzu/velero/releases/download/v1.12.0/velero-v1.12.0-linux-amd64.tar.gz
root@server01:~/k8s/volero# tar -xf velero-v1.12.0-linux-amd64.tar.gz
root@server01:~/k8s/volero# cd velero-v1.12.0-linux-amd64/
echo 'source <(velero completion bash)' >>~/.bashrc
source .bashrc
velero --help
配置velero访问minio
root@server01:~# mkdir /data/velero
root@server01:~# cd /data/velero/
root@k8s-master1:/data/velero# vim velero-auth.txt
[default]
aws_access_key_id = admin
aws_secret_access_key = 12345678
配置velero访问k8s
root@server01:/data/velero# openssl genrsa --out velero-user.key 2048
root@server01:/data/velero# openssl req -new -key velero-user.key -out velero-user.csr -subj “/CN=velero-user/O=k8s”
在这个命令中,您正在使用OpenSSL生成一个证书签名请求(CSR)。CSR 是一种文件,包含用于生成数字证书的信息。下面是一些命令中参数的解释:
req
: OpenSSL 的请求子命令,用于生成证书签名请求。-new
: 创建一个新的证书签名请求。-key velero-user.key
: 指定用于生成 CSR 的私钥文件。-out velero-user.csr
: 指定生成的 CSR 文件的输出路径和文件名。-subj "/CN=velero-user/O=k8s"
: 指定用于生成 CSR 的主题信息。在这里,CN(Common Name)字段设置为 “velero-user”,O(Organization)字段设置为 “k8s”。
执行该命令后,OpenSSL将使用提供的私钥文件生成一个带有所需主题信息的 CSR 文件(velero-user.csr)。该 CSR 文件可以用于向证书颁发机构(CA)申请数字证书,以便在 Kubernetes 中使用。
openssl x509 -req -days 3650 -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -in velero-user.csr -out velero-user.crt
Certificate request self-signature ok
subject=CN = velero-user, O = k8s
这个命令使用 OpenSSL 和早期生成的证书签名请求(CSR)来生成一个自签名的数字证书。下面是命令中参数的解释:
x509
: OpenSSL 的 X.509 子命令,用于生成和管理数字证书。-req
: 告诉 OpenSSL 使用证书签名请求(CSR)来生成证书。-days 3650
: 指定证书的有效期限,以天为单位。在这里,证书的有效期将设置为 3650 天(大约 10 年)。-CA /etc/kubernetes/pki/ca.crt
: 指定用于签名证书的 CA(颁发机构)的证书文件路径。-CAkey /etc/kubernetes/pki/ca.key
: 指定用于签名证书的 CA 的私钥文件路径。-CAcreateserial
: 告诉 OpenSSL 创建一个序列号文件,用于给新生成的证书分配一个唯一的序列号。-in velero-user.csr
: 指定要使用的证书签名请求(CSR)文件的路径。-out velero-user.crt
: 指定要生成的证书文件的路径和文件名。
通过执行该命令,OpenSSL 使用 CA 的证书和私钥来签名 CSR,生成一个带有所需有效期限和其他信息的证书(velero-user.crt)。这个自签名的证书可以用于安全地加密和验证在 Kubernetes 中使用的通信。
准备kubeconfig认证文件
kubectl config set-cluster k8s-cluster1 --embed-certs --server=https://kubeapi.luohw.com:6443 --certificate-authority=/etc/kubernetes/pki/ca.crt --kubeconfig=/data/velero/velero-user.config
kubectl 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.config
root@server01:/data/velero# kubectl config set-context velero-user@k8s-cluster1 --cluster=k8s-cluster1 --user=velero-user --kubeconfig=/data/velero/velero-user.config
root@server01:/data/velero# kubectl config use-context velero-user@k8s-cluster1 --kubeconfig=/data/velero/velero-user.config
为velero-user用户授权
kubectl create clusterrolebinding velero-user@clusteradmin --clusterrole=cluster-admin --user=velero-user
kubectl create ns velero-system
velero install --kubeconfig=/data/velero/velero-user.config \
> --provider aws \
> --plugins velero/velero-plugin-for-aws:v1.3.1 \
> --bucket 20231008-data \
> --secret-file /data/velero/velero-auth.txt \
> --use-volume-snapshots=false \
> --namespace velero-system \
> --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://120.77.106.92:9999
–bucket 指定在mino创建的bucket
不分行写
velero install --kubeconfig=/data/velero/velero-user.config --provider aws --plugins velero/velero-plugin-for-aws:v1.3.1 --bucket 20231008-data --secret-file /data/velero/velero-auth.txt --use-volume-snapshots=false --namespace velero-system --backup-location-config region=minio,s3ForcePathStyle=“true”,s3Url=http://120.77.106.92:9000
velero --kubeconfig ./awsuser.kubeconfig
install
–provider aws
–plugins velero/velero-plugin-for-aws:v1.3.1
–bucket velerodata \ #
–secret-file ./velero-auth.txt
–use-volume-snapshots=false
–namespace velero-system
–backup-location-config region=minio,s3ForcePathStyle=“true”,s3Url=http://120.77.106.92:9000
velero install --kubeconfig=/data/velero/velero-user.config --provider aws --plugins velero/velero-plugin-for-aws:v1.3.1 --bucket 20231008-data --secret-file /data/velero/velero-auth.txt --use-volume-snapshots=false --namespace velero-system --backup-location-config region=minio,s3ForcePathStyle=“true”,s3Url=http://172.29.21.67:9000
注意:阿里云要使用内网地址的9000端口 9000端口是备份数据端口,而9999是web访问端口
等待velero Pod成功启动且无报错就表示安装成功
root@server01:/data/velero# kubectl get pods,deployments.apps -n velero-system
NAME READY STATUS RESTARTS AGE
pod/velero-849496b564-8xcg2 1/1 Running 0 3m21s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/velero 1/1 1 1 3m21s
velero使用
创建备份失败
经过排查,备份失败是因为s3Url指定错误,要指定9000端口,公有云要指定内网地址,http://172.29.21.67:9000
测试后
新建命名空间重新安装velero到velero-luo命名空间
kubectl create ns velero-luo
velero install --kubeconfig=/data/velero/velero-user.config --provider aws --plugins velero/velero-plugin-for-aws:v1.3.1 --bucket 20231008-data --secret-file /data/velero/velero-auth.txt --use-volume-snapshots=false --namespace velero-system --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://172.29.21.67:9000
创建备份
velero backup create default-ns-backup666 --include-cluster-resources=true --include-namespaces default --namespace velero-luo --kubeconfig=/data/velero/velero-user.config
查看是否备份成功
velero backup get -n velero-luo
completed 代表完成
velero backup describe default-ns-backup666 -n velero-luo
访问web刷新后就有数据了
删除数据
root@server01:/data/velero# kubectl delete deployments.apps demoapp11
deployment.apps "demoapp11" deleted
root@server01:/data/velero# kubectl get pods
NAME READY STATUS RESTARTS AGE
daemonset-demo-whcn9 1/1 Running 7 (5h2m ago) 7d10h
demoapp10-8478cb7d59-7qvp5 1/1 Running 0 30h
demoapp11-798f578849-j5tbj 1/1 Running 0 30h
demodb-0 1/1 Running 4 (5h2m ago) 2d5h
demodb-1 1/1 Running 3 (5h2m ago) 2d5h
my-dep2-7854ff8877-7wm5n 1/1 Running 0 2d5h
redistest-95d5f44c5-jrlhh 1/1 Running 0 2d5h
test2-95c8ddcd-d9m8h 1/1 Running 0 2d5h
test2-95c8ddcd-mm66z 1/1 Running 0 2d5h
root@server01:/data/velero# kubectl delete deployments.apps demoapp11
deployment.apps "demoapp11" deleted
root@server01:/data/velero# velero restore create --wait --from-backup default-ns-backup666 --kubeconfig=/data/velero/velero-user.config -n velero-luo
Restore request "default-ns-backup666-20231008222116" 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-ns-backup666-20231008222116` and `velero restore logs default-ns-backup666-20231008222116`.
demoapp11成功恢复
root@server01:/data/velero# kubectl get pods
NAME READY STATUS RESTARTS AGE
daemonset-demo-whcn9 1/1 Running 7 (5h6m ago) 7d10h
demoapp10-8478cb7d59-7qvp5 1/1 Running 0 30h
demoapp11-798f578849-j5tbj 1/1 Running 0 37s
demodb-0 1/1 Running 4 (5h6m ago) 2d5h
demodb-1 1/1 Running 3 (5h6m ago) 2d5h
my-dep2-7854ff8877-7wm5n 1/1 Running 0 2d5h
redistest-95d5f44c5-jrlhh 1/1 Running 0 2d5h
test2-95c8ddcd-d9m8h 1/1 Running 0 2d5h