Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在kubernetes环境中创建mongodb用户时出错_Mongodb_Kubernetes - Fatal编程技术网

在kubernetes环境中创建mongodb用户时出错

在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:

我正在尝试创建一个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文件中的一个资源引用了集群中不存在的资源

您可以通过运行命令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图表的最新版本已经发生了很大变化,并解决了外部访问问题。现在效果很好。