我学习了 k8s 和 Helm,所以我开始创建一个使用 mongondb 的简单 Flask 应用程序,我已经使用 helm 安装了部署、服务和入口,并且工作正常。对于 mongo 容器,我使用 Bitnami 中的图表,但我需要在创建时插入一些数据,就像我在正常部署中所做的那样,添加:
volumeMounts:
- name: mongo-initdb
mountPath: /docker-entrypoint-initdb.d
在 bitnami 文档中 https://artifacthub.io/packages/helm/bitnami/mongodb它说可以通过带有参数 initdbScripts
或 initdbScriptsConfigMap
的脚本或 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/