Skip to content

Docs for multi-node support for polling tentacles - #3481

Draft
sburmanoctopus wants to merge 7 commits into
mainfrom
levi/multi-node-support-for-polling-tentacles
Draft

sburmanoctopus wants to merge 7 commits into
mainfrom
levi/multi-node-support-for-polling-tentacles

Conversation

@sburmanoctopus

@sburmanoctopus sburmanoctopus commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

We are releasing the multi-node support for polling tentacles feature. To use this feature, you need to configure certain settings and directories.

This PR are all the docs regarding what you need to configure in order to use the multi-node support for polling tentacles feature.

Fixes LEV-1982

@team-marketing-branch-protections

Copy link
Copy Markdown

Pull request environment is available at https://stoctodocspr3481.z22.web.core.windows.net/.

You can view the ephemeral environment status in Octopus Deploy.

This environment will be automatically deprovisioned when the pull request is closed, or after 7 days of inactivity.

Multi-node support for Polling Tentacles removes that restriction. The nodes share a pending request queue stored in Redis, so a request queued by any node can be collected by whichever node the Tentacle is connected to. Each Tentacle only needs to poll a single address, which a load balancer spreads across all the nodes.

:::div{.hint}
Multi-node support for Polling Tentacles is available from Octopus Server [VERIFY: 2026.4 — needs: the first release that ships the `multiNodePollingTentaclesRedisConnectionString` setting].

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fill in when the branch for this merges to main

@sburmanoctopus
sburmanoctopus marked this pull request as ready for review September 29, 2026 04:47
@sburmanoctopus
sburmanoctopus marked this pull request as draft September 29, 2026 04:47

@gb-8 gb-8 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Pre-approved, with a bunch of minor comments.

Note that I have reviewed for clarity and readability.
I've also made sure that it seemed correct to me, but haven't exhaustively checked for correctness.

## Connecting Polling Tentacles

While a Tentacle could poll a load balancer in an Octopus High Availability cluster, there is a risk, depending on your load balancer configuration, that the Tentacle will not poll all servers in a timely manner.
While a Tentacle could poll a load balancer in an Octopus High Availability cluster, there is a risk, depending on your load balancer configuration, that the Tentacle will not poll all servers in a timely manner. To poll through a load balancer, turn on [multi-node support for Polling Tentacles](/docs/administration/high-availability/multi-node-polling-tentacles).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably can remove the first sentence, since just randomly polling a load balancer and hoping is worth mentioning.

We should update this whole section to make it clear that using Redis is the recommended way, and these other ways are fallback options if you can't/won't use Redis.

|**TASK_CAP**|Sets the task cap for this node. If not specified, the default is 5.|
|**DISABLE_DIND**|The Linux image will by default attempt to run Docker-in-Docker to support [execution containers for workers](/docs/projects/steps/execution-containers-for-workers). This requires the image to be launched with [privileged permissions](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities). Setting `DISABLE_DIND` to `Y` prevents Docker-in-Docker from being run when the container is booted.|
|**CLUSTER_SHARED_CONFIG**|Sets how Octopus stores the files that every node in a cluster needs to share. Valid values are `CLUSTER_SHARED`, `SEPARATE_VOLUMES_WITH_CLUSTER_SHARED`, and `SEPARATE_VOLUMES`, and they aren't case-sensitive. Any other value stops the container with an error. If not set, a new installation uses the `/repository`, `/artifacts`, `/taskLogs`, and `/eventExports` volumes, and an existing installation keeps its current paths. See [cluster shared configuration](#cluster-shared-configuration).|
|**USE_EXECUTIONS_CLUSTER_SHARED**|Set to `True` to store transient execution data (the `SharedPackageCache`, `DataBus`, and `DataStreams` folders) in the `/executionsClusterShared` volume instead of in `/clusterShared`. The value isn't case-sensitive. Only valid when `CLUSTER_SHARED_CONFIG` is `SEPARATE_VOLUMES_WITH_CLUSTER_SHARED` or `CLUSTER_SHARED`. With any other `CLUSTER_SHARED_CONFIG` value, including not set, the container stops with an error.|

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We document why you would want to do this below, so maybe say "see Cluster shared configuration below"?
Otherwise a reader is left wondering why they'd want to do this.

Octopus stores transient execution data, which is only needed while tasks run, in these folders in the cluster shared directory:

- `DataStreams`, for data streams sent to Polling Tentacles
- `DataBus`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DataBus is the only one whose purpose is not explained. It's an internal detail, so we don't have to say much, but should probably say something.

Suggested change
- `DataBus`
- `DataBus`, used internally by Octopus Server

- If the Redis connection string is set and `CLUSTER_SHARED_CONFIG` is `SEPARATE_VOLUMES`, the container stops with an error.
- If the Redis connection string is set and `CLUSTER_SHARED_CONFIG` isn't set, the container logs a warning. Octopus Server then fails to start unless a cluster shared or executions cluster shared directory was already configured.

These checks only look at the `OCTOPUS_MULTI_NODE_POLLING_TENTACLES_REDIS_CONNECTION_STRING` environment variable.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line is a bit confusing, since the checks are comparing multiple things, not just checking one thing.
I assume it is calling out that it is not checking if the setting is used directly (rather than env var)?

In which case, it's better to just be explicit about this in the lines above.
E.g.

- If the `OCTOPUS_MULTI_NODE_POLLING_TENTACLES_REDIS_CONNECTION_STRING` is set and `CLUSTER_SHARED_CONFIG` isn't set, the container logs a warning. Octopus Server then fails to start unless a cluster shared or executions cluster shared directory was already configured.

Also, prefer ...is not set... to isn't set.


## Turn on multi-node support for Polling Tentacles

Multi-node support for Polling Tentacles is turned on when a Redis connection string is configured, and turned off when it isn't. Configure **every node** in the cluster with the same connection string.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I find the use of isn't here (and elsewhere in the docs) jarring.
I think "is not" is more readable in documentation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants