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

但当我在StatefulSet中添加了spec.template.spec.containers.command后,这种方法就不再有效了。然后我添加了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

具体来说,它是一种资源 MongoDBUser. 该API资源类型属于 MongoDB 企业级 Kubernetes 操作员.

您没有说明是否在您的集群中使用这个,但您得到的错误意味着运营商的CRD没有安装,因此无法使用。

MongoDB Kubernetes Operator是Kubernetes的付费企业包。如果你没有从MongoDB获得这个企业包,你也可以自己安装社区版,通过自己设置所有资源或使用 Helm 来安装它作为一个软件包。使用Helm可以大大简化资源管理,特别是在配置、升级、重新安装或取消安装方面。现有的Helm图表是开源的,也允许将MongDB作为独立实例、副本集或分片集群运行。

供参考,Bitnami 提供了一个MongoDB单机版或副本集舵机图。 这似乎是最新的MongoDB版本,并定期维护。还有 这个但它是在MongoDB的旧版本上,似乎并没有得到太多的关注。

给TA打赏
共{{data.count}}人
人已打赏
未分类

事务规则重新排序--这是一个好主意吗?

2022-11-1 21:49:29

未分类

为什么我们需要在谷歌云中增加磁盘大小来提高性能?

2022-11-1 22:00:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索