2015-06-17 3 views
0

Я пытаюсь запустить kubernetes на coreos. Я использую флот, setup-network-environment и kube-register для регистрации узлов. Тем не менее, в моем файле облако инициализации, где я пишу мои файлы Systemd единиц, файл подразделение kubelet будет не запускать это правильно:Почему мой системный блок не читает env-переменные должным образом?

ExecStart=/opt/bin/kubelet \ 
--address=0.0.0.0 --port=10250 \ 
--hostname_override=${DEFAULT_IPV4} \ 
--allow_privileged=true \ 
--logtostderr=true \ 
--healthz_bind_address=0.0.0.0 

Вместо моего IP публики, ${DEFAULT_IPV4} результатов в $default_ipv4, который также не привести к ip. Я знаю, что --host-name-override должен просто взять строку, и она работает, когда я запускаю эту строку из командной строки. Существуют и другие файлы модулей, где ${ENV_VAR} отлично работает. Почему это для файла кубельного файла, он просто ломается?

EDIT 1

/и т.д./сети окружающая среда

LO_IPV4=127.0.0.1 
ENS33_IPV4=192.168.195.242 
DEFAULT_IPV4=192.168.195.242 
ENS34_IPV4=172.22.22.238 

EDIT 2

блок kubelet файл

- name: kube-kubelet.service 
    command: start 
    content: | 
    [Unit] 
    Description=Kubernetes Kubelet 
    Documentation=https://github.com/GoogleCloudPlatform/kubernetes 
    Requires=setup-network-environment.service 
    After=setup-network-environment.service 
    [Service] 
    EnvironmentFile=/etc/network-environment 
    ExecStartPre=/usr/bin/curl -L -o /opt/bin/kubelet -z /opt/bin/kubelet https://storage.googleapis.com/kubernetes-release/release/v0.18.2/bin/linux/amd64/kubelet 
    ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet 
    # wait for kubernetes master to be up and ready 
    ExecStartPre=/opt/bin/wupiao 172.22.22.10 8080 
    ExecStart=/opt/bin/kubelet \ 
    --address=0.0.0.0 \ 
    --port=10250 \ 
    --hostname_override=172.22.22.21 \ 
    --api_servers=172.22.22.10:8080 \ 
    --allow_privileged=true \ 
    --logtostderr=true \ 
    --healthz_bind_address=0.0.0.0 \ 
    --healthz_port=10248 
    Restart=always 
    RestartSec=10 

ответ

0

Казалось бы проблема была в версии coreos в бродячем боксе. После обновления брандмауэра поле переменной среды удалось разрешить правильное значение.

2

Символ * = команда Exec не ш ell. В моих экспериментах было не очень хорошо разбираться, где переменная была, если она не была сама по себе. Я пошел и посмотрел несколько примеров в Интернете, и они всегда отображают переменную окружения отдельно. Таким образом, данный файл как/TMP/MYFILE:

ENV=1.2.3.4 

Эти [Service] определений не будет делать то, что вы думаете:

EnvironmentFile=/tmp/myfile 
ExecStart=echo M$ENV 
ExecStart=echo $ENV:8080 

, но это будет работать на отдельной строке:

EnvironmentFile=/tmp/myfile 
ExecStart=echo $ENV 

Это не очень помогает при попытке передать аргумент, как:

EnvironmentFile=/tmp/myfile 
ExecStart=echo --myarg=http://$ENV:8080/v2 

Чтобы выполнить пропускание аргумента, я должен был поставить весь myarg в строке в/TMP/MYFILE:

ENV="--myarg=http://1.2.3.4:8080/v2" 

Наконец я мог могу получить мой аргумент передается:

EnvironmentFile=/tmp/myfile 
ExecStart=echo $ENV 
+0

Где находится 'd'? Я использую среду по умолчанию/etc/network-environment из setup-network-environment, я упомянул, что использую ее. Я не работаю на цифровом океане, это на локальных виртуальных машинах и, наконец, на gce. –

+0

Можете ли вы опубликовать текст облака? Кроме того, это поможет узнать содержимое/etc/network-environment после запуска установки-сети-среды. материал $ {d ..} исходит из аргументов шаблона. Мой шаблон разрешает --hostname_override = $ public_ip, я изменю ответ, чтобы содержать разрешенный текст. – Greg

+0

Хорошо добавил/etc/network-environment –