How does argument passing in Kubernetes work?

12/7/2017

A problem:

Docker arguments will pass from command line:

docker run -it -p 8080:8080 joethecoder2/spring-boot-web -Dcassandra_ip=127.0.0.1 -Dcassandra_port=9042

However, Kubernetes POD arguments will not pass from singlePod.yaml file:

apiVersion: v1
kind: Pod
metadata:
  name: spring-boot-web-demo
  labels:
    purpose: demonstrate-spring-boot-web
spec:
  containers:
  - name: spring-boot-web
    image: docker.io/joethecoder2/spring-boot-web
    env: ["name": "-Dcassandra_ip", "value": "127.0.0.1"]
    command: ["java","-jar", "spring-boot-web-0.0.1-SNAPSHOT.jar", "-D","cassandra_ip=127.0.0.1", "-D","cassandra_port=9042"]
    args: ["-Dcassandra_ip=127.0.0.1", "-Dcassandra_port=9042"]
  restartPolicy: OnFailure

when I do:

kubectl create -f ./singlePod.yaml
-- joe the coder
gcp
kubernetes

1 Answer

12/9/2017

Why don't you pass the arguments as env variables? It looks like you're using spring boot, so this shouldn't even require changes in the code since spring boot injects env variables.

The following should work:

apiVersion: v1
kind: Pod
metadata:
  name: spring-boot-web-demo
  labels:
    purpose: demonstrate-spring-boot-web
spec:
  containers:
  - name: spring-boot-web
    image: docker.io/joethecoder2/spring-boot-web
    command: ["java","-jar", "spring-boot-web-0.0.1-SNAPSHOT.jar"]
    env:
    - name: cassandra_ip
      value: "127.0.0.1"
    - name: cassandra_port
      value: "9042"
-- vdimitrov
Source: StackOverflow