kubernetes - mongo, mongo-express & node.js app: three pods connection practice
Practice1: Three containers in one pod
clone data from github
1. Prepare one deployment
💡 k is abbreviation from kubectl
three containers in one pod deployment
three-container.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo-app-deploy
labels:
app: mongo
spec:
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo
image: mongo
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: admin
- name: MONGO_INITDB_ROOT_PASSWORD
value: password
ports:
- containerPort: 27001
- name: mongo-express
image: mongo-express
ports:
- containerPort: 8081
env:
- name: ME_CONFIG_MONGODB_ADMINUSERNAME
value: admin
- name: ME_CONFIG_MONGODB_ADMINPASSWORD
value: password
- name: ME_CONFIG_MONGODB_URL
value: mongodb://admin:password@localhost:27017/
- name: my-app
image: chi811008/my-app:1.3
ports:
- containerPort: 3000
由於 mongo, mongo-express, app 都在同一個 pod 中
因此 containers level 會包含三個 container 以及其所需設定的環境變數
-
image: mongo
env:
-
name: MONGO_INITDB_ROOT_USERNAME value: admin
-
name: MONGO_INITDB_ROOT_PASSWORD value: password
-
-
image: mongo-ecpress
env:
- name: ME_CONFIG_MONGODB_ADMINUSERNAME
value: admin - name: ME_CONFIG_MONGODB_ADMINPASSWORD
value: password - name: ME_CONFIG_MONGODB_URL
value: mongodb://admin:password@localhost:27017/
- name: ME_CONFIG_MONGODB_ADMINUSERNAME
-
image: chi811008/my-app:1.3
my-app:1.3 中 node.js app connect mongo db 的寫法如下
let mongoUrlLocal = "mongodb://admin:password@localhost:27017"; MongoClient.connect(mongoUrlLocal, ....
因為在同一個 pod 中,所以連接 mongodb 時,可以直接用 localhost + mongodb 的 port →
localhost:27017
2. Apply
╰─$ k apply -f three-container.yaml
3. Check elements
╰─$ k get po NAME READY STATUS RESTARTS AGE mongo-app-deploy-847754876-r5mcs 3/3 Running 0 33m
4. Port forward
╰─$ k port-forward mongo-app-deploy-847754876-r5mcs 3000:3000
5. Open browser
localhost:3000
Practice2: Three pods each contains one container
1. Prepare
1 namespace
1 mongo configmap
1 mongo secret
1 mongo deployment which contains internal service
1 mongo-expredd deployment which contains (external) service
1 app deployment which contains external service
app deployment 中使用的 image: chi811008:1.4
與上面 1.3 tag 不同的是,node.js app mongodb connection 的 url 改成用環境變數接
let mongoUrlLocal = process.env.MONGODB_URL; MongoClient.connect(mongoUrlLocal, ....
因此在設定 my-app-deployment.yaml 檔時,需要設定 MONGODB_RUL 這個環境變數
- env:
- name: MONGODB_URL value: "mongodb://admin:password@mongodb-service.mongodb-namespace.svc.cluster.local:27017"
💡 連接到 mongodb service 的路徑 mongodb://<user>:<password>@<mongodb service name>.<namespace>.svc.cluster.local:27017
2. Apply
mongo-namespace
k apply -f mongo-namespace.yaml
mongo-configmap
k apply -f mongo-configmap.yaml
mongo-secret
k apply -f mongo-secret.yaml
mongo
k apply -f mongo.yaml
mongo-express
k apply -f mongo-express.yaml
my-app-deployment
k apply -f my-app-deployment.yaml
3. Check elements
╰─$ k -n mongodb-namespace get po NAME READY STATUS RESTARTS AGE mongodb-deployment-7bb6c6c4c7-pk4zl 1/1 Running 0 25h mongodb-express-deployment-58b4bfcffd-wnq2s 1/1 Running 0 25h my-app-deployment-d5f6dcfd8-lspb2 1/1 Running 0 42mk -n mongodb-namespace get secret ╰─$ k -n mongodb-namespace get cm NAME DATA AGE mongodb-configmap 1 25hk -n mongodb-namespace get deploy ╰─$ k -n mongodb-namespace get ns NAME STATUS AGE mongodb-namespace Active 25h ╰─$ k -n mongodb-namespace get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mongodb-express-service ClusterIP 10.104.37.87 <none> 8081/TCP 25h mongodb-service ClusterIP 10.110.202.183 <none> 27017/TCP 25h my-app-service LoadBalancer 10.103.207.9 <pending> 3000:30001/TCP 41m
4. Port forward
╰─$ k -n mongodb-namespace port-forward my-app-deployment-d5f6dcfd8-lspb2 3000:3000
5. Open browser
localhost:3000
reference
Comments
Post a Comment