xyOps conductor in Docker + xySat-legacy workers as systemd services on one RHEL 7.9 VM #449
Replies: 1 comment 2 replies
|
Hi @vishalr-nrift! Thanks for explaining your setup so clearly. Given the host access your jobs need, a Docker-based xyOps conductor with a native xySat Legacy service is a reasonable approach for your migration period. I would make one change, though: consolidate the two satellites into a single installation at the standard path. The conductor and satellite serve different purposes. The conductor handles scheduling, orchestration, storage, and the UI, while xySat executes jobs and collects monitoring data on the worker. Your conductor does not need access to all those application directories for jobs executed by a native satellite. Those jobs run on the host, with access governed by the satellite's and job process's permissions. A containerized satellite can access host directories through bind mounts, but filesystem access is only part of your requirement. Managing host services also involves the host's service manager and process environment. For your JVM, Redis, ELK, and shell-script workloads, a native satellite keeps that arrangement straightforward. There is no need to put the satellite back into Docker just to match the conductor. Running two xySat installations simultaneously on the same host is not a supported configuration. It can be made to work with sufficient customization, but it adds complexity without providing additional execution capacity or availability. A single xySat can run many jobs in parallel. There is no default per-server concurrency limit, so the practical capacity depends on the VM's CPU, memory, disk, and the jobs themselves. You can configure Max Jobs Per Server to protect the VM, and pair that with queue limits so excess work waits for capacity. See Max Jobs Per Server. For workload organization, the same server can belong to multiple server groups. For example, you could have application, Redis, and ELK groups that all include this VM, then organize the corresponding events into categories. Groups provide logical targeting and monitoring views; they do not create separate execution environments or reserve resources for each workload. Event and category limits are useful for controlling concurrency, while workflows can express startup and shutdown dependencies. The Server Groups and Limits documentation covers those options. If your reason for having two satellites is to run different jobs under different Unix accounts, that can also be handled with one satellite through plugin execution credentials, provided the satellite has permission to switch to the required accounts. Separate satellite installations are not necessary for that. The custom installation directories are also significant because the built-in upgrade system expects the standard installation. On Linux, the upgrade script explicitly targets: It also expects the standard xySat Legacy is maintained alongside the main xySat release. It is a full mirror of the satellite application, built from the same source and dependencies. Our normal release process automatically triggers the legacy build using the matching xySat version number, so the intention is to keep both in lock-step with feature parity. The separate repository exists to produce compatible packages. For Linux x64, its principal difference is the bundled Node.js runtime, which is compiled against glibc 2.17. Other packaged platforms use official Node.js binaries. You should not expect a separate feature backlog or a slower feature-release cadence for Legacy. There can be a short delay while its build finishes, and occasional build failures can require attention, but that is different from maintaining an older version of the application. The legacy build workflow shows how it fetches and packages xySat. The unofficial Node.js runtime's documentation describes several caveats you should be aware of:
These are limitations of the runtime distribution on legacy platforms, even though the xySat application has feature parity. See the unofficial-builds documentation. The xySat version and bundled Node.js version are separate. The current satellite packaging uses Node 22.22.0; rebuilding xySat does not automatically select the newest Node patch release. Node 22's scheduled upstream end-of-life is April 30, 2027, according to the Node.js release schedule. That date is useful for migration planning, but it is not a promise that unofficial builds or RHEL 7 compatibility will remain available until then. The legacy runtime also does not address support or security updates for the underlying OS. A few practical suggestions for your interim setup:
Consolidating the satellites now should make both day-to-day operation and the eventual migration much easier! |
Uh oh!
There was an error while loading. Please reload this page.
Context:
We're using xyOps to orchestrate startup/shutdown and monitoring of a mixed estate on a single RHEL 7.9 VM — JVM-based application services, shell scripts, Redis, and an ELK stack. The jobs need real access to the VM's filesystem (installed application directories, config, logs) to actually manage these services, not just trigger them remotely.
Why the conductor is a Docker container, not a native Linux service:
RHEL 7.9 ships glibc 2.17 across every minor release. xyOps requires Node 20+, and one of its native dependencies (better-sqlite3) needs a C++20-capable compiler to build from source — RHEL 7.9's toolchain (GCC 4.8.5) predates C++20. A native
npm installof xyOps on this VM isn't viable as a result. Running the conductor as a Docker container sidesteps this, since the image bundles its own compatible Node/glibc userspace.Why the workers are xySat-legacy as native systemd services, not Docker:
We initially tried xySat as Docker containers on the same VM, but they couldn't reach the scripts and application directories mounted at various locations on the host — our jobs need to run real shell scripts and start/stop JVM/Redis/ELK services directly against the host filesystem, and container path isolation got in the way. We moved to xySat-legacy (the glibc-2.17-compatible build for RHEL 7/CentOS 7-class systems), installed natively as systemd services, so jobs execute directly in the host environment.
Current architecture:
Questions:
Is this the right architecture for our use case (a scheduler that needs full host-level access to run shell scripts and manage JVM/Redis/ELK services), or is there a better-supported pattern we're missing?
We currently run two xySat-legacy instances on one VM. The docs/README note that xySat installs to a fixed path and that a second agent on the same host isn't the standard supported pattern — the suggested approach is one satellite per host, with workload separation handled via server groups. Is running two instances on a single host (at different install directories) targeting one conductor a supported configuration, or should we consolidate to a single satellite and use server groups instead?
How actively maintained is the xysat-legacy build relative to the main xySat repo? Since it's a separate wrapper repo that rebuilds from xySat's main branch only when a new tag is pushed there, is there a reliable cadence for keeping it in sync with new xyOps/xySat releases, or should we expect some lag on new features?
We're aware RHEL 7 is EOL and this is a deliberate stopgap while we plan a RHEL 8/9 migration — mainly looking to confirm we're not building on a pattern that will bite us before that migration happens. Appreciate any guidance.
All reactions