当前位置:网站首页>基于 MinIO 对象存储保障 Rancher 数据
基于 MinIO 对象存储保障 Rancher 数据
2022-07-28 13:49:00 【InfoQ】
前言

先决条件
- Rancher:2.6.6
- k8s:v1.23.7
MinIO 快速部署
MinIO 介绍
- 云原生:符合一切云原生云的架构和构建过程,并且包含最新的云计算技术和概念。其中包括支持 Kubernetes 、微服和多租户的的容器技术,让对象存储对于 Kubernetes 更加友好。
- 高性能:在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒,拥有更高的吞吐量和更低的延迟。
- 可扩展:扩展从单个群集开始,该群集可以与其他 MinIO 群集联合以创建全局名称空间, 并在需要时可以跨越多个不同的数据中心。
- 易操作:部署简单,简化了使用对象存储的流程,支持多种平台运行。
MinIO 部署
- 一键生成 ssl 自签名证书脚本,将下面脚本保存到
create-cert.sh文件中。
#!/bin/bash -e
help ()
{
echo ' ================================================================ '
echo ' --ssl-domain: 生成ssl证书需要的主域名,如不指定则默认为www.rancher.local,如果是ip访问服务,则可忽略;'
echo ' --ssl-trusted-ip: 一般ssl证书只信任域名的访问请求,有时候需要使用ip去访问server,那么需要给ssl证书添加扩展IP,多个IP用逗号隔开;'
echo ' --ssl-trusted-domain: 如果想多个域名访问,则添加扩展域名(SSL_TRUSTED_DOMAIN),多个扩展域名用逗号隔开;'
echo ' --ssl-size: ssl加密位数,默认2048;'
echo ' --ssl-cn: 国家代码(2个字母的代号),默认CN;'
echo ' 使用示例:'
echo ' ./create_self-signed-cert.sh --ssl-domain=www.test.com --ssl-trusted-domain=www.test2.com \ '
echo ' --ssl-trusted-ip=1.1.1.1,2.2.2.2,3.3.3.3 --ssl-size=2048 --ssl-date=3650'
echo ' ================================================================'
}
case "$1" in
-h|--help) help; exit;;
esac
if [[ $1 == '' ]];then
help;
exit;
fi
CMDOPTS="$*"
for OPTS in $CMDOPTS;
do
key=$(echo ${OPTS} | awk -F"=" '{print $1}' )
value=$(echo ${OPTS} | awk -F"=" '{print $2}' )
case "$key" in
--ssl-domain) SSL_DOMAIN=$value ;;
--ssl-trusted-ip) SSL_TRUSTED_IP=$value ;;
--ssl-trusted-domain) SSL_TRUSTED_DOMAIN=$value ;;
--ssl-size) SSL_SIZE=$value ;;
--ssl-date) SSL_DATE=$value ;;
--ca-date) CA_DATE=$value ;;
--ssl-cn) CN=$value ;;
esac
done
# CA相关配置
CA_DATE=${CA_DATE:-3650}
CA_KEY=${CA_KEY:-cakey.pem}
CA_CERT=${CA_CERT:-cacerts.pem}
CA_DOMAIN=cattle-ca
# ssl相关配置
SSL_CONFIG=${SSL_CONFIG:-$PWD/openssl.cnf}
SSL_DOMAIN=${SSL_DOMAIN:-'www.rancher.local'}
SSL_DATE=${SSL_DATE:-3650}
SSL_SIZE=${SSL_SIZE:-2048}
## 国家代码(2个字母的代号),默认CN;
CN=${CN:-CN}
SSL_KEY=$SSL_DOMAIN.key
SSL_CSR=$SSL_DOMAIN.csr
SSL_CERT=$SSL_DOMAIN.crt
echo -e "\033[32m ---------------------------- \033[0m"
echo -e "\033[32m | 生成 SSL Cert | \033[0m"
echo -e "\033[32m ---------------------------- \033[0m"
if [[ -e ./${CA_KEY} ]]; then
echo -e "\033[32m ====> 1. 发现已存在CA私钥,备份"${CA_KEY}"为"${CA_KEY}"-bak,然后重新创建 \033[0m"
mv ${CA_KEY} "${CA_KEY}"-bak
openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
else
echo -e "\033[32m ====> 1. 生成新的CA私钥 ${CA_KEY} \033[0m"
openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
fi
if [[ -e ./${CA_CERT} ]]; then
echo -e "\033[32m ====> 2. 发现已存在CA证书,先备份"${CA_CERT}"为"${CA_CERT}"-bak,然后重新创建 \033[0m"
mv ${CA_CERT} "${CA_CERT}"-bak
openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
else
echo -e "\033[32m ====> 2. 生成新的CA证书 ${CA_CERT} \033[0m"
openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
fi
echo -e "\033[32m ====> 3. 生成Openssl配置文件 ${SSL_CONFIG} \033[0m"
cat > ${SSL_CONFIG} <<EOM
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, serverAuth
EOM
if [[ -n ${SSL_TRUSTED_IP} || -n ${SSL_TRUSTED_DOMAIN} || -n ${SSL_DOMAIN} ]]; then
cat >> ${SSL_CONFIG} <<EOM
subjectAltName = @alt_names
[alt_names]
EOM
IFS=","
dns=(${SSL_TRUSTED_DOMAIN})
dns+=(${SSL_DOMAIN})
for i in "${!dns[@]}"; do
echo DNS.$((i+1)) = ${dns[$i]} >> ${SSL_CONFIG}
done
if [[ -n ${SSL_TRUSTED_IP} ]]; then
ip=(${SSL_TRUSTED_IP})
for i in "${!ip[@]}"; do
echo IP.$((i+1)) = ${ip[$i]} >> ${SSL_CONFIG}
done
fi
fi
echo -e "\033[32m ====> 4. 生成服务SSL KEY ${SSL_KEY} \033[0m"
openssl genrsa -out ${SSL_KEY} ${SSL_SIZE}
echo -e "\033[32m ====> 5. 生成服务SSL CSR ${SSL_CSR} \033[0m"
openssl req -sha256 -new -key ${SSL_KEY} -out ${SSL_CSR} -subj "/C=${CN}/CN=${SSL_DOMAIN}" -config ${SSL_CONFIG}
echo -e "\033[32m ====> 6. 生成服务SSL CERT ${SSL_CERT} \033[0m"
openssl x509 -sha256 -req -in ${SSL_CSR} -CA ${CA_CERT} \
-CAkey ${CA_KEY} -CAcreateserial -out ${SSL_CERT} \
-days ${SSL_DATE} -extensions v3_req \
-extfile ${SSL_CONFIG}
echo -e "\033[32m ====> 7. 证书制作完成 \033[0m"
echo
echo -e "\033[32m ====> 8. 以YAML格式输出结果 \033[0m"
echo "----------------------------------------------------------"
echo "ca_key: |"
cat $CA_KEY | sed 's/^/ /'
echo
echo "ca_cert: |"
cat $CA_CERT | sed 's/^/ /'
echo
echo "ssl_key: |"
cat $SSL_KEY | sed 's/^/ /'
echo
echo "ssl_csr: |"
cat $SSL_CSR | sed 's/^/ /'
echo
echo "ssl_cert: |"
cat $SSL_CERT | sed 's/^/ /'
echo
echo -e "\033[32m ====> 9. 附加CA证书到Cert文件 \033[0m"
cat ${CA_CERT} >> ${SSL_CERT}
echo "ssl_cert: |"
cat $SSL_CERT | sed 's/^/ /'
echo
echo -e "\033[32m ====> 10. 重命名服务证书 \033[0m"
echo "cp ${SSL_DOMAIN}.key tls.key"
cp ${SSL_DOMAIN}.key tls.key
echo "cp ${SSL_DOMAIN}.crt tls.crt"
cp ${SSL_DOMAIN}.crt tls.crtchmod +x create-cert.sh
./create-tls.sh --ssl-domain=minio.zerchin.xyz --ssl-size=2048 --ssl-date=3650--ssl-domain- 创建minio文件夹。
mkdir -p /minio/data
mkdir -p /minio/certs/CAs- 将创建的证书复制到证书的目录下。
cp tls.crt /minio/certs/public.crt
cp tls.key /minio/certs/private.key
cp cacerts.pem /minio/certs/CAs/cacerts.pemdocker run命令启动 MinIO。
docker run -itd --net host --name minio --restart unless-stopped -v /minio/data:/data -v /minio/certs:/certs -e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=Rancher123 minio/minio server /data --console-address minio.zerchin.xyz:443 --address minio.zerchin.xyz:9000 --certs-dir /certsMINIO_ROOT_USER:设置管理员用户。
MINIO_ROOT_PASSWORD:管理员用户密码。
--console-address:MinIO管理平台地址,当检测到有证书时,自动配置为https。
--address:实际数据传输的地址。
--certs-dir:设置证书目录,默认是${HOME}/.minio/certs这个目录,这里指定成我们挂载的目录。注意证书和秘钥的名字一定要是public.crt和private.key。如果有自签名CA证书,则需要放到该路径下的CAs目录。
MinIO 使用
- 访问 MinIO。
https://minio.zerchin.xyzMINIO_ROOT_USERMINIO_ROOT_PASSWORD
- 创建 Bucket,命名为 backup。



