When using ArgoCD to automate your application deployments, you might encounter an issue where a deployment gets stuck in the Progressing state. This often happens due to kubernetes finalizers not being released properly, preventing the related pods and resources from being destroyed.
Finalizers are Kubernetes resources that ensure certain clean-up tasks are completed before an object is fully deleted, but if they malfunction or don’t get removed, they can block deletion and cause your deployment to hang indefinitely.
I’ll walk you through a step-by-step process to resolve this issue by manually removing the finalizers and then successfully deleting the stuck ArgoCD app.
Step-by-Step Guide
Step 1: Identify the Problem
When an ArgoCD app gets stuck in the "Progressing" state, you can confirm the issue by inspecting the status of the app and looking for finalizers that are preventing deletion.
You can do this by running the following command:
kubectl get app APP_NAME -o yaml
Look for the metadata.finalizers field. If you see finalizers listed but the app cannot progress to completion, that’s the cause of the problem.
Step 2: Patch the App to Remove Finalizers
To resolve the stuck state, you need to remove the finalizers from the ArgoCD app. You can do this by running the following **kubectl** command:
kubectl patch app APP_NAME -p '{"metadata": {"finalizers": null}}' --type merge
This command removes the finalizers from the app, allowing Kubernetes to bypass the finalizer logic and proceed with the app deletion.
Step 3: Patch the CRD (If Necessary)
In some cases, the Custom Resource Definition (CRD) associated with the app may also have finalizers that are causing the stuck state. To remove the finalizers from the CRD, use the following command:
kubectl patch crd CRD_NAME -p '{"metadata": {"finalizers": null}}' --type merge
This ensures that any finalizer present in the CRD is also removed, allowing for complete deletion of the resources.
Step 4: Delete the Stuck App
After patching the finalizers, you can safely delete the stuck app by using the following command:
kubectl delete app APP_NAME
Step 5: Delete the CRD
If needed, you can also delete the CRD after patching its finalizers:
kubectl delete crd CRD_NAME
This should fully remove the app and any related resources, resolving the stuck progressing state.
Deployments getting stuck in the Progressing state in ArgoCD can often be traced back to finalizers not being properly removed, which blocks resource deletion. By manually patching the app and any related CRDs to remove finalizers, you can resolve this issue and successfully delete the resources.
If you’re facing this issue frequently, consider reviewing the finalizer behavior in your environment and ArgoCD configurations to ensure that finalizers are being handled correctly during normal operations. Properly configured finalizers will help avoid these kinds of issues in the future.