Kubernetes и конфликт парсинга загрузочной переменной - PullRequest
0 голосов
/ 28 мая 2018

У меня ошибка конфликта переменных env у Kubernetes и весенней загрузки.Подробности следующие:

При создании моего модуля сервера zipkin мне нужно установить переменную env RABBITMQ_HOST=http://172.16.100.83,RABBITMQ_PORT=5672.

Первоначально я определяю zipkin_pod.yaml следующим образом:

apiVersion: v1
kind: Pod
metadata:
  name: gearbox-rack-zipkin-server
  labels:
    app: gearbox-rack-zipkin-server
    purpose: platform-demo
spec:
  containers:
  - name:  gearbox-rack-zipkin-server
    image: 192.168.1.229:5000/gearboxrack/gearbox-rack-zipkin-server
    ports:
    - containerPort: 9411
    env:
      - name: EUREKA_SERVER
        value: http://172.16.100.83:31501
      - name: RABBITMQ_HOST
        value: http://172.16.100.83
      - name: RABBITMQ_PORT
        value: 31503

При этой конфигурации, когда я выполняю команду

kubectl apply -f zipkin_pod.yaml

Консоль выдает ошибку:

[root@master3 sup]# kubectl apply -f zipkin_pod.yaml
Error from server (BadRequest): error when creating "zipkin_pod.yaml": Pod in version "v1" cannot be handled as a Pod: v1.Pod: Spec: v1.PodSpec: Containers: []v1.Container: v1.Container: Env: []v1.EnvVar: v1.EnvVar: Value: ReadString: expects " or n, parsing 1018 ...,"value":3... at {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"gearbox-rack-zipkin-server\",\"purpose\":\"platform-demo\"},\"name\":\"gearbox-rack-zipkin-server\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"env\":[{\"name\":\"EUREKA_SERVER\",\"value\":\"http://172.16.100.83:31501\"},{\"name\":\"RABBITMQ_HOST\",\"value\":\"http://172.16.100.83\"},{\"name\":\"RABBITMQ_PORT\",\"value\":31503}],\"image\":\"192.168.1.229:5000/gearboxrack/gearbox-rack-zipkin-server\",\"name\":\"gearbox-rack-zipkin-server\",\"ports\":[{\"containerPort\":9411}]}]}}\n"},"labels":{"app":"gearbox-rack-zipkin-server","purpose":"platform-demo"},"name":"gearbox-rack-zipkin-server","namespace":"default"},"spec":{"containers":[{"env":[{"name":"EUREKA_SERVER","value":"http://172.16.100.83:31501"},{"name":"RABBITMQ_HOST","value":"http://172.16.100.83"},{"name":"RABBITMQ_PORT","value":31503}],"image":"192.168.1.229:5000/gearboxrack/gearbox-rack-zipkin-server","name":"gearbox-rack-zipkin-server","ports":[{"containerPort":9411}]}]}}

, поэтому я изменил последнюю строку файла zipkin_pod.yaml следующим образом: Или использовал брутальную силу, чтобы сделать номер порта как int.

apiVersion: v1
kind: Pod
metadata:
  name: gearbox-rack-zipkin-server
  labels:
    app: gearbox-rack-zipkin-server
    purpose: platform-demo
spec:
  containers:
  - name:  gearbox-rack-zipkin-server
    image: 192.168.1.229:5000/gearboxrack/gearbox-rack-zipkin-server
    ports:
    - containerPort: 9411
    env:
      - name: EUREKA_SERVER
        value: http://172.16.100.83:31501
      - name: RABBITMQ_HOST
        value: http://172.16.100.83
      - name: RABBITMQ_PORT
        value: !!31503

Затем модуль успешно создан, но пружина getProperties выдает исключение.

[root@master3 sup]# kubectl apply -f zipkin_pod.yaml
pod "gearbox-rack-zipkin-server" created

Когда я проверяю логи:

[root@master3 sup]# kubectl logs gearbox-rack-zipkin-server
2018-05-28 07:56:26.792  INFO [zipkin-server,,,] 1 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@4ac68d3e: startup date [Mon May 28 07:56:26 UTC 2018]; root of context hierarchy

...

***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target org.springframework.boot.autoconfigure.amqp.RabbitProperties@324c64cd failed:
    Property: spring.rabbitmq.port
    Value:
    Reason: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'port'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [int]
Action:
Update your application's configuration

Мой вопрос заключается в том, как позволить kubernetes воспринимать номер порта как int, не нарушая при этом правила преобразования пружинной загрузки из строки в int?потому что пружинная загрузка не может преобразовать !!31503 to int 31503.

1 Ответ

0 голосов
/ 29 мая 2018

Как отметили @Bal Chua и @ Pär Nilsson, для переменных среды вы можете использовать только строковые переменные, поскольку переменные среды Linux могут быть только строками.

Итак, если вы используете yaml, вам нужно поместить значение в кавычки, чтобы заставить Kubernetes использовать строку.

Например:

- name: RABBITMQ_PORT
  value: '31503'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...