- 创建访问用户。



通过 MinIO 备份和恢复 Rancher 管理的下游 K8s 集群
etcd 快照备份
- 编辑下游集群,在Etcd备份存储下,选择 s3。

S3 Bucket Name:S3的桶名称。
S3 Folder:桶下的文件夹。不填写则直接在桶的根目录下存储数据。
S3 Region Endpoint:指定S3端点URL地址,这里对应前面--address暴露的地址
Access Key:S3的accessKey
Secret Key:S3的secretKey
自定义 CA 证书:自定义证书认证,用于连接 S3 端点。
- 创建下游集群快照。
- 集群更新完毕后,我们进入集群,在Snapshots下,点击立即创建快照按钮,就会自动帮我们创建 etcd 快照,并保存到远程 MinIO 存储上。

- 验证快照是否存储在 MinIO 中。

etcd 快照恢复
- 基于快照恢复 k8s 集群。


- 仅恢复 etcd 数据。
- 同时恢复 k8s 版本和 etcd 数据。
- 同时恢复集群配置、k8s 版本和 etcd 数据。

通过 MinIO 备份和恢复 Rancher
rancher-backuprancher-backupRancher Backup 部署
- 安装 Rancher Backup。
- 首先进入到 local 集群中(即 rancher 所在的集群),在 应用&应用市场 - Charts 导航栏下,点击 Rancher Backups 应用开始安装。

