我正在使用 Bitnami Sharded MongoDB Helm 图表。
我需要帮助在 Sharded Mongo 中备份数据,并在需要时再次恢复它。
我认为使用部署文件而不是有状态集很容易做到这一点。
我尝试过使用 VolumeSnapshot,但问题是我能够创建快照,但无法使用 Bitnami Sharded MongoDB helm 图表恢复它。
您是否使用 Velero 进行备份?
我能够“灾难后”恢复 MongoDB 实例,即在相同的命名空间上,但使用 --namespace-mappings 进行完整恢复(例如,Helm 从 mongo2 到 mongo 发布 mongo-store2) 命名空间)最终需要后续修补:
A="$(kubectl get -o json secret/sh.helm.release.v1.mongo-store2.v1 | jq -r .data.release | base64 -d | base64 -d | gzip -dc |sed 's/mongo2/mongo/g'|gzip -c | base64 -w0 | base64 -w0)"
kubectl patch --type='merge' -p "{\"data\": {\"release\": \"${A}\"}}" secret/sh.helm.release.v1.mongo-store2.v1
for i in $(kubectl get -o name pod,service,deploy,replicaset,statefulset,secret,configmap,pvc -n mongo | grep -v -- kube-root)
do
kubectl patch --type='merge' -p '{"metadata": {"annotations": {"meta.helm.sh/release-namespace": "mongo"}}}' $i
done
kubectl patch sts/mongo-store2-mongodb-sharded-shard0-data --patch-file patch-shard0.yml
kubectl patch sts/mongo-store2-mongodb-sharded-shard1-data --patch-file patch-shard1.yml
kubectl patch sts/mongo-store2-mongodb-sharded-configsvr --patch-file patch-configsvr.yml
kubectl patch deploy/mongo-store2-mongodb-sharded-mongos --patch-file patch-deploy.yml
使用这些补丁文件:
spec:
template:
spec:
containers:
- name: mongodb
env:
- name: MONGODB_INITIAL_PRIMARY_HOST
value: mongo-store2-mongodb-sharded-shard0-data-0.mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
- name: MONGODB_ADVERTISED_HOSTNAME
value: $(MONGODB_POD_NAME).mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
spec:
template:
spec:
containers:
- name: mongodb
env:
- name: MONGODB_INITIAL_PRIMARY_HOST
value: mongo-store2-mongodb-sharded-shard1-data-0.mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
- name: MONGODB_ADVERTISED_HOSTNAME
value: $(MONGODB_POD_NAME).mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
spec:
template:
spec:
containers:
- name: mongos
env:
- name: MONGODB_CFG_PRIMARY_HOST
value: mongo-store2-mongodb-sharded-configsvr-0.mongo-store2-mongodb-sharded-headless.mongokubectl .svc.cluster.local
spec:
template:
spec:
containers:
- name: mongodb
env:
- name: MONGODB_INITIAL_PRIMARY_HOST
value: mongo-store2-mongodb-sharded-configsvr-0.mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
- name: MONGODB_ADVERTISED_HOSTNAME
value: $(MONGODB_POD_NAME).mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
我还尝试过仅恢复 PVC/PV,在目标命名空间上重新安装 Helm Chart(并为我节省了一些修补程序,除了那些涉及 “meta.helm.sh/release-namespace” 注释的修补程序)。
无论哪种方式,StatefulSets都会正确启动,但mongos部署永远保持0/1。