I am using a skaffold to deploy mongodb to my local minikube cluster.
sample files below:
skaffold.yaml
apiVersion: skaffold/v2beta26
kind: Config
metadata:
name: mongodb
deploy:
kubectl:
manifests:
- "config/namespace.yaml"
- "config/mongodb.yaml"
defaultNamespace: "mongodb"
config/namespace.yaml
kind: Namespace
apiVersion: v1
metadata:
name: mongodb
labels:
name: mongodb
config/mongodb.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-mongo-depl
spec:
replicas: 1
selector:
matchLabels:
app: mongodb-mongo
template:
metadata:
labels:
app: mongodb-mongo
spec:
containers:
- name: mongodb-mongo
image: mongo
---
apiVersion: v1
kind: Service
metadata:
name: mongodb-mongo-srv
spec:
selector:
app: mongodb-mongo
ports:
- name: db
protocol: TCP
port: 27017
targetPort: 27017
It successfully creates a mongodb instance in my minikube cluster.
I would also like to seed the db with some json data.
Is there are way to do this using skaffold ?
Update:
I have also created a configmap and a job to seed the database so my config is as follows:
skaffold.yaml
apiVersion: skaffold/v2beta26
kind: Config
metadata:
name: mongodb
deploy:
kubectl:
manifests:
- "config/namespace.yaml"
- "config/configmap.yaml"
- "config/mongodb.yaml"
- "config/mongo-seed-job.yaml"
defaultNamespace: "mongodb"
congigmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: seed-data
namespace: mongodb
data:
init.json: |
[{"name":"Joe Smith","email":"[email protected]","age":40,"admin":false},{"name":"Jen Ford","email":"[email protected]","age":45,"admin":true}]
mongo-seed-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: mongo-seed
spec:
template:
spec:
containers:
- name: seed
image: mongo:latest
command: ["sh", "-c", "mongoimport --uri mongodb://mongodb:27017/mydb --collection accounts --type json --file '/init.json' --jsonArray"]
volumeMounts:
- name: seed-data
mountPath: /data
volumes:
- name: seed-data
configMap:
name: seed-data
items:
- key: init.json
path: init.json
restartPolicy: Never
now the mongo-seed pod wont start. I am getting ContainerCannotRun
I managed to get it working. Here is the working code if anyone else needs it:
skaffold.yaml
apiVersion: skaffold/v2beta26
kind: Config
metadata:
name: mongodb
deploy:
kubectl:
manifests:
- "config/namespace.yaml"
- "config/mongodb-credentials.yaml"
- "config/configmap.yaml"
- "config/mongodb.yaml"
- "config/mongo-seed-job.yaml"
defaultNamespace: "mongodb"
config/namespace.yaml
kind: Namespace
apiVersion: v1
metadata:
name: mongodb
labels:
name: mongodb
config/mongodb-credentials.yaml
Note: username: admin password: password
Please change this to whatever you want
apiVersion: v1
kind: Secret
metadata:
name: mongodb-credentials
type: Opaque
data:
username: YWRtaW4=
password: cGFzc3dvcmQ=
config/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: seed-data
data:
init.json: |
[{"name":"Joe Smith","email":"[email protected]","age":40,"admin":false},{"name":"Jen Ford","email":"[email protected]","age":45,"admin":true}]
config/mongodb.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo:latest
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-data
mountPath: /data/db
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-credentials
key: username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-credentials
key: password
volumes:
- name: mongo-data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: mongodb
spec:
ports:
- port: 27017
selector:
app: mongodb
config/mongo-seed-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: mongo-seed
spec:
template:
spec:
initContainers:
- name: init-copy
image: busybox
command: ['sh', '-c', 'cp /config/init.json /data/']
volumeMounts:
- name: config-volume
mountPath: /config
- name: data-volume
mountPath: /data
containers:
- name: seed
image: mongo:latest
command: ["sh", "-c", "mongoimport --uri mongodb://$(MONGO_USERNAME):$(MONGO_PASSWORD)@mongodb:27017/mydb --collection accounts --type json --file /data/init.json --jsonArray --authenticationDatabase=admin"]
env:
- name: MONGO_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-credentials
key: username
- name: MONGO_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-credentials
key: password
volumeMounts:
- name: data-volume
mountPath: /data
restartPolicy: Never
volumes:
- name: config-volume
configMap:
name: seed-data
- name: data-volume
emptyDir: {}
If anyone has any alternate solutions it would be good to know.
Thanks @imran-premnawaz for your help