0

Running a micronaut application on kubernetes where configs are loaded from configMap.

Firstly, my configmap.yml looks like this:

apiVersion: v1
kind: ConfigMap
metadata:
  name: data-loader-service-config
data:
  application-devcloud.yml: |-
    data.uploaded.event.queue: local-datauploaded-event-queue
    data.uploaded.event.consumer.concurrency: 1-3
    base.dir: basedir
    aws:
      region: XXX
      
    datasources:
      default:
        dialect: POSTGRES
        driverClassName: org.postgresql.Driver
    micronaut:
      config:
        sources:
          - file:/data-loader-service-config
        debug: true
      jms:
        sqs:
          enabled: true

My deployment yml looks like this:

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    app.dekorate.io/vcs-url: <<unknown>>
    app.dekorate.io/commit-id: c041d22bc8a1a69a4c9016b77d9df465c8ca9d83
  labels:
    app.kubernetes.io/name: data-loader-service
    app.kubernetes.io/version: 0.1-SNAPSHOT
  name: data-loader-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: data-loader-service
      app.kubernetes.io/version: 0.1-SNAPSHOT
  template:
    metadata:
      annotations:
        app.dekorate.io/vcs-url: <<unknown>>
        app.dekorate.io/commit-id: c041d22bc8a1a69a4c9016b77d9df465c8ca9d83
      labels:
        app.kubernetes.io/name: data-loader-service
        app.kubernetes.io/version: 0.1-SNAPSHOT
    spec:
      containers:
        - env:
            - name: KUBERNETES_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: MICRONAUT_ENVIRONMENTS
              value: "devcloud"
            - name: aws.region
              value: xxx
          image: mynamespace/data-loader-service:0.1-SNAPSHOT
          imagePullPolicy: Always
          name: data-loader-service
          volumeMounts:
            - name: data-loader-service-config
              mountPath: /data-loader-service-config
      volumes:
        - configMap:
            defaultMode: 384
            name: data-loader-service-config
            optional: false
          name: data-loader-service-config

When my micronaut app in the pod starts up, it is not able to resolve base.dir.

Not sure what's missing here.

user1189332
  • 1,773
  • 4
  • 26
  • 46
  • Have you opened a shell in the pod to confirm the file is mounted *and accessible* as expected? Does your application know to look in `/data-loader-service-config`? Are there errors in the application logs that may provide more information? – larsks Feb 19 '23 at 13:43
  • The pod crashes and goes in the loop because the micronaut application is not able to start. Therefore unable to ssh into the container. Any other options? – user1189332 Feb 19 '23 at 16:53
  • 1
    Of course. Just set a `command` on the container that runs so that you can `exec` into the container and inspect it. `sleep inf` is a popular choice for a command that "does nothing, forever". And even with a crashing pod you should be able to inspect the logs using `kubectl logs`. – larsks Feb 19 '23 at 17:31
  • I have tried the below. It works. But looking for further better way to do it. – user1189332 Feb 20 '23 at 04:20

1 Answers1

0

Here is what I ended up doing. It works. I don't think it's the cleanest way though.

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    app.dekorate.io/vcs-url: <<unknown>>
    app.dekorate.io/commit-id: c041d22bc8a1a69a4c9016b77d9df465c8ca9d83
  labels:
    app.kubernetes.io/name: data-loader-service
    app.kubernetes.io/version: 0.1-SNAPSHOT
  name: data-loader-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: data-loader-service
      app.kubernetes.io/version: 0.1-SNAPSHOT
  template:
    metadata:
      annotations:
        app.dekorate.io/vcs-url: <<unknown>>
        app.dekorate.io/commit-id: c041d22bc8a1a69a4c9016b77d9df465c8ca9d83
      labels:
        app.kubernetes.io/name: data-loader-service
        app.kubernetes.io/version: 0.1-SNAPSHOT
    spec:
      containers:
        - env:
            - name: KUBERNETES_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: MICRONAUT_ENVIRONMENTS
              value: "devcloud"
            - name: MICRONAUT_CONFIG_FILES
              value: "/config/application-common.yml,/config/application-devcloud.yml"
            - name: aws.region
              value: xxx
          image: xxx/data-loader-service:0.1-SNAPSHOT
          imagePullPolicy: Always
          name: data-loader-service
          volumeMounts:
            - name: data-loader-service-config
              mountPath: /config
      volumes:
        - configMap:
            defaultMode: 384
            name: data-loader-service-config
            optional: false
          name: data-loader-service-config
Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
user1189332
  • 1,773
  • 4
  • 26
  • 46