Файлы модулей CoreOS на самом деле являются файлами модулей systemd. Когда вы отправляете файл юнита во флот, он сохраняется в каком-то реестре. Когда вы запускаете файл объекта, флот передает этот файл объекта в /run/fleet/units
каталог на машине, в котором планируется запуск устройства. Когда модуль останавливается, файл модуля удаляется из машины.
Возникает вопрос: где флот хранит представленные файлы юнитов? Я думал есть только etcd
там как распределенное хранилище данных. Но etcd ls
проверка не показывает ничего похожего на файлы модулей в хранилище.
Ох .. Похоже, они хранятся в скрытых ключах в etcd вот так:
core-02 ~ # etcdctl get /_coreos.com/fleet/states/hello-fleet.service/7fd494f60e2844978072683ea374a7dd
{"loadState":"loaded","activeState":"active","subState":"running","machineState":{"ID":"7fd494f60e2844978072683ea374a7dd","PublicIP":"","Metadata":null,"Version":""},"unitHash":"e738189b45f4421e25cc0990da1c1e37ba0d40c6"}
core-02 ~ # etcdctl get /_coreos.com/fleet/job/hello-fleet.service/object
{"Name":"hello-fleet.service","UnitHash":[231,56,24,155,69,244,66,30,37,204,9,144,218,28,30,55,186,13,64,198]}
core-02 ~ # etcdctl get /_coreos.com/fleet/state/hello-fleet.service
{"loadState":"loaded","activeState":"active","subState":"running","machineState":{"ID":"7fd494f60e2844978072683ea374a7dd","PublicIP":"","Metadata":null,"Version":""},"unitHash":"e738189b45f4421e25cc0990da1c1e37ba0d40c6"}
core-02 ~ # etcdctl get /_coreos.com/fleet/unit/e738189b45f4421e25cc0990da1c1e37ba0d40c6
{"Raw":"[Service]\nExecStart=/usr/bin/bash -c \"while true; do echo 'Hello Fleet'; sleep 1; done\"\n"}
core-02 ~ #