首页 > 解决方案 > 如何在创建时在bitnami mongodb图表中插入数据?

问题描述

我学习了 k8s 和 Helm,所以我开始创建一个使用 mongondb 的简单烧瓶应用程序,我使用 helm 安装了部署、服务和入口,并且工作正常。对于 mongo 容器,我使用的是来自 Bitnami 的图表,但我需要在创建时插入一些数据,就像我在正常部署中所做的那样,添加:

 volumeMounts:
   - name: mongo-initdb
   mountPath: /docker-entrypoint-initdb.d

在 bitnami 文档https://artifacthub.io/packages/helm/bitnami/mongodb中,它说可以通过脚本或带有参数的配置图输入数据,initdbScripts或者initdbScriptsConfigMap但我尝试像这样添加它们但不起作用:

mongodb:
  metrics:
    enabled: true
  global:
    namespaceOverride: flask-app
  initdbScriptsConfigMap: mongo-initdb.yaml

这是在将 K8s 与 .yaml 文件一起使用时有效的配置图:

apiVersion: v1
data:
  init-db.js: |-
    db = db.getSiblingDB("cars_db");
    db.car_tb.drop();

    db.car_tb.insertMany([
        {
            "id": 1,
            "brand": "Ford",
            "model": "Mustang"
        },
        {
            "id": 2,
            "brand": "Lamborghini",
            "model": "Veneno"
        },
        {
            "id": 3,
            "brand": "Ferrari",
            "model": "Enzo"
        },
        {
            "id": 4,
            "brand": "Mercedes",
            "model": "Cls63-AMG"
        },
    ]);
kind: ConfigMap
metadata:
  name: mongo-initdb
  namespace: flask-app

作为模板文件夹中的 mongo-configmap.yaml。

由于它不起作用,我尝试添加一个名为的配置映射并将docker-entrypoint-initdb.d 其设置在一个名为 files 的文件夹中,如此处所述https://docs.bitnami.com/kubernetes/infrastructure/mongodb/administration/initialize-instance/但它们都不起作用并且文档中没有任何示例。

编辑我尝试将其添加到values.yaml

mongodb:
  metrics:
    enabled: true
  global:
    namespaceOverride: flask-app
  auth:
    username: root
    password: pass
    database: cars_db
    rootPassword: pass
  initdbScripts: 
    init-db.js: |
      db = db.getSiblingDB("cars_db");
      db.car_tb.drop();

      db.car_tb.insertMany([
          {
              "id": 1,
              "brand": "Ford",
              "model": "Mustang"
          },
          {
              "id": 2,
              "brand": "Lamborghini",
              "model": "Veneno"
          },
          {
              "id": 3,
              "brand": "Ferrari",
              "model": "Enzo"
          },
          {
              "id": 4,
              "brand": "Mercedes",
              "model": "Cls63-AMG"
          },
      ]);

但这也不起作用,我从官方 github https://github.com/bitnami/charts/blob/master/bitnami/mongodb/values.yaml得到了这个,但我不知道如何从文档和我在任何我寻找的地方都找不到任何例子

标签: mongodbdockerkuberneteschartskubernetes-helm

解决方案


你现在可能已经想通了,因为你已经很接近了。我能够在我的父图表中使用以下内容来做你想做的事情values.yaml

mongodb:
  initdbScripts:
    my_init_script.js: |
      db = db.getSiblingDB("cars_db");
      db.car_tb.drop();

      db.car_tb.insertMany([
          {
              "id": 1,
              "brand": "Ford",
              "model": "Mustang"
          },
          {
              "id": 2,
              "brand": "Lamborghini",
              "model": "Veneno"
          },
          {
              "id": 3,
              "brand": "Ferrari",
              "model": "Enzo"
          },
          {
              "id": 4,
              "brand": "Mercedes",
              "model": "Cls63-AMG"
          },
      ]);

重要的部分是这在我父图表的values.yaml. 如果您正在直接修改 mongodb 图表(您可能不应该,但无论如何),省略mongodb部分并突出其余部分。这只需要覆盖子图表的值。

还值得注意的是,我没有尝试过使用您正在使用的 un/db/password 覆盖,所以也许尝试删除这些?

另一件事可能是 Bitnami mongo 图表的错误版本,他们在启动时直接忘记执行.js/ .sh 文件,因此什么也没有发生。尝试更新您的图表版本。我这样做是使用:

- name: mongodb
  version: "10.15.0"
  repository: https://charts.bitnami.com/bitnami

推荐阅读