The orders team’s stream lives in east, and its producers and consumers are moving to west. In the supercluster from the previous stories, moving the stream is one field.
Before and after #
01-natsstream-before.yaml
# The orders stream lives in east, in the story 6 supercluster.
apiVersion: jetstream.nats.mikluko.io/v1beta1
kind: NatsStream
metadata:
name: orders
namespace: orders
spec:
connectionRef:
name: acme-orders
name: ORDERS
subjects: ["orders.>"]
storage: File
replicas: 3
placement:
cluster: east
kubectl apply -f https://nats-operator.io/docs/stories/08-stream-transfer/01-natsstream-before.yaml01-status-natsstream-in-east.yaml
status:
observedGeneration: 1
conditions:
- type: Ready
status: "True"
reason: Synced
- type: Synced
status: "True"
reason: MatchesSpec
server:
leader: east-0
02-natsstream-after.yaml
# The only edit: placement.cluster. Within one supercluster a placement change
# is a move request: the server builds a new group in west, copies the stream
# and its consumers live, then drops the east copies.
apiVersion: jetstream.nats.mikluko.io/v1beta1
kind: NatsStream
metadata:
name: orders
namespace: orders
spec:
connectionRef:
name: acme-orders
name: ORDERS
subjects: ["orders.>"]
storage: File
replicas: 3
placement:
cluster: west
kubectl apply -f https://nats-operator.io/docs/stories/08-stream-transfer/02-natsstream-after.yamlDuring the move #
The resource reports progress per new replica and a count of consumers moved, with Synced false until the move ends. What clients see meanwhile is what nats-server provides for a placement move; the controller adds no guarantee of its own.
02-status-natsstream-transferring.yaml
status:
observedGeneration: 2
conditions:
- type: Ready
status: "True"
reason: Synced
- type: Synced
status: "False"
reason: Moving
message: moving to NATS cluster west; 2 of 3 new replicas current
transfer:
from: east
to: west
started: "2026-09-26T12:04:10Z"
replicas:
- name: west-0
current: true
- name: west-1
current: true
- name: west-2
current: false
lag: 18231
consumers:
moved: 1
total: 2
server:
leader: east-1
Synced turns true once the east copies are gone, and the transfer block with them.
03-status-natsstream-in-west.yaml
status:
observedGeneration: 2
conditions:
- type: Ready
status: "True"
reason: Synced
- type: Synced
status: "True"
reason: MatchesSpec
server:
leader: west-0