Cluster pools
flyteplugins-union pluginThe cluster-pool CLI commands and Python objects on this page are provided by
the flyteplugins-union package. Install it with
pip install flyteplugins-union.
A cluster pool is a named group of clusters that share one data plane configuration — the same object store, secret store, and container registry. Because every cluster in a pool reads and writes the same data plane, a workload can run on any healthy cluster in the pool and still find its inputs, code, and secrets.
When you need more than one pool
Most deployments need exactly one pool. Every organization is provisioned with a
default pool, and clusters join it when no custom pool is specified. If your
clusters share a bucket, secret store, and registry, leave them in default and
move on to
Clusters.
Create additional pools when you have clusters with distinct data planes — for example, separate development and production cloud accounts, each with its own bucket, secrets vault, and registry. Each such environment becomes its own pool.
Create a pool
A pool is defined by its shared data plane contract: object store, secret store, and optional image registry.
Create one interactively with an editor, or from a file:
# Open an editor pre-filled with a template
flyte create cluster-pool prod --edit
# ...or create from a manifest you've prepared
flyte create cluster-pool prod --file prod-pool.yamlThe manifest declares the shared data plane contract:
name: prod
config:
object_store_ref:
uri: s3://my-prod-bucket/prefix
endpoint: ""
secret_store:
type: AWS_SECRETS_MANAGER
locator: us-east-1
image_registry:
locator: 123456789012.dkr.ecr.us-east-1.amazonaws.com/unionfrom flyteplugins.union.remote import ClusterPool
ClusterPool.create(
"prod",
object_store_uri="s3://my-prod-bucket/prefix",
secret_store_type="AWS_SECRETS_MANAGER",
secret_store_locator="us-east-1",
image_registry="123456789012.dkr.ecr.us-east-1.amazonaws.com/union",
)Supported secret_store_type values are AWS_SECRETS_MANAGER,
GCP_SECRET_MANAGER, AZURE_KEY_VAULT, KUBERNETES, VAULT, and
OCI_VAULT.
Inspect pools
# List all pools
flyte get cluster-pool
# Inspect a specific pool — its config and member clusters
flyte get cluster-pool prodfrom flyteplugins.union.remote import ClusterPool
for pool in ClusterPool.listall(limit=100):
print(pool.name, pool.member_clusters, pool.object_store_uri, pool.secret_store_type)
pool = ClusterPool.get("prod")
print(pool.name)
print(pool.member_clusters)
print(pool.object_store_uri)
print(pool.secret_store_type)
print(pool.image_registry)member_clusters is derived from clusters that were registered into the pool.
Assign clusters when you register them; see
Clusters.
Manage membership
Cluster pool membership is set when clusters are registered:
flyte create cluster prod-us-east-1 --pool prodfrom flyteplugins.union.remote import Cluster
Cluster.create("prod-us-east-1", cluster_pool_name="prod")Existing clusters cannot be moved between pools in place — a registration that names a different pool for an existing cluster is rejected. Moving a cluster is a drain, delete, and re-register sequence; see Move a cluster to a different pool.
Delete a pool
The default pool cannot be deleted. Deleting a non-default pool is rejected
while any cluster or queue still references it: delete the member
clusters first. Queues cannot currently be
deleted, so a pool that has acquired queues (including the implicit queue
created with each registered cluster) cannot be removed until queue removal
becomes available.
flyte delete cluster-pool prod
flyte delete cluster-pool prod --yes # skip the confirmation promptfrom flyteplugins.union.remote import ClusterPool
ClusterPool.delete("prod")Next
With your pools defined, register clusters into them, then create queues to route workloads.