我正在尝试让我的应用在minikube上运行,可以通过minikube ip地址访问。以下是我用来运行它的命令。这一切都按照我想要的方式工作(如果我尝试登录,它会返回预期的401,因为mongo DB为空)。
我想在我的应用程序中实际包含一个数据库,比如现有用户。我找不到一个明确的方法,如何将数据(比如在与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
答案 0 :(得分:1)
使用initdb
图像中mongo
基础结构的好方法。 mongo:3.2
包含entrypoint
shell script,它通过/docker-entrypoint-initdb.d/*.{sh,js}
(在容器中)进行迭代。
根据您需要使用ConfigMap
或Secret
作为卷插入新制作的数据库中的数据类型,这是最佳选择。但是你不能用kubectl run
来做到这一点。
1。像这样创建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。像这样创建createuser.sh
(只是example):
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。创建ConfigMap
:
$ kubectl create configmap mongo-initdb --from-file=createuser.sh
configmap "mongo-initdb" created
4. :创建mongo部署(而不是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: {
[...]
正如我所提到的,可以使用Secrets
对敏感数据进行非常类似的解决方案。 kubectl create configmap --from-file=...
命令还接受目录的名称而不是文件,并且将按预期工作。