Skip to content

Acknowledge RP-applied Machine labels and taints - #278

Open
Wenxuan W (wenxuan0923) wants to merge 7 commits into
wenx/authoritative-machine-goalsfrom
wenx/acknowledge-rp-node-updates
Open

Acknowledge RP-applied Machine labels and taints#278
Wenxuan W (wenxuan0923) wants to merge 7 commits into
wenx/authoritative-machine-goalsfrom
wenx/acknowledge-rp-node-updates

Conversation

@wenxuan0923

Copy link
Copy Markdown
Collaborator

Summary

  • Recognize Machine label- and taint-only updates that AKS RP has already reconciled onto the existing Kubernetes Node.
  • Persist the new complete goal and ETag without restarting or repaving the nspawn worker.
  • Keep non-Node-observable changes, including Kubernetes version and max-pods changes, on the existing fail-closed Node-deletion repave path.
  • Validate additions, updates, removals, unrelated Node metadata, omitted scalar defaults, retries, and RP key-wide taint deletion semantics.

Behavior

When the Machine ETag changes, the daemon compares the desired goal with its complete applied goal. It acknowledges in place only when:

  • all fields other than custom labels and taints are unchanged;
  • every desired label and taint is present on the Node;
  • labels and taints removed from the previous goal are absent; and
  • the Node is not being deleted.

Otherwise, the daemon continues returning WaitForNodeSignal and requires the existing Node-deletion signal before blue-green repave.

Direct ARM Machine status is currently read-only, so ARM mode persists local convergence while skipping the status mutation.

Validation

  • go test ./...
  • go test -race ./pkg/daemon
  • go vet ./...
  • golangci-lint run --timeout=5m (0 issues)
  • Real Azure VM E2E in eastus2euap against RP frontend v20260807.260816.1:
    • RP reconciled Machine labels and taints onto the live Node.
    • Agent selected AcknowledgeGoalState and advanced the applied ETag without changing Node UID, active nspawn side, or leader PID.
    • A subsequent Kubernetes-version goal selected WaitForNodeSignal, then repaved kube1 to kube2 only after Node deletion.
    • Final kubelet version was v1.36.3; all test resources were deleted.

@wenxuan0923
Wenxuan W (wenxuan0923) force-pushed the wenx/authoritative-machine-goals branch from b25cacf to f73a18c Compare August 19, 2026 01:38
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.

1 participant