Etlworks application and embedded ETL engine for managed, elastic Kubernetes clusters.
219
Etlworks application and embedded ETL engine for managed, elastic Kubernetes clusters.
Image: etlworks/etlworks-managed
Each application member runs the full Etlworks application and embedded engine. The matching Etlworks lifecycle adapter coordinates safe member creation, draining and upgrades. KEDA and Kubernetes HPA determine desired application capacity from the configured policy and metrics.
Install using the Etlworks managed-cluster release bundle supplied through your authorized Etlworks release channel. The bundle includes the installation client, charts, platform assets, release descriptor and operating instructions. The application, controller and configuration contracts must belong to a compatible release.
Use the immutable image references in the bundle's release.json. Available tags
are listed on Docker Hub's Tags tab; architecture and supported infrastructure
are specified by the selected release. A local Docker image configuration ID is
not a registry manifest digest.
The currently documented installation profile is local-nfs-v1,
using an existing Kubernetes cluster with the release's pinned networking,
storage and autoscaling components. Hosted AWS, Azure and Google Cloud profiles,
infrastructure HA and alternative storage need their own supported release profile. Successful installation of the local profile does
not establish production qualification for those other deployments.
New matrix releases provide Linux AMD64 and ARM64 variants. Select the release
ZIP matching the target Kubernetes nodes; the installation workstation may use a
different architecture. Each ZIP pins platform-specific app/controller digests.
Architecture-specific tags end in -amd64 or -arm64; an architecture-neutral
candidate tag identifies both variants. Check the selected tag's actual platforms:
older ARM64-only releases remain ARM64-only. Upgrades preserve the installation's
architecture; publishing both variants does not permit a rolling architecture change.
This image contains the versioned application/engine, Java 25 and Tomcat runtime. Installation uses Kubernetes and the supplied client. The image is not a native host installer and does not download updated WARs during application startup.
Prepare:
The local profile can provision PostgreSQL, Redis, NFS and HAProxy through the installer. Use its documented worker/storage bindings. External infrastructure choices are supported only when included in your selected release profile. Machine provisioning and node-pool limits are platform-operator responsibilities.
Obtain the release archive and its expected SHA-256 through a trusted Etlworks
channel. Substitute the actual archive name for RELEASE.zip below.
On Linux:
sha256sum RELEASE.zip
On macOS:
shasum -a 256 RELEASE.zip
Compare the result with the independently supplied expected hash before extracting. Then extract into a new directory:
mkdir etlworks-release
unzip RELEASE.zip -d etlworks-release
cd etlworks-release
python3 deployment/installer/release_archive.py verify --root .
Keep this directory unchanged. Its inventory rejects missing, changed and extra files. Store installation inputs, secrets, logs and backups outside it, and retain the original archive for recovery.
Create a protected sibling directory and copy the supplied configuration example:
mkdir -p ../etlworks-private
chmod 700 ../etlworks-private
cp -n deployment/installer/example.json ../etlworks-private/install.json
chmod 600 ../etlworks-private/install.json
Edit install.json for your environment. Use absolute paths for the release and
protected input files. The important fields are:
| Field | Value to supply |
|---|---|
kubeconfig, context | The exact target Kubernetes credentials and context |
namespace, clusterName | The intended namespace and installation name |
releaseDescriptor | Absolute path to this release's release.json |
bundle | Signed environment installation-bundle JSON |
authorization | Execution-authorization JSON, including its signed authorization value |
identityKey, capacityKey, bootstrapKey | Independently trusted public DER key files supplied for the issuer |
hostname | The application hostname clients and Integration Agents will reach |
administrator | Administrator email and protected password-file reference, or interactive password entry |
storage | Worker/storage bindings required by this profile |
postgres, redis | Infrastructure selections supported by the profile |
The license supplies starting member count and CPU/RAM profile. The installer validates those signed values; installation JSON does not author sizing. Subsequent operational policy stays within the licensed limits.
Private issuer signing keys stay on the license server. Do not place private keys, passwords or bearer tokens in the configuration JSON, image, public repository or release directory. Refer to protected files/Secrets as specified by the installer. The initial password must satisfy the application's existing password policy.
From the extracted release directory:
sh deployment/installer/etlworks-kubernetes.sh preflight \
--config ../etlworks-private/install.json --json
sh deployment/installer/etlworks-kubernetes.sh install \
--config ../etlworks-private/install.json --wait 20m --json
sh deployment/installer/etlworks-kubernetes.sh status \
--config ../etlworks-private/install.json --json
The installer uses the specified context; it does not switch the workstation's active context. Compatible platform prerequisites are reused. The installer does not silently upgrade an existing shared Kubernetes platform component.
If the client is interrupted or its wait ends while work is pending, inspect status and resume the same installation:
sh deployment/installer/etlworks-kubernetes.sh resume \
--config ../etlworks-private/install.json --wait 20m --json
A client timeout is not permission to terminate application work or start another installation. Preserve the configuration, release, namespace, operation receipts, credentials and storage. A blocked result includes the condition to investigate. There is no timeout-based force deletion or automatic business-flow replay.
The native Etlworks CLI can delegate to this client when
ETLWORKS_MANAGED_HOME points to the extracted release. A PowerShell launcher,
deployment/installer/etlworks-kubernetes.ps1, is also supplied; use it only with
a release supporting your installation workstation/platform combination.
Use the configured HTTPS hostname and initial administrator credentials once installation reports the admitting fleet ready. DNS, client reachability and frontend certificate trust must match that hostname. Installation does not configure workstation DNS automatically.
The local profile uses an internal frontend CA. For local access, an operator can forward the proxy Service, using the actual context, namespace and cluster name:
kubectl --kubeconfig /absolute/kubeconfig --context CONTEXT \
-n NAMESPACE port-forward service/CLUSTER_NAME-proxy 8443:443
Map the configured hostname to loopback for this access path, trust the approved
frontend CA and open https://CONFIGURED_HOSTNAME:8443/. Port forwarding does not
provide public ingress or DNS. Keep TLS hostname/certificate verification enabled.
Etlworks operational policy controls minimum/warm capacity, load thresholds and stabilization within the signed entitlement. CPU, container RAM and JVM heap observations have distinct meanings; RAM includes more than JVM heap.
KEDA/HPA recommends desired application replicas. The lifecycle adapter creates members and controls planned removal. Initializing a maximum of two members does not itself request two starting members or guarantee one member on each machine; the signed starting configuration and Kubernetes placement rules determine that.
Before planned removal, new execution admission closes and traffic is withdrawn. Ordinary executions finish. Healthy continuous executions can be stopped and replaced only when their current lifecycle eligibility allows it. Removal waits for actual execution/owned-work termination and required handoff evidence. A blocked drain can therefore keep actual capacity above desired capacity.
A larger pod fleet can receive new work; it cannot divide an existing indivisible execution. Kubernetes process replacement after a crash does not authorize restarting its business executions. Node autoscaling and voluntary machine maintenance must use a supported integration respecting these drain constraints.
List pods and follow a specific app member's console/Tomcat output:
sh deployment/installer/etlworks-kubernetes.sh pods \
--config ../etlworks-private/install.json
sh deployment/installer/etlworks-kubernetes.sh logs \
--config ../etlworks-private/install.json --pod APP_POD --tail 200 --follow
sh deployment/installer/etlworks-kubernetes.sh logs \
--config ../etlworks-private/install.json --pod APP_POD --previous
sh deployment/installer/etlworks-kubernetes.sh diagnostics \
--config ../etlworks-private/install.json --output ../etlworks-private/support.zip
The app container is named app-engine. Use --container controller for a
controller pod. Direct kubectl get pods, describe and logs remain available.
A log-follow session stays with the selected pod; select its replacement explicitly.
Retention after pod deletion requires your platform's logging collection.
Diagnostics are read-only and produce a bounded status bundle. Send support files through your authorized support channel; keep credentials and private keys private.
Use the managed upgrade UI as an Etlworks SuperAdmin, or the release client's
update commands with the required Kubernetes permissions. The backend/UI and
CLI use the managed upgrade protocol; UI actions do not invoke a host CLI.
The platform operator must first register an approved source/target release pair and immutable image references. Inspect the plan before starting:
sh deployment/installer/etlworks-kubernetes.sh update plan \
--config ../etlworks-private/install.json \
--source SOURCE_MANIFEST_DIGEST --target TARGET_MANIFEST_DIGEST --json
sh deployment/installer/etlworks-kubernetes.sh update start \
--config ../etlworks-private/install.json --request REQUEST_UUID \
--source SOURCE_MANIFEST_DIGEST --target TARGET_MANIFEST_DIGEST \
--plan-digest PLAN_DIGEST_FROM_PLAN --json
sh deployment/installer/etlworks-kubernetes.sh update status \
--config ../etlworks-private/install.json --request REQUEST_UUID --json
Use the identifiers supplied by the registered release pair and retain the request
UUID for retries. update pause and update resume operate on that same request.
Follow the shipped installer/operations guide for their arguments and any recovery
command shown by status.
The approved compatibility plan determines rolling versus maintenance behavior. App startup owns database migrations under the managed upgrade controls. Image rollback alone does not undo a schema migration. Controller/platform/database-server upgrades are separate operations; app upgrades do not silently perform them.
Use the matching installed release and its shipped recovery guide. Backup/restore has offline preparation requirements: settle executions and maintenance operations, stop the relevant reconciliation/autoscaling writers and preserve exact storage and credential identities before starting the supported offline procedure.
A checkpoint includes PostgreSQL, the dedicated Redis database's logical contents, shared application data and protected installation credentials. Keep backups in a separate protected location. Inspect an archive before restoring:
sh deployment/installer/etlworks-kubernetes.sh restore inspect \
--config ../etlworks-private/install.json \
--archive /absolute/backups/checkpoint.zip --json
restore start replaces selected data. A successful restore remains held for
explicit authority reconciliation/cutover; it does not automatically restart
business executions. Regular-to-managed or managed-to-regular migration needs the
release's explicit migration workflow and source isolation, not an ordinary
in-place restore or per-pod image change.
| Item | Contract |
|---|---|
| Runtime identity | Non-root UID/GID 1000:1000 |
| Application/engine runtime | Java 25 and Tomcat, packaged together |
| HTTP port | 8080; normal user traffic uses the installed proxy/frontend |
| Lifecycle port | 8444; private control traffic with the installed authentication/trust |
| Shared application state | /var/lib/etlworks/environment/app-data |
| Durable member identity | /var/lib/etlworks/member |
| Generated configuration | /etc/etlworks/runtime |
| Writable Tomcat runtime | /var/run/etlworks/tomcat |
| Scratch/cache | /var/tmp/etlworks, /var/cache/etlworks |
The installer supplies mounts, identities, Secrets, JVM arguments and resource
limits. JAVA_OPTS, CATALINA_OPTS and JDK_JAVA_OPTIONS overrides are rejected
by this image's startup contract. Select supported sizing through licensed
profiles and managed policy. Removing a pod does not remove its retained data.
Do not delete PVCs, member identities or coordination state to clear a hold.
For installation-specific help, use the installer, operations and recovery guides included in the same release and contact Etlworks support through your existing support channel.
Content type
Image
Digest
sha256:f7c858a57…
Size
882.7 MB
Last updated
about 5 hours ago
docker pull etlworks/etlworks-managed:managed-10-22fad517c47e