MirageOS in production

Please share our use cases for Mirage OS. I’m mostly interested in:

  • build, CI/CD pipelines
  • hosting
  • application architecture. Do you use MirageOS for SOA/micro-services architectures or you prefer different approaches/topologies? How do you implement orchestration/service mesh layer, elasticity?
  • unikernel-specific challenges
  • infrastructure cost optimization you got because of using unikernels
  • what is your app’s load profile / what kind of loads it handle?

Thank you for your help!

Dear @egoholic,

we (https://robur.coop) are running several MirageOS unikernels on a custom physical machine (i.e. no cloud service). For doing so:
a) GitHub - roburio/albatross: Albatross: orchestrate and manage MirageOS unikernels with Solo5 for orchestration
b) robur/builder-web: Web interface for builder - builder-web - Gitea: Git with a cup of tea and GitHub - roburio/builder: Scheduling build jobs on regular intervals, collecting artifacts for reproducible builds (see https://builds.robur.coop which is our live server for providing reproducible MirageOS unikernel binaries)
c) unikernels I use are e.g. GitHub - roburio/tlstunnel: A TLS reverse proxy unikernel GitHub - roburio/dns-primary-git: A MirageOS unikernel acting as primary DNS server, data stored in a remote git repository GitHub - roburio/dns-letsencrypt-secondary: A MirageOS unikernel acting as secondary DNS server, provisioning certificate signing requests to valid certificates using let's encrypt GitHub - roburio/caldav: Calendar server (CalDAV, RFC 4791) implementation in OCaml GitHub - roburio/unipi: Serving content from a git repository via HTTPS (including let's encrypt provisioning) as MirageOS unikernel
d) monitoring – here we use GitHub - hannesm/monitoring-experiments: all your unikernel statistics are belong to us in the unikernel and GitHub - mirage/metrics: Infrastructure to collect metrics from OCaml applications. to collect and output counters to a influxdb (and then grafana for visualization)

In the monitoring, we observe for quite a lot of unikernels (e.g. all the dns servers) a constant memory profile. We don’t (yet) have cost optimization / load profiles.

EDIT: Some of the work “deploying MirageOS” is currently sponsored by the EU (NGI Architects | NGI Pointer) – if you are interested in running MirageOS in production, and are lacking something, please get in touch (see https://robur.coop for email address). Our plan is (a) reproducible binary builds (b) integration into orchestration systems (c) monitoring and tracing.

EDIT: We’ll write up some blog posts soon. :slight_smile: