如何在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}
(在容器中)。
取决于您需要使用ConfigMap
或Secret
作为卷插入到新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=...
命令也接受目录的名称而不是文件,并且按照预期工作。
- 如何使用docker-compose.yml为elasticsearch.yaml文件设置network.publish_host
- Docker syslog驱动程序不能删除到远程syslog-server
- 具有Docker执行器克隆问题的OmniBus GitLab CE Multirunner
- 无法公开端口从本地主机访问web服务器
- Docker.IO文件系统一致性
- Docker在ubuntu主机启动时无法加载apparmorconfiguration文件
- 设置为Windows防火墙允许Docker for Windows共享驱动器
- ubuntu 14.04 SuperDesk Raven未configuration(禁用日志logging)
- 在Docker构build中播种mysql数据