Skip to main content

Reverse Migration — Rollout to Deployment

Abandon Argo Rollouts and return to standard Kubernetes Deployments — for example, when simplifying infrastructure or migrating to a different progressive delivery tool. See Examples for quick reference.


Prerequisites

ComponentStatus
Kubernetes clusterAccessible via kubectl
Argo Rollout MCP ServerRunning (Docker recommended)
Existing RolloutExists in target namespace

Environment Setup

Verify Rollout

kubectl get rollout hello-world -n default -o yaml
docker run --rm -it \
-p 8768:8768 \
-v ~/.kube:/app/.kube:ro \
-e K8S_KUBECONFIG=/app/.kube/config \
talkopsai/argo-rollout-mcp-server:latest

What Gets Converted

PreservedRemoved
spec.template (pod template)Argo strategy (canary/bluegreen steps)
spec.replicastrafficRouting
spec.selectorworkloadRef
metadata (name, namespace, labels)Argo-specific annotations (argoproj.io/*)
managed-by: argoflow-mcp-server label

Output: Standard apps/v1 Deployment with RollingUpdate strategy (or Recreate).


Get Rollout YAML Workflow

StepActionPrompt / Tool
1Fetch YAMLkubectl get rollout hello-world -n default -o yaml
2Or use resourceargorollout://rollouts/default/hello-world/detail (may include full manifest)

Convert Rollout → Deployment Workflow

StepActionPrompt / Tool
1Convert"Convert the hello-world Argo Rollout in default back to a standard Kubernetes Deployment with RollingUpdate strategy, 25% max surge."
2Or use toolconvert_rollout_to_deployment(rollout_yaml="<yaml from step A>", deployment_strategy="RollingUpdate", max_surge="25%", max_unavailable="25%")
3ReviewCheck deployment_yaml in response — verify apiVersion, kind, template, replicas

Review Generated Deployment YAML Workflow

StepActionPrompt / Tool
1InspectVerify apiVersion: apps/v1, kind: Deployment, spec.strategy.type: RollingUpdate
2AdjustRe-run with different max_surge or max_unavailable if needed
3SaveSave YAML to file for kubectl apply

Apply Deployment and Delete Rollout Workflow

StepActionPrompt / Tool
1Apply Deploymentkubectl apply -f deployment.yaml (manual step)
2Delete Rollout"Delete the hello-world rollout from the default namespace."
3Or use toolargo_delete_rollout(name="hello-world", namespace="default")
4Verifykubectl get deployment hello-world -n default

Update Services Workflow (Manual Step)

If the Rollout used hello-world-stable and hello-world-canary Services, you may need to:

StepActionPrompt / Tool
1Point main ServiceUpdate the primary Service selector to match the Deployment's pod template labels
2Remove canary/stableDelete or repurpose hello-world-stable and hello-world-canary if no longer needed

Clean Up Ingress Routes Workflow

StepActionPrompt / Tool
1Update IngressRoute/TraefikServicePoint traffic to the Deployment's Service instead of weighted TraefikService
2Remove weighted routingDelete or simplify TraefikService/IngressRoute if canary routing is no longer used

Natural Language Prompts

Copy-paste these prompts into your MCP client (Cursor, Claude, etc.).

Convert

"Convert the hello-world Argo Rollout in default back to a standard Kubernetes Deployment with RollingUpdate strategy, 25% max surge."
"I need to abandon Argo Rollouts for hello-world — convert the rollout YAML back to a standard deployment."

Delete Rollout

"Delete the hello-world Argo Rollout from the default namespace."
"Remove the hello-world rollout in default and all its associated services."

Quick Reference: Tool → Prompt Mapping

ToolExample Prompt
convert_rollout_to_deployment"Convert the hello-world Argo Rollout in default back to a standard Deployment with RollingUpdate, 25% max surge."
argo_delete_rollout"Delete the hello-world Argo Rollout from the default namespace."

convert_rollout_to_deployment Parameters

ParameterDefaultDescription
rollout_yaml(required)Argo Rollout YAML string (from kubectl get rollout ... -o yaml)
deployment_strategy"RollingUpdate"RollingUpdate or Recreate
max_surge"25%"Max surge for RollingUpdate
max_unavailable"25%"Max unavailable for RollingUpdate

Troubleshooting

IssueCheck
convert_rollout_to_deployment failsEnsure rollout_yaml is valid YAML. For workloadRef rollouts, the tool strips workloadRef; ensure template is reconstructable.
Deployment has no templateworkloadRef rollouts have no inline template. Fetch the referenced Deployment YAML and use that, or convert after the Rollout has been promoted and owns the workload.
Services still point to canary/stableManually update Service selectors to match Deployment pod template labels.
Argo CD recreates RolloutIf Rollout is in Git/Argo CD, remove it from the repo first, then delete from cluster.
Ingress still uses TraefikServiceUpdate IngressRoute to point to the main Service; remove or simplify weighted routing.

Next Steps

  • Onboarding — Migrate back to Rollouts later
  • ArgoCD GitOps — GitOps considerations for Rollout removal
  • Toolsconvert_rollout_to_deployment, argo_delete_rollout
  • Examples — Quick reference and prompts