10
votes

Comment obtenir des valeurs d'ETCD dans mon service SystemD sur Coreos?

J'ai deux services A et B.

A définit une valeur dans l'ETCD en cours de démarrage, dites que l'adresse IP publique qu'elle bénéficie d'un fichier d'environnement: xxx

B a besoin de cette valeur tel qu'il démarre, ainsi que sa propre adresse IP. Donc, quelque chose comme ça serait bien: xxx

Mais cela n'est évidemment pas possible car les variables OCCD ne sont pas présentes comme des variables d'environnement SystemD. Au lieu de cela, je peux faire une sorte de / usr / bin / bash -c 'exécuter des trucs' dans mon exécutart mais c'est gênant surtout car j'ai besoin de SystemD pour développer $ Coreos_public_ipv4 et ma nouvelle coquille bash pour développer $ (ETCCDCTL get / a_addr) . Il requis de l'odeur de code et me fait penser que je manque quelque chose d'important.

Quelqu'un peut-il me dire le moyen "droit" d'obtenir des valeurs d'ETCD dans mon exécutation de déclaration

- Mise à jour

Donc, je suis en marche avec xxx

mais c'est assez moche. Je ne peux toujours pas croire que je ne manque pas quelque chose ..


1 commentaires

Cela fonctionne quelque peu - mais lorsque vos conteneurs Docker tombent sur le service SystemD ne le réalisent pas parfois.


3 Réponses :


1
votes

Pouvez-vous conteneur lire directement à partir de etced tel qu'il démarre, sur la Docker0 IP du pont, au lieu de passer dans les valeurs? Cela vous permettra également de faire une logique plus complexe sur la réponse, analysez JSON si vous le stockez comme valeur etce, etc.


1 commentaires

Je n'avais aucune idée de la lecture de l'ETCD de l'intérieur du conteneur. Cela dit, je gère un binaire tiers en tant que point d'entrée du conteneur si court de la lecture de la lecture de l'ETCD de la DockerFile (qui semble un peu effrayant) Je ne suis pas sûr que cela résout le problème ...



12
votes

J'ai eu du mal avec la même chose jusqu'à récemment. Après avoir lu une grande partie de la documentation de Coreos et Systemd, voici une version légèrement «nettoyeuse» de ce que vous faites:

[Service]
EnvironmentFile=/etc/environment
ExecStart=/bin/sh -c '/usr/bin/docker run -e A_ADDR=$(/usr/bin/etcdctl get /A_ADDR) -e MY_ADDR=$COREOS_PUBLIC_IPV4 mikedewar/B'


1 commentaires

Check passenvironment = - Cela m'a aidé à passer Variables ENV dans la configuration de Docker SystemD.



3
votes

J'utilise actuellement un tel contexte:

J'ai créé des scripts qui extrait des données d'un répertoire OCCD particulier P> xxx pré>

Sa sortie suivante: p>

/bin/sh -c '/usr/bin/docker run -p 9000:9000 $(/home/core/envs.sh) me/myapp -D FOREGROUND'


0 commentaires