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