在kubernetes环境中创建mongodb用户时出错
我正在尝试创建一个mongodb用户和一个有状态集。这是我的.yaml文件:在kubernetes环境中创建mongodb用户时出错,mongodb,kubernetes,Mongodb,Kubernetes,我正在尝试创建一个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:
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文件中的一个资源引用了集群中不存在的资源 您可以通过运行命令kubectlapiresources | grepmongo-i来检查这一点 具体来说,它是MongoDBUser的资源。此API资源类型是的一部分 您尚未指明是否在集群中使用此功能,但您收到的错误表明未安装操作员的CRD,因此无法使用 MongoDB Kubernetes Operator是Kubernetes的付费企业包。如果您没有从MongoDB访问此企业版软件包的权限,您也可以自己安装community edition,方法是自行设置所有资源或使用将其作为软件包安装。使用Helm可以大大简化资源管理,特别是在配置、升级、重新安装或卸载方面。现有的Helm图表是开源的,还允许将MongDB作为独立实例、副本集或分片集群运行
作为参考,Bitnami似乎是最新的MongoDB版本,并定期维护。也有,但它位于旧版本的MongoDB上,似乎没有受到太多关注。yaml文件中的一个资源引用了集群中不存在的一种资源 您可以通过运行命令kubectlapiresources | grepmongo-i来检查这一点 具体来说,它是MongoDBUser的资源。此API资源类型是的一部分 您尚未指明是否在集群中使用此功能,但您收到的错误表明未安装操作员的CRD,因此无法使用 MongoDB Kubernetes Operator是Kubernetes的付费企业包。如果您没有从MongoDB访问此企业版软件包的权限,您也可以自己安装community edition,方法是自行设置所有资源或使用将其作为软件包安装。使用Helm可以大大简化资源管理,特别是在配置、升级、重新安装或卸载方面。现有的Helm图表是开源的,还允许将MongDB作为独立实例、副本集或分片集群运行
作为参考,Bitnami似乎是最新的MongoDB版本,并定期维护。也有,但它在旧版本的MongoDB上,似乎没有引起太多注意。您遇到了这个错误,因为您没有用于MongoDBUser的CustomResourceDefinition CRD。您在创建YAML对象时参考了哪一个指南?如果您需要与用户一起创建MongoDB,您可以参考以下清单:&@hdhruna我在创建yaml文件时参考了官方文档:。我的第一个版本的yaml without Secret and MongoDBUser使用env变量初始化mongo用户-类似于medium post。我将更仔细地看一下要点,因为您没有MongoDBUser的CustomResourceDefinition CRD,所以遇到了这个错误。您在创建YAML对象时参考了哪一个指南?如果您需要与用户一起创建MongoDB,您可以参考以下清单:&@hdhruna我在创建yaml文件时参考了官方文档:。我的第一个版本的yaml without Secret and MongoDBUser使用env变量初始化mongo用户-类似于medium post。我会仔细看一下要点,所以我尝试使用Bitnami的掌舵图,但它不会为我创建副本。当我叫赫尔姆安装。。。第一个复制副本处于挂起状态。聚氯乙烯也是如此。我创建了本地PersistentVolume和StorageClass资源,但问题仍然存在。这是图表中的问题还是我错过了一些先决条件?您需要检查可以设置的舵图的值。最值得注意的是,它们有一个values-production.yaml文件,默认情况下,该文件将K8s有状态集启用为MongoDB副本集。它只是启用属性。我还记得是否默认启用了持久性,如果不只是将persistence.enabled设置为true。如果启用,它将自动创建PVC和PV,如果在云平台上运行,这也将创建物理磁盘。如果没有启动,查看k8s事件并检查pod状态、事件和日志。可能找不到您的PVC。下面是一个示例命令,用于在下载图表的位置安装图表。赫尔
m install-name my mongodb install-namespace db-f mongodb bitnami/values-production.yaml-f my-custom-overrides.yaml-set persistence.size=8Gi-set mongodbRootPassword=changeit./mongodb bitnamiJust警告:如果您打算从集群外部访问mongodb服务器,您将遇到一些问题。可以通过使用nginx入口并启用udp流量进入端口27017上的集群。但对于副本集来说,这确实很复杂,因为MongoDB集中每个节点的DNS名称都是在安装时分配的,并且只能从集群内解析。更新上面的评论:Bitnami的MongoDB Helm图表的最新版本已经发生了很大变化,并解决了外部访问问题。现在效果非常好。所以我尝试使用Bitnami的掌舵图,但它不会为我创建副本。当我叫赫尔姆安装。。。第一个复制副本处于挂起状态。聚氯乙烯也是如此。我创建了本地PersistentVolume和StorageClass资源,但问题仍然存在。这是图表中的问题还是我错过了一些先决条件?您需要检查可以设置的舵图的值。最值得注意的是,它们有一个values-production.yaml文件,默认情况下,该文件将K8s有状态集启用为MongoDB副本集。它只是启用属性。我还记得是否默认启用了持久性,如果不只是将persistence.enabled设置为true。如果启用,它将自动创建PVC和PV,如果在云平台上运行,这也将创建物理磁盘。如果没有启动,查看k8s事件并检查pod状态、事件和日志。可能找不到您的PVC。下面是一个示例命令,用于在下载图表的位置安装图表。helm install-name my mongodb install-namespace db-f mongodb bitnami/values-production.yaml-f my-custom-overrides.yaml-set persistence.size=8Gi-set mongodbRootPassword=changeit./mongodb bitnamiJust警告,如果您打算从集群外部访问mongodb服务器,您将遇到一些问题。可以通过使用nginx入口并启用udp流量进入端口27017上的集群。但对于副本集来说,这确实很复杂,因为MongoDB集中每个节点的DNS名称都是在安装时分配的,并且只能从集群内解析。更新上面的评论:Bitnami的MongoDB Helm图表的最新版本已经发生了很大变化,并解决了外部访问问题。现在效果很好。