Our backup infrastructure leverages zfs send/receive functionnality via syncoid from the sanoid package. We use a custom script called bacoid, which gets its config files via zfs config. Backups are sent to two PBS servers that are in lxc containers.
Since zfs config variables are recursive, setting syncoid:* config on rpool will then mean that every volume under it will be backed up. To exclude a volume that you don't want backed up, you can set syncoid:pool_a and syncoid:pool_b as empty.