Leader Election Without ZooKeeper: A Postgres Lease, Not a New Service
Running 3 instances of a cron worker means the nightly report runs 3 times. You don't need ZooKeeper or etcd to fix that — a lease row in the database you already have gets you correct leader election in about 30 lines.