mongodb - kubernetes环境下创建mongodb用户报错
问题描述
我正在尝试创建一个 mongodb 用户以及一个有状态集。这是我的 .yaml 文件:
apiVersion: v1
kind: Service
metadata:
name: mongo
labels:
name: mongo
spec:
type: NodePort
ports:
- port: 27017
targetPort: 27017
selector:
name: mongo
---
apiVersion: v1
kind: Secret
metadata:
name: admin-secret
# corresponds to user.spec.passwordSecretKeyRef.name
type: Opaque
stringData:
password: pass1
# corresponds to user.spec.passwordSecretKeyRef.key
---
apiVersion: mongodb.com/v1
kind: MongoDBUser
metadata:
name: admin
spec:
passwordSecretKeyRef:
name: admin-secret
# Match to metadata.name of the User Secret
key: password
username: admin
db: "admin" #
mongodbResourceRef:
name: mongo
# Match to MongoDB resource using authenticaiton
roles:
- db: "admin"
name: "clusterAdmin"
- db: "admin"
name: "userAdminAnyDatabase"
- db: "admin"
name: "readWrite"
- db: "admin"
name: "userAdminAnyDatabase"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongo
spec:
serviceName: "mongo"
replicas: 2
selector:
matchLabels:
name: mongo
template:
metadata:
labels:
name: mongo
spec:
terminationGracePeriodSeconds: 10
containers:
# - envFrom:
# - secretRef:
# name: mongo-secret
- image: mongo
name: mongodb
command:
- mongod
- "--replSet"
- rs0
- "--bind_ip"
- 0.0.0.0
ports:
- containerPort: 27017
之前我使用秘密创建了一个 mongo 用户:
...
spec:
containers:
- envFrom:
- secretRef:
name: mongo-secret
...
但是一旦我将 spec.template.spec.containers.command 添加到 StatefulSet,这种方法就不再有效。然后我添加了 Secret 和 MongoDBUser 但我开始收到此错误:
unable to recognize "mongo.yaml": no matches for kind "MongoDBUser" in version "mongodb.com/v1"
在kubernetes中创建具有少量副本的StatefulSet时如何自动创建mongodb用户?
解决方案
您的 yaml 文件中的资源之一是指kind
集群中不存在的资源。
您可以通过运行命令来检查这一点kubectl api-resources | grep mongo -i
具体来说,它是 kind 的资源MongoDBUser
。此 API 资源类型是MongoDB Enterprise Kubernetes Operator的一部分。
您还没有说明您是否在集群中使用它,但您收到的错误表明未安装操作员的 CRD,因此无法使用。
MongoDB Kubernetes Operator 是 Kubernetes 的付费企业包。如果您无法从 MongoDB 访问此企业包,您也可以自己安装社区版,方法是自己设置所有资源或使用Helm将其安装为包。使用 Helm 可以显着更轻松地管理资源,尤其是在配置、升级、重新安装或卸载方面。现有的 Helm 图表是开源的,还允许将 MongDB 作为独立实例、副本集或分片集群运行。
作为参考,Bitnami提供了一个 MongoDB Standalone 或副本集 helm chart,它似乎在最新的 MongoDB 版本上并且定期维护。也有这个,但它是在旧版本的 MongoDB 上,似乎没有受到太多关注。
推荐阅读
- c++ - 为什么 {} 作为函数参数不会导致歧义?
- php - 通过关系 Laravel 访问两个表数据
- powershell - 巧克力包装失败
- android - 如何在 android 手机屏幕内放置所有视图?
- groovy - 适用于版本范围的 JIRA MyGroovy JQL 脚本函数
- c++ - 如何读取文件中的所有数据
- python - Python 日期时间转换为时间戳
- c# - 如何使用 datagridview 选择特定行并使用 datagridview 以新形式显示,但应用存储过程
- c# - System.Text.Json --> 每次调用仅序列化特定字段
- r - ggplot2:如何在一个时间范围内绘制 2 条线