Mongo DB
# mongo-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo-deployment
labels:
app: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb # let deployment know which pod for this deployment
template: # configuration for pods
metadata:
labels:
app: mongodb # each pod has a unique name, but pods can share the same label
spec:
containers: # containers in a pod, usually add one container per pod
- name: mongodb
image: mongo:5.0 # pull image from Docker Hub
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongo-secret # secret name
key: mongo-user
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongo-secret # secret name
key: mongo-password
Internal service, has an internal IP
# mongo-service.yaml
apiVersion: v1
kind: Service # type
metadata:
name: mongo-service # service name
spec:
selector:
app: mongodb # connect pod through label
ports:
- protocol: TCP
port: 27017 # service port
targetPort: 27017 # pod port
# mongo-express-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo-express-deployment
labels:
app: mongo-express
spec:
replicas: 1
selector:
matchLabels:
app: mongo-express
template:
metadata:
labels:
app: mongo-express
spec:
containers:
- name: mongo-express
image: mongo-express
ports:
- containerPort: 8081
env:
- name: ME_CONFIG_MONGODB_ADMINUSERNAME
valueFrom:
secretKeyRef:
name: mongo-secret # secret name
key: mongo-user
- name: ME_CONFIG_MONGODB_ADMINPASSWORD
valueFrom:
secretKeyRef:
name: mongo-secret # secret name
key: mongo-password
- name: ME_CONFIG_MONGODB_SERVER
valueFrom:
configMapKeyRef:
name: mongo-configmap # configMap name
key: database_url
External service, has an internal IP and an external IP
# mongo-express-service.yaml
apiVersion: v1
kind: Service # type
metadata:
name: mongo-express-service # service name
spec:
selector:
app: mongo-express
type: LoadBalancer
ports:
- protocol: TCP
port: 8081 # service port
targetPort: 8081 # pod port
nodePort: 30000 # prot for external IP address, must be between 30000-32767
# mongo-secret.yaml
apiVersion: v1
kind: Secret # type
metadata:
name: mongo-secret # name
type: Opaque # default, for arbitrary key-value pairs
data:
mongo-user: bW9uZ291c2Vy # echo -n 'username' | base64
mongo-password: bW9uZ29wYXNzd29yZA== # echo -n 'password' | base64
# mongo-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mongo-configmap
data:
database_url: mongo-service # service name
# minikube on Mac
minikube service mongo-express-service
http://192.168.64.4:30000
kubectl port-forward svc/mongo-express-service 8080:8081
http://127.0.0.1:8080
Reference