- 点击安装,这里安装的是 2.1.2 版本。

- 这里选择安装到
System项目,然后点击下一步

- 选择默认存储位置,先选择无默认存储位置,点击安装按钮后,开始安装。

- 等待几分钟,等 rancher backup 的 pod 启动。(取决于拉取镜像的速度)

创建第一个 Backup
- 创建一个 secret,选择 Opaque 类型。

- 命名为
minio-cerd,新增两条数据,分别为accessKey和secretKey,并保存。

- 在 Rancher 备份 - Backups 导航栏下,点击右侧的创建按钮,创建第一个Backup。

- 存储位置选择使用 Amazon S3 兼容的对象存储服务。

凭证密文:选择刚刚创建的minio密文。
存储桶名称:S3 的桶名称。
文件夹:桶下的文件夹。不填写则直接在桶的根目录下存储数据。
端点:指定 S3 端点URL地址,这里对应前面--address暴露的地址
端点 CA:自签名证书需要添加 CA 证书,这里要先用 base64 编码后再填写进来。
- 保存后,会自动发起 rancher 备份请求,同时将备份数据文件保存到 S3 存储上,当显示Completed时说明已经备份成功。(记录其中的备份文件名,恢复的时候会用到)

- 登录 MinIO,查看备份文件已经保存进来了。

