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.yaml

01-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.yaml

During 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