mongodb - 如何在创建时在 bitnami mongodb 图表中插入数据?

标签 mongodb docker kubernetes charts kubernetes-helm

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

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

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

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 得到这个但我不知道如何从文档中使其工作,并且在我寻找的任何地方都找不到任何示例

最佳答案

你现在可能已经明白了这一点,因为你已经很接近了。我能够使用父图表的 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

关于mongodb - 如何在创建时在 bitnami mongodb 图表中插入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66256564/

相关文章:

mongodb - UpdateOne 因 E11000 重复键错误而失败

docker - "docker stop"和 "docker rm"有什么区别?

docker - Gcloud --> Jenkins --> Pipeline --> Docker Build --> Docker Not Found

nginx - 入口多径不匹配

kubernetes - Kafka Producer jmx 指标缺失

kubernetes - 如果 https 流量,我如何将入口转发到 ssl 端口(443)

java - 如何在Spring data mongodb中根据条件投影字段?

mongodb - 即使在 MongoDB 集合上完成创建索引后,内存使用率仍保持 99%

java - 来自 java : how to get _id of existing object? 的 mongodb upsert

docker - 如何在docker volume ls --format中打印嵌套的字典成员值