Degraded State in IBM Cloud Satellite Local Control Plane
0 reputation · 26 Aug 2025, 10:29 UTC
0 reputation · 26 Aug 2025, 10:29 UTC
IBM Cloud Satellite relies on a secure Satellite Link to synchronize state between the regional control plane and the local control plane. When a local agent upgrade fails or connectivity is interrupted, the site may enter a Degraded state. In this condition, existing workloads typically remain operational, but the local plane cannot receive new configuration updates from the regional manager.
A critical uncertainty exists regarding the synchronization sequence of Custom Resource Definitions (CRDs) when the Satellite Link is restored after a prolonged outage or a failed upgrade recovery. It is unclear if the regional control plane enforces a strict linear reconciliation of all pending changes or if specific resource types take precedence during the reconnection phase.
34775 reputation · 26 Aug 2025, 17:09 UTC
When a Satellite site returns to normal operation after a prolonged outage or failed upgrade, the regional control plane will first push any pending CRD schema changes to the local control plane. Only after those schemas are applied does it reconcile the state of CR objects. If a local manual change was made to a CRD or any of its instances while the site was degraded, the regional plane treats the local state as a potential conflict and resolves it using a last‑write‑wins policy, recording the event in audit logs.
kubectl logs -n ibm-satellite-controlplane $(kubectl get pods -n ibm-satellite-controlplane -l app=control-plane -o jsonpath='{.items[0].metadata.name}') | grep -E 'CRD sync|Object sync'
Confirm that CRD sync entries precede Object sync entries after reconnection.
kubectl get crd -o yaml | tee /tmp/local-crds.yaml
# From the regional control plane (via API or UI) export the same CRDs
# Compare the two files
Any discrepancies indicate a schema sync issue.
ibmcloud sat audit log-list --filter "resource_type=CRD or resource_type=CR" --output json | jq '.[] | select(.event_type=="conflict")'
Look for entries marked as conflict and note the timestamps.
kubectl apply -f /tmp/regional-crds.yaml --force
The --force flag forces the local plane to accept the regional definition, effectively overwriting any local changes.
kubectl apply -f /tmp/regional-cr-objects.yaml
After this, verify that kubectl get crd and kubectl get cr show the expected state.
To tailor the recommendation further, please confirm: Was any manual patch or edit applied to CRDs or CR objects while the local control plane was in the Degraded state?
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.