Come build architetture statali di servizi di docker con la flotta di CoreOS?

CoreOS utilizzato con la flotta consente di build servizi che eseguono alcune applicazioni docker.

Ma c'è un modo per eseguire servizi di docker che richiedono che il suo stato sia tenuto tra i riavvio, per essere persistente? Ad esempio, database o servizi che devono memorizzare alcuni file da condividere in un secondo momento.

Perché per quanto lo so, il servizio può essere lanciato sulla macchina core-1 (ad esempio) e sul riavvio verrà lanciato su un'altra random. Quindi il volume del docker può essere perso.

Il modo più semplice per mantenere un servizio di database è quello di pianificare l'unità flottante alla stessa macchina. È ansible farlo aggiungendo una sezione [X-Fleet] al file dell'unità flotta e assegnando l'unità a un determinato X-ConditionMachineID o X-ConditionMachineMetadata . Vedere la documentazione dei coreos .

È quindi ansible persistere i dati al di fuori dei contenitori docker montando un volume dalla macchina host. Il modo consigliato per farlo è quello di avvolgere questi dati in un contenitore di dati separato tramite docker:

docker run --name mongodb-volume -v /home/core/mongodb-data:/data/db busybox docker run -p 27017 --volumes-from mongodb-volume mongodb:latest

Poiché i dati di /home/core/mongodb-data su una particolare macchina memorizzeranno lo stato mongodb persistente e l'unità sarà sempre pianificata a quella stessa macchina, questo risolverà il problema.

È ansible considerare di eseguire un file system distribuito su cluster CoreOS. In questo modo qualunque macchina finisca il contenitore del servizio di database, sarà sempre in grado di utilizzare database, montato da DFS.