基于 Backup 恢复 Rancher
- 安装 RKE 集群。
- 需要安装与当前 Rancher 集群相同版本,安装方法可以参考 Rancher 官方文档,这里已经准备好了一个 RKE 集群,就不再赘述。
- 添加 Rancher-Backup 对应的 Helm repo。
helm repo add rancher-charts https://charts.rancher.io
helm repo update- 安装 rancher-backup Helm chart,指定相同的 rancher-backup 版本,这里选择 2.1.2 版本。
helm install rancher-backup-crd rancher-charts/rancher-backup-crd -n cattle-resources-system --create-namespace --version 2.1.2
helm install rancher-backup rancher-charts/rancher-backup -n cattle-resources-system --version 2.1.2- 查看 rancher-backup pod 状态是否就绪。
# kubectl -n cattle-resources-system get pods
NAME READY STATUS RESTARTS AGE
rancher-backup-74779d9dfd-vjdth 1/1 Running 0 27s- 编写
minio-cerd-secret.yaml文件,配置 MinIO 访问秘钥。
apiVersion: v1
kind: Secret
metadata:
name: minio-cred
namespace: cattle-resources-system
type: Opaque
data:
accessKey: <s3 access key base64 编码>
secretKey: <s3 secret key base64 编码>kubectl create -f minio-cerd-secret.yaml- 编写 Restore yaml 文件,命名为
restore.yaml。
apiVersion: resources.cattle.io/v1
kind: Restore
metadata:
name: restore-minio
spec:
backupFilename: minio-backup-da0178a9-bf73-4b4d-a615-863bf7e46689-2022-07-18T17-46-43Z.tar.gz
prune: false
storageLocation:
s3:
credentialSecretName: minio-cred
credentialSecretNamespace: cattle-resources-system
bucketName: backup
folder: rancher-backup
endpoint: minio.zerchin.xyz:9000
endpointCA: |-
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURGVENDQWYyZ0F3SUJBZ0lKQUp1Z1pWNVFN
...
...
...
L2xlRFdzNThVd3FvYWtVc0diQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KbackupFilenamekubectl create -f restore.yaml- 查看 Restore 状态。
kubectl get restore
kubectl logs -n cattle-resources-system --tail 100 -f rancher-backup-xxx-xxx# kubectl get restores.resources.cattle.io
NAME BACKUP-SOURCE BACKUP-FILE AGE STATUS
restore-minio S3 minio-backup-da0178a9-bf73-4b4d-a615-863bf7e46689-2022-07-18T17-46-43Z.tar.gz 74s Completed- 接下来用 Helm 安装 Rancher。
helm install rancher rancher-stable/rancher -n cattle-system --set xxx --set xxx- 切换 Rancher 前端负载均衡 /DNS 解析到新的 Rancher 节点上。
- 登录 Rancher UI 界面,访问正常,说明恢复成功。

边栏推荐
- Install mysql5.7.36 in CentOS
- How to effectively conduct the review meeting (Part 1)?
- 指针和数组(7)
- Nport serial server configuration website (whether the serial server is from network port to serial port)
- Summarize the knowledge points of the ten JVM modules. If you don't believe it, you still don't understand it
- 我正在使用中的博客创作工具
- Unittest executes runtestcase prompt <_ io. Textiowrapper name= '< stderr>' mode=W encoding=UTF-8 > solution
- Some problems encountered in the development of Excel VBA, solutions, and continuous updates
- C # 7 methods to obtain the current path
- 2022年熔化焊接与热切割考题及在线模拟考试
猜你喜欢

HCIP第十天

超好用的手机录屏软件推荐
![[Tanabata] Tanabata lonely little frog research edition? The final chapter of Tanabata Festival!](/img/0b/4fc583a3dd4794b0c2b0d64d905be7.png)
[Tanabata] Tanabata lonely little frog research edition? The final chapter of Tanabata Festival!

C语言库函数getchar()怎么使用

Minitest -- applet automation testing framework

Hcip day 10

Forage QR code -- online QR code generator

It's so hot that solar power can't take off? Hello, head

多所“双一流”大学,保研预报名启动!

bgp实验
随机推荐
为 @CloudStorage 添加了类 @Published 的能力
MeterSphere--开源持续测试平台
pix2pix
Langjing Technology (Trax China) "robot +ai" opens the era of Chinese retail meta universe
UI开发中所遇到的各种坑
How to effectively conduct the review meeting (Part 1)?
Leetcode 1331. array sequence number conversion
OKR and grad
[ecmascript6] iterator and generator
TDengine 助力西门子轻量级数字化解决方案
朗镜科技(Trax中国)“机器人+AI”开启中国零售元宇宙时代
树莓派基础 | 总结记录树莓派学习过程中的一些操作
围绕新市民金融聚焦差异化产品设计、智能技术提效及素养教育
十、时间戳
Leetcode 0143. rearrange linked list
[ecmascript6] modularization
2022年熔化焊接与热切割考题及在线模拟考试
数字化转型安全问题频发,山石网科助力数字政府建设
pix2pix
Tdengine helps Siemens' lightweight digital solutions
