mongodb - 如何从 mongo statefulset yaml 文件运行 rs.init?
问题描述
我正在 kubernetes 集群(GKE)上部署一个 mongodb statefulset。
每次我第一次部署 statefulset 时,我都必须在 mongo statefulset 上手动运行以下命令。
我的步骤:
部署yaml文件
通过“ kubectl exec -it mongo-0 /bin/bash ”进入 mongo pod
运行“ mongo ”
跑
rs.initiate({_id:“rs0”,成员:[{_id:0,主机:“mongo-0.mongo:27017”},{_id:1,主机:“mongo-1.mongo:27017”}] })
启动
我可以将此命令放入 mongo-statefulset.yml 文件或其他自动处理它的方式吗?
mongo-statefulset.yml:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongo
spec:
selector:
matchLabels:
role: mongo
serviceName: "mongo"
replicas: 1
template:
metadata:
labels:
role: mongo
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mongo
image: mongo:4.0
command:
- mongod
- "--replSet"
- rs0
- "--bind_ip"
- 0.0.0.0
ports:
- containerPort: 27017
还有另一个关键问题:
有时我不知道为什么我的集群中的所有 pod 都会突然重启,从重启开始一切正常并继续运行,除了这个 mongo 状态集。mongo 的副本集状态变为“ OTHER ”而不是“Primary/Secondary”。因此,mongo 服务无法使用,直到我键入以下命令来恢复它:
rsconf = rs.conf()
rsconf.members = [
{ _id: 0, host: "mongo-0.mongo:27017", priority: 1 },
{ _id: 1, host: "mongo-1.mongo:27017", priority: 0.5 }
]
rs.reconfig(rsconf, {force: true})
如何自动恢复?
解决方案
推荐阅读
- bash - 在 csv 上使用 bash 脚本 - awk 和 for 循环
- powershell - PowerShell foreach 循环打印太多:我希望它只打印我想要打印的内容
- java - 如何在 Java 中加速读写 base64 编码的 gzip 大文件
- c++ - 存储递归函数的堆栈有多大。我应该考虑哪些因素,如操作系统、编译器和硬件
- javascript - Promise 递归在 promise.all 之后完成,应该添加到 promise.all 数组中
- python - 将不同列表中的相应元素连接到一个列表中
- java - 填充树图
和 数据 - laravel - 使用 Guzzle 代替 Curl
- tensorflow - 使用 C API 冻结图形
- javascript - 在 Pug 中打印没有包装标签的变量