如何在kubernetes中包含mongo图像的数据

我试图让我的应用程序运行在minikube上,在minikube的IP地址可到达。 下面是我正在使用它来运行的命令。 这一切都按我想要的方式工作(如果我尝试login,它会返回预期的401,因为mongo数据库是空的)。

我想实际上在我的应用程序中包含一个数据库,比如现有的用户。 我无法find一个清楚的方式来说明如何在我正在做的事情中包含数据(比如在一个与mongo一起工作的tar文件中)。 我怎样才能做到这一点?

### Get mongo up docker pull mongo:3.2 kubectl run mongo --image=mongo:3.2 --port=27017 kubectl expose deployment mongo ### Get API up cd /api docker build -t api:v1 . kubectl run api --image=api:v1 --port=3000 --env="MONGODB_URI=mongodb://mongo:27017/myapp-dev" kubectl apply -f api-deployment.yml kubectl expose deployment api --type=LoadBalancer ### Get dashboard up docker build -t myapp-dashboard:v1 . kubectl apply -f ./tooling/minikube/myapp-dashboard-qa-config-map.yml kubectl apply -f ./tooling/minikube/myapp-dashboard-deployment.yml kubectl expose deployment myapp-dashboard --type=LoadBalancer ### Ingress setup minikube addons enable ingress kubectl create -f ingress.yml kubectl apply -f ./tooling/minikube/ingress.yml 

mongo映像中使用initdb基础结构的好方法。 mongo:3.2包含一个entrypoint shell脚本 ,用于迭代槽/docker-entrypoint-initdb.d/*.{sh,js} (在容器中)。

取决于您需要使用ConfigMapSecret作为卷插入到新build数据库中的数据types,这是一种方法。 但是你不能用kubectl run

1.像这样创build一个mongo.yaml

 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: mongo spec: template: metadata: labels: app: mongo spec: containers: - image: mongo:3.2 name: mongo ports: - containerPort: 27017 volumeMounts: - name: mongo-initdb mountPath: /docker-entrypoint-initdb.d volumes: - name: mongo-initdb configMap: name: mongo-initdb 

2.像这样创buildcreateuser.sh (只是一个例子 ):

 mongo <<EOF use reporting db.createUser( { user: "reportsUser", pwd: "12345678", roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ] } ) EOF 

3.创buildConfigMap

 $ kubectl create configmap mongo-initdb --from-file=createuser.sh configmap "mongo-initdb" created 

4.创buildmongo部署(而不是kubectl run mongo --image=mongo:3.2 --port=27017 ):

 $ kubectl apply -f mongo.yaml deployment "mongo" created 

5.检查日志:

 $ kubectl logs -f deploy/mongo [...] /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/createuser.sh MongoDB shell version: 3.2.17 [...] Successfully added user: { [...] 

正如我所提到的,一个非常类似的解决scheme可以使用敏感数据的Secrets来完成。 kubectl create configmap --from-file=...命令也接受目录的名称而不是文件,并且按照预期工作。