Аргументы Kubernetes POD не передаются в службу, однако аргументы Docker передаются правильно

Постановка задачи:

Я успешно создал образ Docker из docker.io/joethecoder2/spring-boot-web. Он был протестирован с аргументами командной строки, и они корректно работают локально с Docker.

Я пытаюсь передать аргументы Java, которые передаются в Docker, в Kubernetes POD, который определен с одним изображением docker.io/joethecoder2/spring-boot-web

Цель передачи аргументов - сообщить POD, какой IP-адрес и номер порта предназначены для службы базы данных.

Определение проблемы:

Я определил здесь Kubernetes POD, однако считаю, что аргументы передаются неправильно из singlePod.yaml, когда POD запускает службу.

Ожидаемый результат:

Я ожидаю, что Kubernetes POD будет совместим с образом Docker, определенным здесь.

Я ожидаю, что Kubernetes POD принимает аргументы так же, как Docker здесь:

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

curl -X POST --header 'Content-Type: application/json' --header 'Accept: text/plain' 'http://localhost:8080/restaurant/arguments'

Возвращен правильный результат-> 127.0.0.1:9042

Неправильный результат:

Я знаю, что фактические аргументы не передаются в POD, потому что, когда я запускаю следующую службу, я не получаю никаких возвращенных аргументов.

curl -X POST --header 'Content-Type: application/json' --header 'Accept: text/plain' 'http://192.168.64.3:32308/restaurant/arguments'

Возвращается неверный результат->:

Ожидаемый результат -> 127.0.0.1:9042, как определено в файле singlePod.yaml

Почему отсутствуют аргументы, хотя файлу определения POD известно, что аргументы были определены статически?


person joe the coder    schedule 06.12.2017    source источник
comment
Было бы лучше создать configMap.yaml и связать его с файлом Pod yaml. Он гарантирует, что эти переменные среды будут доступны Контейнеру.   -  person Suresh Vishnoi    schedule 07.12.2017


Ответы (1)


Если вы хотите вставить переменную среды в контейнер, лучше использовать ConfigMap, чтобы обеспечить гибкость, а также разделение проблем.

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: DCASSANDRA_IP
    valueFrom:
        configMapKeyRef:
            key: Dcassandra_ip
            name: env-values
  - name: DCASSANDRA_PORT
    valueFrom:
        configMapKeyRef:
            key: Dcassandra_port
            name: env-values
  restartPolicy: OnFailure

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-values
data:
  Dcassandra_port=9042
  Dcassandra_ip=127.0.0.1

Теперь вам нужно написать файл манифеста службы, чтобы открыть этот контейнер и получить к нему доступ. Я приложил ссылки для дальнейшего исследования.

ConfigMap

Служба

person Suresh Vishnoi    schedule 06.12.2017